Re, On Mon, 11 Sep 2023 at 17:17, Simon Tournier <zimon.touto...@gmail.com> wrote: > On Mon, 11 Sep 2023 at 16:23, Ludovic Courtès <l...@gnu.org> wrote: > >> Note that the patch series adds a hard dependency on Git. >> This is because the existing ‘git-fetch’ code depends on Git, >> which is itself motivated by the fact that Git supports >> shallow clones and libgit2/Guile-Git doesn’t.
[...] > Personally, I do not have a strong opinion about the Big Plan™. I note > that the introduction of Git as a hard dependency is a slippery slope > considering the current state of libgit2. Here, it starts with “git > clone”, then “git gc” (unsupported by libgit2) is also in the pipes > (#65720 [1]). And after timing, I am almost sure that many operations > using Guile-Git will be slower than their plain Git counter-parts. And > we will start to parse the output of ’git’ plumbing commands. Slippery > slope for pushing Guile-Git out, no? For example, having plain Git command with shallow clone would allow to save resource when cloning the first time the Guix checkout cache. Compare, --8<---------------cut here---------------start------------->8--- $ git clone https://git.savannah.gnu.org/git/guix.git guix-full Cloning into 'guix-full'... remote: Counting objects: 696917, done. remote: Compressing objects: 100% (143179/143179), done. remote: Total 696917 (delta 552872), reused 696909 (delta 552867) Receiving objects: 100% (696917/696917), 347.14 MiB | 29.31 MiB/s, done. Resolving deltas: 100% (552872/552872), done. --8<---------------cut here---------------end--------------->8--- and, --8<---------------cut here---------------start------------->8--- $ git clone --shallow-since=2019-04-30 https://git.savannah.gnu.org/git/guix.git guix-oldest Cloning into 'guix-oldest'... remote: Counting objects: 426879, done. remote: Compressing objects: 100% (87246/87246), done. remote: Total 426879 (delta 342111), reused 423970 (delta 339518) Receiving objects: 100% (426879/426879), 259.75 MiB | 11.26 MiB/s, done. Resolving deltas: 100% (342111/342111), done. Checking connectivity: 426863, done. --8<---------------cut here---------------end--------------->8--- (Here, 2019-04-30 is the date that contains the %oldest-possible-commit "6298c3ffd9654d3231a6f25390b056483e8f407c" v1.0.) Well, ’shallow’ probably implies an overload on server side. But that is far less than the bits it saves: 87.39 MiB (= 347.14 - 259.75). It saves something like 25% to download, if I read correctly. I let you do some maths for the improvement you will get. :-) And there is no integration with Guile-Git, if I read correctly. The job is done by the procedure ’clone*’ from the module (guix git). This procedure call the Guile-Git procedure ’clone’ which could drop-in replaced by (invoke git-command "clone --shallow-since=2019-04-30" …). Cheers, simon