El otro día intenté instalar opencv-git
desde el AUR con makepkg
en Arch Linux. Por supuesto que tira del git repositorio como su nombre lo indica. Esto tira 1Gb. Estoy leyendo sobre hacer un clon superficial con git
. Cuando miro el PKGBUILD
archivo, usando grep git PKGBUILD
, veo:
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"
¿Hay una manera de modificar la receta o la makepkg
orden de tirar solamente un clon sin profundidad (la última versión de la fuente es lo que quiero) y no el depósito completo para ahorrar espacio y ancho de banda? La lectura man 5 PKGBUILD
no proporciona la información que estoy buscando. También revisé rápidamente las páginas de manualmakepkg
y - parece que no puedo encontrar cómo hacerlo.pacman
arch-linux
git
HalosGhost
fuente
fuente
git+http://github.com/Itseez/opencv.git
en la receta de AUR con un nombre de ruta local. ¿Has intentado eso? Si este sistema de compilación te obliga a clonar un repositorio incluso si lo tienes disponible localmente, entonces es bastante loco.Respuestas:
Esto se puede hacer usando un agente personalizado . Realmente no entiendo el empaque Arch o cómo funcionan los dlagents, por lo que solo tengo una respuesta de pirateo, pero hace el trabajo.
La idea es modificar el PKGBUILD para usar un agente de descarga personalizado. Modifiqué la fuente
dentro
y luego definió un nuevo dlagent llamado
mygit
que hace un clon superficial. Lo hice agregando a laDLAGENTS
matriz en/etc/makepkg.conf
el siguiente dlagent:Mi conjetura es que probablemente se podría definir este agente de descarga en otro lugar, pero no sé cómo. Observe también que el repositorio que está siendo clonado está codificado en el comando. De nuevo, esto probablemente se puede evitar. Finalmente, la ubicación de descarga no es lo que PKGBUILD espera. Para evitar esto, simplemente muevo el repositorio después de descargarlo. Hago esto agregando
Al comienzo de la
pkgver
función.Creo que la solución más limpia sería descubrir qué
git+http
está haciendo el agente y redifinarlo temporalmente. Esto debería evitar todos los aspectos de pirateo de la solución.fuente
Personalmente modifiqué el script makepkg y funciona de maravilla:
Agregar "--mirror --single-branch --depth 1" al comando "git clone":
Aquí está una vista diff:
fuente
branch
,tag
,commit
etc.)./usr/share/makepkg/source/git.sh
debería ser parcheado en su lugarSegún https://bugs.archlinux.org/task/23065 (crédito a jasonwryan), agregar una funcionalidad de clonación superficial a AUR PKGBUILD fue un elemento de la lista de deseos que se cerró el sábado 05 de marzo de 2011 con el comentario:
Esto sugiere que no va a suceder a menos que alguien envía un parche.
Como le sugerí al afiche en los comentarios, lo que él está tratando de hacer casi con seguridad se puede lograr dividiendo el proceso en dos pasos:
fuente
makepkg
(pkgver se queja un poco, pero aún así) ¡y también funciona!Si crea un espejo poco profundo del repositorio en el mismo directorio que
PKGBUILD
, puede usarmakepkg --holdver
para evitar lamakepkg
actualización del resto del repositorio. Esto elimina la necesidad de modificar elPKGBUILD
,makepkg.conf
omakepkg
en sí; sin embargo, la clonación / actualización del repositorio debe hacerse manualmente.Como ejemplo con
cling-git
, que normalmente clonaría la totalidad dellvm
yclang
:Desde las páginas de manual de makepkg:
Tenga en cuenta que makepkg seguirá clonando repos que todavía no están presentes, lo que significa que podría haber omitido clonar manualmente el
cling
repositorio en el ejemplo anterior ya que no es tan grande.fuente
Si no desea modificar los scripts makepkg.
como se describe aquí , el punto
DEVELSRCDIR
en/etc/yaourtrc
o~/.yaourtrc
archivo en alguna carpeta persistente. Luego, todos los pagos del repositorio (git / svn / ...) sucederán en esta carpeta. Una vez que se clona el repositorio, solo se realizará una búsqueda rápida con las revisiones más recientes en lugar del clon completo cada vez.fuente