[Fuego] [PATCH 4/9] functions: fix preference order when unpacking or cloning

Daniel Sangorrin daniel.sangorrin at toshiba.co.jp
Tue Nov 7 07:21:22 UTC 2017


In the previous implementation the preference was
  spec tarball > fuego_test tarball > spec gitrepo > fuego_test gitrepo

This patch changes it to
  spec gitrepo > spec tarball > fuego_test gitrepo > fuego_test tarball

Therefore, spec.json gitrepo/tarball variables take precedence over
fuego_test.sh variables. And if, for some reason, gitrepo and
tarball variables are defined at the same time, then gitrepo will
take precedence. This case is not supposed to happen though.

Signed-off-by: Daniel Sangorrin <daniel.sangorrin at toshiba.co.jp>
---
 engine/scripts/functions.sh | 137 ++++++++++++++++++++++++++------------------
 1 file changed, 82 insertions(+), 55 deletions(-)

diff --git a/engine/scripts/functions.sh b/engine/scripts/functions.sh
index da3415b..fe27b0c 100755
--- a/engine/scripts/functions.sh
+++ b/engine/scripts/functions.sh
@@ -38,72 +38,99 @@ trap signal_handler SIGTERM SIGHUP SIGALRM SIGINT EXIT
 # cause ERR trap setting to be visible inside functions
 set -o errtrace
 
-# Unpacks/clones the test source code into the current directory.
-#
-# Tarball or git variables can be in the spec or directly in fuego_test.sh
-# Variables in the spec have preference.
-#
-# Tarball variables
-#   - tarball: tarball file name (e.g. bc-script.tar.gz)
-# Git variables
-#   - gitrepo: git repository (e.g. https://github.com/torvalds/linux.git)
-#   - gitref: git branch, tag or commit id (optional, default: master)
-function unpack {
-    # Tarballs
-    upName=`echo "${TESTDIR^^}"| tr '.' '_'`
-    spec_tarball="${upName}_TARBALL"
-
-    if [ ! -z "${!spec_tarball}" ]; then
-        tarball=${!spec_tarball}
+# Clones a git repository into the current folder
+# $1 (gitrepo): git repository URL
+# $2 (gitref): branch, tag or commit id (optional, default: master)
+# FIXTHIS: add commit id information to the json output
+function git_clone {
+    local gitrepo=${1}
+    local gitref=${2}
+
+    is_empty "$gitrepo"
+
+    if [ -z "$gitref" ]; then
+        gitref="master"
     fi
 
-    if [ ! -z ${tarball+x} ]; then
-        echo "Unpacking $tarball"
-        case ${tarball/*./} in
-            gz|tgz) key=z ;;
-            bz2) key=j ;;
-            tar) key= ;;
-            *) echo "Unknown $tarball file format. Not unpacking."; return 1;;
-        esac
-        tar ${key}xf $TEST_HOME/$tarball --strip-components=1
-        return
+    local is_namedref=$(git ls-remote $gitrepo $gitref)
+
+    if [ "$is_namedref" = "" ]; then
+        echo "Clone repository $gitrepo."
+        git clone -n $gitrepo fuego_git_repo
+    else
+        echo "Clone repository $gitrepo."
+        git clone -n --depth=1 --branch=$gitref $gitrepo fuego_git_repo
     fi
 
-    # GIT repositories
-    spec_gitrepo="${upName}_GITREPO"
-    spec_gitref="${upName}_GITREF"
+    # equivalent to tarball's --strip-components=1
+    mv fuego_git_repo/.git .git
+    rm -rf fuego_git_repo
 
-    if [ ! -z "${!spec_gitrepo}" ]; then
-        gitrepo=${!spec_gitrepo}
-    fi
+    echo "Checkout branch/tag/commit id $gitref."
+    git checkout $gitref
+}
 
-    if [ ! -z "${!spec_gitref}" ]; then
-        gitref=${!spec_gitref}
-    fi
+# Untars a tarball in the current folder
+# $1 (tarball): file to untar
+function untar {
+    local tarball=${1}
 
-    # FIXTHIS: add commit id information to the json output
-    if [ ! -z ${gitrepo+x} ]; then
-        if [ -z ${gitref+x} ]; then
-            gitref="master"
-        fi
+    is_empty "$tarball"
 
-        is_namedref=$(git ls-remote $gitrepo $gitref)
+    echo "Unpacking $tarball"
+    case ${tarball/*./} in
+        gz|tgz) key=z ;;
+        bz2) key=j ;;
+        tar) key= ;;
+        *) echo "Unknown $tarball file format. Not unpacking."; return 1;;
+    esac
+    tar ${key}xf $TEST_HOME/$tarball --strip-components=1
+}
 
-        if [ "$is_namedref" = "" ]; then
-            echo "Clone repository $gitrepo."
-            git clone -n $gitrepo fuego_git_repo
+# Unpacks/clones the test source code into the current directory.
+#
+# The following tarball and git variables can be specified in the test's
+# spec.json or fuego_test.sh.
+#   - Tarball variables
+#     - tarball: tarball file name (e.g. bc-script.tar.gz)
+#   - Git variables
+#     - gitrepo: git repository (e.g. https://github.com/torvalds/linux.git)
+#     - gitref: git branch, tag or commit id (optional, default: master)
+#
+# tarball and git variables follow the next preference rule:
+#   spec gitrepo > spec tarball > fuego_test gitrepo > fuego_test tarball
+function unpack {
+    # prepare variables
+    upName=`echo "${TESTDIR^^}"| tr '.' '_'`
+    spec_gitrepo="${upName}_GITREPO"
+    spec_gitref="${upName}_GITREF"
+    spec_tarball="${upName}_TARBALL"
+    # 1) spec gitrepo
+    if [ ! -z "${!spec_gitrepo}" ]; then
+        gitrepo=${!spec_gitrepo}
+        if [ ! -z "${!spec_gitref}" ]; then
+            gitref=${!spec_gitref}
         else
-            echo "Clone repository $gitrepo."
-            git clone -n --depth=1 --branch=$gitref $gitrepo fuego_git_repo
+            # gitref could have been defined by fuego_test.sh
+            gitref="master"
         fi
-
-        # equivalent to tarball's --strip-components=1
-        mv fuego_git_repo/.git .git
-        rm -rf fuego_git_repo
-
-        echo "Checkout branch/tag/commit id $gitref."
-        git checkout $gitref
-
+        git_clone "$gitrepo" "$gitref"
+        return
+    fi
+    # 2) spec tarball
+    if [ ! -z "${!spec_tarball}" ]; then
+        tarball=${!spec_tarball}
+        untar "$tarball"
+        return
+    fi
+    # 3) fuego_test gitrepo
+    if [ ! -z "$gitrepo" ]; then
+        git_clone "$gitrepo" "$gitref"
+        return
+    fi
+    # 4) fuego_test tarball
+    if [ ! -z "$tarball" ]; then
+        untar "$tarball"
         return
     fi
 
-- 
2.7.4




More information about the Fuego mailing list