From: Thierry Parmentelat Date: Mon, 24 Mar 2014 15:53:38 +0000 (+0100) Subject: use git clone if git archive is unavailable X-Git-Tag: 5.3.2~9 X-Git-Url: http://git.onelab.eu/?p=build.git;a=commitdiff_plain;h=89c5cf95aa405268fb3052a00073846aeed692c7 use git clone if git archive is unavailable --- diff --git a/Makefile b/Makefile index 669471f0..1c9e81f4 100644 --- a/Makefile +++ b/Makefile @@ -362,16 +362,40 @@ endef $(foreach package,$(ALL),$(eval $(call target_spec,$(package)))) +#################### +# fetch modules +# expected input: +# $(1) is the name of a git module +# $($(1).gitrepo) and $(($1).gittag) are used to determine branch or tag name +# expected result +# $(1)/ in the cwd will hold the result + +# fetch svn module +define fetch_svn_module + svn export $($(1)-SVNPATH) $(1) +endef + +# git_fetch_module +# as far as possible we use git-archive to fetch a git module +# however if that fails we fallback to a git-clone strategy, +# for when git-archive is not supported, e.g. for github +# side effect +# $(1)/ gets cleaned up if job cannot be done +define fetch_git_module + mkdir $(1) ; \ + (git archive --remote=$($(1).gitrepo) $($(1).gittag) | tar -C $(1) -xf - ) || \ + (echo "==================== git archive FAILED, trying git clone instead" ; \ + git clone $($(1).gitrepo) $(1); cd $(1) ; git checkout $($(1).gittag) ; rm -rf .git ) || \ + { rm -rf $(1); false; } +endef + ### module extraction define target_extract_module MODULES/$(1): @(echo -n "XXXXXXXXXXXXXXX -- BEG MODULE $(1) : $@ " ; date) mkdir -p MODULES cd MODULES && \ - $(if $($(1)-SVNPATH),\ - svn export $($(1)-SVNPATH) $(1),\ - mkdir $(1) ; (git archive --remote=$($(1).gitrepo) $($(1).gittag) | tar -C $(1) -xf - ) \ - || { rm -rf $(1); false; } ) + $(if $($(1)-SVNPATH),$(call fetch_svn_module,$(1)),$(call fetch_git_module,$(1)) ) @(echo -n "XXXXXXXXXXXXXXX -- END MODULE $(1) : $@ " ; date) $(1)-module: MODULES/$(1) diff --git a/lbuild-nightly.sh b/lbuild-nightly.sh index af3a49d9..d9579bc5 100755 --- a/lbuild-nightly.sh +++ b/lbuild-nightly.sh @@ -689,7 +689,10 @@ function main () { GIT_REPO=$(echo $BUILD_SCM_URL | cut -d@ -f1) GIT_TAG=$(echo $BUILD_SCM_URL | cut -s -d@ -f2) GIT_TAG=${GIT_TAG:-master} - mkdir -p $tmpdir; git archive --remote=$GIT_REPO $GIT_TAG | tar -C $tmpdir -xf - + mkdir -p $tmpdir + ( git archive --remote=$GIT_REPO $GIT_TAG | tar -C $tmpdir -xf -) || \ + ( echo "==================== git archive FAILED, trying git clone instead" ; \ + git clone $GIT_REPO $tmpdir && cd $tmpdir && git checkout $GIT_TAG && rm -rf .git) # Create lxc vm cd $tmpdir