No outro dia eu tentei instalar opencv-git
a partir do AUR com makepkg
no Arch Linux. Obviamente, ele é extraído do repositório git como o nome indica. Isso puxa 1Gb. Estou lendo sobre como fazer um clone superficial com git
. Quando olho para o PKGBUILD
arquivo, usando grep git PKGBUILD
, vejo:
pkgname="opencv-git"
makedepends=('git' 'cmake' 'python2-numpy' 'mesa' 'eigen2')
provides=("${pkgname%-git}")
conflicts=("${pkgname%-git}")
source=("${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
cd "${srcdir}/${pkgname%-git}"
git describe --long | sed -r 's/([^-]*-g)/r\1/;s/-/./g'
cd "${srcdir}/${pkgname%-git}"
cd "${srcdir}/${pkgname%-git}"
cd "${srcdir}/${pkgname%-git}"
install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname%-git}/LICENSE"
Existe uma maneira de modificar a receita ou o makepkg
comando para obter apenas um clone superficial (a versão mais recente da fonte é o que eu quero) e não o repositório completo para economizar espaço e largura de banda? A leitura man 5 PKGBUILD
não fornece o insight que estou procurando. Também olhou rapidamente pelas páginasmakepkg
e pacman
man - parece que não consegue encontrar como fazer isso.
arch-linux
git
HalosGhost
fonte
fonte
git+http://github.com/Itseez/opencv.git
na receita do AUR por um nome de caminho local. Você já tentou isso? Se esse sistema de compilação obriga a clonar um repositório, mesmo que você o tenha disponível localmente, é um absurdo.Respostas:
Isso pode ser feito usando um dlagent personalizado . Eu realmente não entendo a embalagem do Arch ou como os dlagents funcionam, então só tenho uma resposta de hack, mas ele faz o trabalho.
A idéia é modificar o PKGBUILD para usar um agente de download personalizado. Eu modifiquei a fonte
para dentro
e então definimos um novo dlagent chamado
mygit
que faz um clone superficial. Fiz isso adicionando àDLAGENTS
matriz no/etc/makepkg.conf
seguinte dlagent:Meu palpite é que você provavelmente poderia definir esse agente de download em outro lugar, mas não sei como. Observe também que o repositório que está sendo clonado está codificado no comando. Novamente, isso provavelmente pode ser evitado. Finalmente, o local do download não é o que o PKGBUILD espera. Para contornar isso, simplesmente movo o repositório após o download. Eu faço isso adicionando
no início da
pkgver
função.Eu acho que a solução mais limpa seria descobrir o que o
git+http
dlagent está fazendo e redefinir isso temporariamente. Isso deve evitar todos os aspectos de hack da solução.fonte
Pessoalmente, modifiquei o script makepkg e ele está funcionando como um encanto:
Anexando "--mirror - único ramo - profundidade 1" ao comando "git clone":
Aqui está uma visão diferencial:
fonte
branch
,tag
,commit
etc.)./usr/share/makepkg/source/git.sh
deve ser corrigido em vez dissoDe acordo com https://bugs.archlinux.org/task/23065 (crédito a jasonwryan), adicionar funcionalidade de clonagem rasa ao AUR PKGBUILD era um item da lista de desejos que foi fechado no sábado, 5 de março de 2011 com o comentário:
Isso sugere que isso não acontecerá, a menos que alguém envie um patch.
Como sugeri ao pôster nos comentários, o que ele está tentando fazer quase certamente pode ser realizado dividindo o processo em duas etapas:
fonte
makepkg
(pkgver reclama um pouco, mas ainda assim) e funciona também!Se você criar um espelho superficial do repositório no mesmo diretório que o
PKGBUILD
, poderá usarmakepkg --holdver
para impedir amakepkg
atualização do restante do repositório. Isso elimina a necessidade de modificar oPKGBUILD
,makepkg.conf
oumakepkg
em si; no entanto, a clonagem / atualização do repositório precisa ser feita manualmente.Como um exemplo com
cling-git
, que normalmente clonaria a totalidade dellvm
eclang
:Nas páginas de manual do makepkg:
Observe que o makepkg ainda clonará
cling
repositórios que ainda não estão presentes, o que significa que eu poderia ter omitido a clonagem manual do repositório no exemplo acima, pois ele não é tão grande.fonte
Se você não deseja modificar os scripts do makepkg.
conforme descrito aqui , o ponto
DEVELSRCDIR
em/etc/yaourtrc
ou~/.yaourtrc
arquivo para alguma pasta persistente. Todos os checkouts do repositório (git / svn / ...) acontecerão nesta pasta. Depois que o repositório é clonado, somente a busca rápida com as revisões mais recentes será executada em vez do clone completo a cada vez.fonte