From 429392e6041fd5777c9a5a437f6455bca0fe3ed8 Mon Sep 17 00:00:00 2001 From: "Stefan K. Berg" Date: Tue, 15 Dec 2015 15:57:46 +0100 Subject: Fix for cache handling Introduced a separate function "getcommitid" in the cache.sh - a.k.a. $(CACHETOOL) - so that given a repo and a tag, branch or commitid the corresponding commitid is returned. The same principle should be used in all caching functions where not a strict tag or head is specified (as git ls-remote will not be able to figure out the commit id in those cases). Change-Id: I3540dca7ab408c872eaabdc68d4058f9d6d7c45f Signed-off-by: Stefan K. Berg --- build/cache.sh | 50 ++++++++++++++++++++++----- build/f_isoroot/f_bgpvpn-pluginbuild/Makefile | 6 +++- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/build/cache.sh b/build/cache.sh index c8cd1b03d..ed900568a 100755 --- a/build/cache.sh +++ b/build/cache.sh @@ -9,6 +9,15 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## + +exit_trap() { + if [ -d "$TMPDIR" ]; then + rm -rf $TMPDIR + fi +} + +trap exit_trap EXIT + CACHETRANSPORT=${CACHETRANSPORT:-"curl --silent"} CACHEBASE=${CACHEBASE:-"file://${HOME}/cache"} CACHEMAXAGE=${CACHEMAXAGE:-$[14*24*3600]} @@ -20,8 +29,9 @@ debugmsg () { fi } -errormsg () { +errorexit () { echo "$@" >&2 + exit 1 } # Get a SHA1 based on what's piped into the cache command @@ -84,22 +94,45 @@ validSHA1() { fi } +# Figure out commit ID from URI and tag/branch/commit ID +getcommitid() { + HEADMATCH=`git ls-remote $1 | grep "refs/heads/$2$" | awk '{ print $1 }'` + TAGMATCH=`git ls-remote $1 | grep "refs/tags/$2$" | awk '{ print $1 }'` + + if [ -n "$HEADMATCH" ]; then + echo "$HEADMATCH" + elif [ -n "$TAGMATCH" ]; then + echo "$TAGMATCH" + else + TMPDIR=`mktemp -d /tmp/cacheXXXXX` + cd $TMPDIR + git clone $1 &>/dev/null || errorexit "Could not clone $1" + cd * || errorexit "Could not enter clone of $1" + git show $2 &>/dev/null || errorexit "Could not find commit $2" + git show $2 | head -1 | awk '{ print $2 }' + fi +} + case $1 in + getcommitid) + if [ $# -ne 3 ]; then + errorexit "Arg 1 needs to be URI and arg 2 tag/branch/commit" + fi + shift + getcommitid $@ + ;; getid) if [ $# -ne 1 ]; then - errormsg "No arguments can be given to getid!" - exit 1 + errorexit "No arguments can be given to getid!" fi getid ;; get|check|put) if [ $# -ne 2 ]; then - errormsg "Only one argument, the SHA1 sum, can be given to getid!" - exit 1 + errorexit "Only one argument, the SHA1 sum, can be given to getid!" else if ! validSHA1 $2; then - errormsg "Invalid SHA1 format!" - exit 1 + errorexit "Invalid SHA1 format!" fi fi @@ -107,6 +140,5 @@ case $1 in exit $rc ;; *) - errormsg "I only know about getid, check, get and put!" - exit 1 + errorexit "I only know about getcommitid, getid, check, get and put!" esac diff --git a/build/f_isoroot/f_bgpvpn-pluginbuild/Makefile b/build/f_isoroot/f_bgpvpn-pluginbuild/Makefile index 443a8e39c..3da8d38b9 100644 --- a/build/f_isoroot/f_bgpvpn-pluginbuild/Makefile +++ b/build/f_isoroot/f_bgpvpn-pluginbuild/Makefile @@ -61,7 +61,11 @@ release:.bgpvpnbuild # - The SHA1 hash of the HEAD on the plugin repo's $(BGPVPN_BRANCH) # - The contents of this Makefile .cacheid: - git ls-remote --heads $(BGPVPN_REPO) | grep $(BGPVPN_BRANCH) > .cachedata + if [ ! -z $(BGPVPN_CHANGE) ]; then \ + $(CACHETOOL) getcommitid $(BGPVPN_REPO) $(BGPVPN_CHANGE) > .cachedata; \ + else \ + $(CACHETOOL) getcommitid $(BGPVPN_REPO) $(BGPVPN_BRANCH) > .cachedata; \ + fi sha1sum Makefile >> .cachedata sha1sum config.mk >> .cachedata cat .cachedata | $(CACHETOOL) getid > .cacheid -- cgit 1.2.3-korg