summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan K. Berg <stefan.k.berg@ericsson.com>2015-12-15 15:57:46 +0100
committerStefan K. Berg <stefan.k.berg@ericsson.com>2015-12-18 00:37:25 +0100
commit429392e6041fd5777c9a5a437f6455bca0fe3ed8 (patch)
tree730b872ef172ea826251f24decaead2e89090146
parentf86c13c4e5a301946e6151bf57760dcebab67265 (diff)
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 <stefan.k.berg@ericsson.com>
-rwxr-xr-xbuild/cache.sh50
-rw-r--r--build/f_isoroot/f_bgpvpn-pluginbuild/Makefile6
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