Subject: Re: bug#33100: [libssh] fatal: dumb http transport does not support shallow capabilities

From: Leo Famulari <[email-masked]>
Date: Mon, 22 Oct 2018 13:07:34 -0400

On Mon, Oct 22, 2018 at 11:55:26AM +0200, Ludovic Courtès wrote:
> Maxim Cournoyer <[email-masked]> skribis:
> > It did end up working fine, although it took a large amout of time for
> > doing what seems to be a checkout (4 min 46 s). I did some experiments
> > and this is really the time it took to do a full clone of the libssh
> > project.

[...]

> > It's a bit of a shame, given that the shallow clone takes about 2
> > seconds (!):

Yeah, it's incredibly slow. The repo is not even 10 MB. At first, I too
thought the HTTPS clone had stalled.

Protocol	duration
------------------------
https:// 	217 sec
git://		10 sec
git:// shallow 	1.5 sec

And of course, the shallow clone is 3.6 MB instead of 10 MB.

> Switching to the git:// transport would seem like a reasonable
> workaround—we’d lose encryption and authentication, but the latter is
> covered by the content hash in the ‘origin’ anyway.
> 
> WDYT, Leo?

Overall, I think the slowness doesn't matter too much, since we offer
substitutes for the patched source code. However, here is a patch.
Please feel free to apply it!

I'll ask the libssh team to support "smart" HTTP Git.
From 683713dd8f5d67e3f077d5d13c23e5556d8ad779 Mon Sep 17 00:00:00 2001
From: Leo Famulari <[email-masked]>
Date: Mon, 22 Oct 2018 13:00:55 -0400
Subject: [PATCH] gnu: libssh: Fetch the source code more efficiently.

* gnu/packages/ssh.scm (libssh)[source]: Use the git:// protocol.
---
 gnu/packages/ssh.scm | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index e806fc80f..b93cb03a1 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -71,8 +71,14 @@
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://git.libssh.org/projects/libssh.git")
-                    (commit (string-append "libssh-" version))))
+                     ;; git.libssh.org does not support the fast "smart" HTTP
+                     ;; Git protocol. The "dumb" HTTP Git protocol is extremely
+                     ;; slow, and does not support shallow clones, so we use the
+                     ;; plain Git protocol despite its flaws. This offers an
+                     ;; incredible speedup and reduces the size of the the
+                     ;; source by more than half.
+                     (url "git://git.libssh.org/projects/libssh.git")
+                     (commit (string-append "libssh-" version))))
               (patches (search-patches "libssh-hostname-parser-bug.patch"))
               (sha256
                (base32
-- 
2.19.1