• 作成:

portageのeselect-repo.confでgitのoverlayをshallow cloneしてほしくない時の設定

問題

Gentooで自前のportage overlayを作って利用する場合、以下のようなコマンドを実行すれば良いです。

sudo eselect repository add ncaq-overlay git https://github.com/ncaq/ncaq-overlay.git

そうすると、 /etc/portage/repos.conf/eselect-repo.conf に以下のように書き込まれます。

[ncaq-overlay]
location = /var/db/repos/ncaq-overlay
sync-type = git
sync-uri = https://github.com/ncaq/ncaq-overlay.git

ここでsync-type = git指定されたリポジトリはgit cloneする時やpullする時に--depth 1でshallow cloneされるようになっています。普通は余計に容量を食わなくてありがたいのですが、自前のoverlayを作っている場合開発もそこで行ってテストしながらpushしたりpullしたいです。

もちろんshallow cloneはgit fetch --unshallowで解除可能ですが、いつからかpullするたびにshallow状態になってしまうようになりました。これは面倒くさい。

これを回避するための設定を調べました。

調査

普通に調べてもよく分からなかったので、ソースコード読んだほうが速いなと思って読みました。

shallow = False

https://github.com/gentoo/portage/blob/ffba5c4c48d8b937927ee67ac7c3dfc226827ddc/lib/portage/sync/modules/git/git.py#L250

を維持するために、

if sync_depth > 0:

を満たさないようにする必要があるようです。

じゃあ、

sync-depth = 0

と書くしか無さそうですね…?

解決

どうやらとりあえず、

[ncaq-overlay]
location = /var/db/repos/ncaq-overlay
sync-type = git
sync-uri = https://github.com/ncaq/ncaq-overlay.git
sync-depth = 0

で解決可能なようです。 depthの値として0は不正なので乱暴な気はしますが。