X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=build%2Fcache.sh;h=b5f090210dfcb732ccdfb0393c716d6468b0a97c;hb=ebd3a3fd83ffb80a5859f1721d648c8215d4b19c;hp=c8cd1b03d69c517d8ad27aea239ddd8e235ea4a6;hpb=24a95306d2564b272b5320e9149d9aea70b4061c;p=fuel.git diff --git a/build/cache.sh b/build/cache.sh index c8cd1b03d..b5f090210 100755 --- a/build/cache.sh +++ b/build/cache.sh @@ -9,8 +9,16 @@ # 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]} CACHEDEBUG=${CACHEDEBUG:-1} @@ -20,8 +28,16 @@ debugmsg () { fi } -errormsg () { +errorexit () { echo "$@" >&2 + exit 1 +} + +# Generate a unique number every two weeks - a service routine that +# can be used when generating the SHA1 to make sure that the cache is +# rebuilt bi-weekly even if no pruning of the cache is taking place. +getbiweek () { + echo "$(date +'%G')$[$(date +'%V')/2]" } # Get a SHA1 based on what's piped into the cache command @@ -84,22 +100,76 @@ validSHA1() { fi } +# Figure out commit ID from URI and tag/branch/commit ID +getcommitid() { + if echo $2 | grep -q '^refs/changes/'; then + REF=`echo $2 | sed "s,refs\/changes\/\(.*\),\1,"` + else + REF=$2 + fi + + echo "Repo is $1, ref is ${REF}" >&2 + + HEADMATCH=`git ls-remote $1 | grep "refs/heads/${REF}$" | awk '{ print $1 }'` + TAGMATCH=`git ls-remote $1 | grep "refs/tags/${REF}$" | awk '{ print $1 }'` + CHANGEMATCH=`git ls-remote $1 | grep "refs/changes/${REF}$" | awk '{ print $1 }'` + + if [ -n "$HEADMATCH" ]; then + echo "$HEADMATCH" + elif [ -n "$TAGMATCH" ]; then + echo "$TAGMATCH" + elif [ -n "$CHANGEMATCH" ]; then + echo "Warning: ${REF} is a change!" >&2 + 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 fetch $1 refs/changes/$REF &>/dev/null || errorexit "Could not fetch change" + git checkout FETCH_HEAD &>/dev/null || errorexit "Could not checkout FETCH_HEAD" + git show HEAD &>/dev/null || errorexit "Could not find commit $2" + git show HEAD | head -1 | awk '{ print $2 }' + 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 +} + + + +if [ -z "$CACHEBASE" ]; then + errorexit "CACHEBASE not set - exiting..." +fi + case $1 in + getbiweek) + if [ $# -ne 1 ]; then + errorexit "No arguments can be given to getbiweek!" + fi + getbiweek + ;; + 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 +177,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