Skip to contentSkip to conversation

pkg-download: Make a shallow clone for git downloads

PATCH New Arnout Vandecappelle (Essensium/Mind) 3 participants 3 messages Nov 1, 2012 – Nov 3, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 pkg-download: Make a shallow clone for git downloads

When downloading from git, we clone the whole repository and then only use the latest commit. That's a lot of redundant stuff. So instead, make a shallow clone. Unfortunately that's only possible when downloading a branch or tag, so fall back to the old method if git gives an error.

This speeds up the cloning of a linux git from more than 2 hours to 20 minutes on a 200KB/s link).

---
 package/pkg-download.mk |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
package/pkg-download.mk +4 -1
index fa9a3e8..6c57244 100644
@@ -73,10 +73,13 @@ domainseparator=$(if $(1),$(1),/)
 # "external dependencies" of a given build configuration.
 ################################################################################
 
+# Try a shallow clone - but that only works if the version is a ref (tag or
+# branch). Fall back on a full clone if it's a generic sha1.
 define DOWNLOAD_GIT
 	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
 	(pushd $(DL_DIR) > /dev/null && \
-	$(GIT) clone --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME) && \
+	 ($(GIT) clone --depth 1 -b $($(PKG)_DL_VERSION) --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME) || \
+	  $(GIT) clone --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME)) && \
 	pushd $($(PKG)_BASE_NAME) > /dev/null && \
 	$(GIT) archive --format=tar --prefix=$($(PKG)_BASE_NAME)/ $($(PKG)_DL_VERSION) | \
 		gzip -c > $(DL_DIR)/$($(PKG)_SOURCE) && \
Signature · 1 line
tg: (29266a3..) t/git-clone-shallow (depends on: master)
#1 lore raw

PATCH 1/1 pkg-download: Make a shallow clone for git downloads

Quoted 10 lines · Arnout Vandecappelle (Essensium/Mind)

When downloading from git, we clone the whole repository and then only use the latest commit. That's a lot of redundant stuff. So instead, make a shallow clone. Unfortunately that's only possible when downloading a branch or tag, so fall back to the old method if git gives an error.

This speeds up the cloning of a linux git from more than 2 hours to 20 minutes on a 200KB/s link).

But as discussed during the Buildroot Developer Days, the git downloader is growing in size and it's probably worth moving it to a helper script.

Luca

#2 lore raw

PATCH 1/1 pkg-download: Make a shallow clone for git downloads

In reply to Arnout Vandecappelle (Essensium/Mind)
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Arnout" == Arnout Vandecappelle (Essensium/Mind) <[email protected]> writes:

Arnout> When downloading from git, we clone the whole repository and then only Arnout> use the latest commit. That's a lot of redundant stuff. So instead, Arnout> make a shallow clone. Unfortunately that's only possible when Arnout> downloading a branch or tag, so fall back to the old method if git gives Arnout> an error.

Arnout> This speeds up the cloning of a linux git from more than 2 hours to Arnout> 20 minutes on a 200KB/s link).

And just think what difference it will make on the hotel Grumps connection ;)

Committed, thanks.

Signature · 1 line
Bye, Peter Korsgaard