Generalization of recursive function
[apex.git] / build / cache.sh
index 4d41a7a..17f0db2 100644 (file)
@@ -7,25 +7,21 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-
-CACHE_DIR="$(pwd)/cache"
+source ./variables.sh
 
 # Make sure the cache dir exists
 function cache_dir {
+    if [ -f $CACHE_DIR ]; then rm -rf $CACHE_DIR; fi
     if [ ! -d $CACHE_DIR/ ]; then mkdir $CACHE_DIR/; fi
-    if [ ! -f $CACHE_DIR/.cache ]; then touch $CACHE_DIR/.cache; fi
+    if [ ! -f $CACHE_DIR/$CACHE_HISTORY ]; then touch $CACHE_DIR/$CACHE_HISTORY; fi
     echo "Cache Dir: $CACHE_DIR"
 }
 
-function cache_git_tar {
-    echo "cache_git_tar git ls-remote"
-}
-
 # $1 = download url
 # $2 = filename to write to
 function curl_file {
     if [ -f $CACHE_DIR/$2 ]; then
-    echo "Removing stale $2"
+        echo "Removing stale $2"
         rm -f $CACHE_DIR/$2
     fi
     echo "Downloading $1"
@@ -33,34 +29,44 @@ function curl_file {
     until curl -C- -L -o $CACHE_DIR/$2 $1  || (( count++ >= 20 )); do
         echo -n '' #do nothing, we just want to loop
     done
-    sed -i "/$2/d" $CACHE_DIR/.cache
-    echo "$(md5sum $CACHE_DIR/$2) $2" >> $CACHE_DIR/.cache
+    sed -i "/$2/d" $CACHE_DIR/$CACHE_HISTORY
+    echo "$(md5sum $CACHE_DIR/$2) $2" >> $CACHE_DIR/$CACHE_HISTORY
 }
 
 # $1 =  download url
+# $2 =  remote md5
 function populate_cache {
     local my_md5
     cache_dir
 
     # get the file name
     filename="${1##*/}"
+    # copy passed in md5
+    remote_md5=$2
 
     # check if the cache file exists
     # and if it has an md5 compare that
-    echo "Checking cache file exists: ${filename}"
+    echo "Checking if cache file exists: ${filename}"
     if [ ! -f $CACHE_DIR/${filename} ]; then
         echo "Cache file: ${CACHE_DIR}/${filename} missing...will download..."
         curl_file $1 $filename
     else
         echo "Cache file exists...comparing MD5 checksum"
-        remote_md5="$(curl -sf -L ${1}.md5 | awk {'print $1'})"
+        if [ -z "$remote_md5" ]; then
+            remote_md5="$(curl -sf -L ${1}.md5 | awk {'print $1'})"
+        fi
         if [ -z "$remote_md5" ]; then
             echo "Got empty MD5 from remote for $filename, skipping MD5 check"
             curl_file $1 $filename
         else
-            my_md5=$(grep ${filename} $CACHE_DIR/.cache | awk {'print $1'})
+            my_md5=$(grep ${filename} ${CACHE_DIR}/${CACHE_HISTORY} | awk {'print $1'})
+            if [ -z "$my_md5" ]; then
+                echo "${filename} missing in ${CACHE_HISTORY} file. Caculating md5..."
+                my_md5=$(md5sum ${CACHE_DIR}/${filename} | awk {'print $1'})
+            fi
             if [ "$remote_md5" != "$my_md5" ]; then
-                echo "MD5 mismatch, cache file MD5 is ${my_md5}"
+                echo "MD5 mismatch, local cache file MD5 is ${my_md5}"
+                echo "              remote cache file MD5 is ${remote_md5}"
                 echo "Downloading $filename"
                 curl_file $1 $filename
             else
@@ -69,8 +75,3 @@ function populate_cache {
         fi
     fi
 }
-
-# $1 = filename to get from cache
-function get_cached_file {
-  cp -f $CACHE_DIR/$1 .
-}