Arch-Linux

如何修改使用 git 源僅提取淺複製的 PKGBUILD?

  • August 23, 2021

前幾天我嘗試在 Arch Linux 上opencv-gitAUR安裝。makepkg當然,顧名思義,它是從git儲存庫中提取的。這拉了 1Gb。我正在閱讀有關使用git. 當我查看PKGBUILD文件時,使用grep git PKGBUILD,我看到:

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"

有沒有辦法修改配方或makepkg命令以僅提取淺層複製(我想要的是最新版本的原始碼)而不是完整的儲存庫以節省空間和頻寬?閱讀man 5 PKGBUILD並不能提供我正在尋找的洞察力。還快速瀏覽了makepkg手冊pacman - 似乎找不到如何做到這一點。

這可以通過使用自定義dlagent來完成。我不太了解 Arch 打包或 dlagents 的工作原理,所以我只有一個 hack 答案,但它可以完成工作。

這個想法是修改 PKGBUILD 以使用自定義下載代理。我修改了源

"${pkgname%-git}::git+http://github.com/Itseez/opencv.git"

進入

"${pkgname%-git}::mygit://opencv.git"

然後定義了一個名為的新 dlagent mygit,它通過

makepkg DLAGENTS='mygit::/usr/bin/git clone --depth 1 http://github.com/Itseez/opencv.git'

另請注意,正在複製的儲存庫已硬編碼到命令中。同樣,這可能是可以避免的。最後,下載位置不是 PKGBUILD 所期望的。為了解決這個問題,我只需在下載後移動儲存庫。我通過添加來做到這一點

mv "${srcdir}/../mygit:/opencv.git" "${srcdir}/../${pkgname%-git}"

pkgver函式的開頭。

我認為更清潔的解決方案是弄清楚git+httpdlagent 正在做什麼並暫時重新定義它。這應該避免解決方案的所有黑客方面。

引用自:https://unix.stackexchange.com/questions/154919