El otro día intenté instalar opencv-gitdesde el AUR con makepkgen 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 PKGBUILDarchivo, 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 makepkgorden 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 PKGBUILDno 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.giten 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
mygitque hace un clon superficial. Lo hice agregando a laDLAGENTSmatriz en/etc/makepkg.confel 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
pkgverfunción.Creo que la solución más limpia sería descubrir qué
git+httpestá 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,commitetc.)./usr/share/makepkg/source/git.shdeberí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 --holdverpara evitar lamakepkgactualización del resto del repositorio. Esto elimina la necesidad de modificar elPKGBUILD,makepkg.confomakepkgen sí; sin embargo, la clonación / actualización del repositorio debe hacerse manualmente.Como ejemplo con
cling-git, que normalmente clonaría la totalidad dellvmyclang: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
clingrepositorio en el ejemplo anterior ya que no es tan grande.fuente
Si no desea modificar los scripts makepkg.
como se describe aquí , el punto
DEVELSRCDIRen/etc/yaourtrco~/.yaourtrcarchivo 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