fuel-plugin-ovsnfv: Enable plugin after rebase
[fuel.git] / build / cache.sh
index c8cd1b0..7c2f210 100755 (executable)
@@ -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,9 @@ debugmsg () {
     fi
 }
 
-errormsg () {
+errorexit () {
     echo "$@" >&2
+    exit 1
 }
 
 # Get a SHA1 based on what's piped into the cache command
@@ -84,22 +93,70 @@ 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
+    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 +164,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