clone.sh: Extract function clone_repo_to_share_folder()

This patch extracts function clone_repo_to_share_folder() in clone.sh to
keep the code easy to maintain.

Signed-off-by: Xinyu Zhang <xinyu.zhang@arm.com>
Change-Id: I1473918bc424af8f6980e76d89666bd40fb4220a
diff --git a/clone.sh b/clone.sh
index 2c4667e..064eed1 100755
--- a/clone.sh
+++ b/clone.sh
@@ -32,41 +32,19 @@
 . $(dirname $0)/utils/util_git.sh
 . $(dirname $0)/utils/util_parse_version.sh
 
-# Take into consideration non-CI runs where SHARE_FOLDER variable
-# may not be present
-if [ -z "${SHARE_FOLDER}" ]; then
-    # Default Jenkins values
-    SHARE_VOLUME="${SHARE_VOLUME:-$PWD}"
-    JOB_NAME="${JOB_NAME:-local}"
-    BUILD_NUMBER="${BUILD_NUMBER:-0}"
-    SHARE_FOLDER=${SHARE_VOLUME}/${JOB_NAME}/${BUILD_NUMBER}
-fi
+function clone_repo_to_share_folder() {
+    REPO_URL=$1
+    REPO_NAME=$2
+    REPO_REFSPEC=$3
 
-echo "Share Folder path: ${SHARE_FOLDER}"
-echo
-
-# Must projects
-if [ -n "${GERRIT_EVENT_HASH}" ]; then
-    # If triggered by Gerrit, use its variables
-    TFM_PROJECT="https://${GERRIT_HOST}/${GERRIT_PROJECT}"
-else
-    TFM_PROJECT="${CODE_REPO:?}"
-fi
-TFM_REFSPEC="${GERRIT_REFSPEC:?}"
-TFM_NAME="trusted-firmware-m"
-
-# Array containing "<repo url>;"<repo name>;<refspec>" elements
-must_repos=(
-    "${TFM_PROJECT};${TFM_NAME};${TFM_REFSPEC}"
-)
-
-for repo in ${must_repos[@]}; do
-    # Parse the repo elements
-    REPO_URL="$(echo "${repo}" | awk -F ';' '{print $1}')"
-    REPO_NAME="$(echo "${repo}" | awk -F ';' '{print $2}')"
-    REPO_REFSPEC="$(echo "${repo}" | awk -F ';' '{print $3}')"
     echo "Repo: $REPO_URL $REPO_NAME $REPO_REFSPEC"
 
+    # In case repository is not defined, just skip it
+    if [ -z "${REPO_URL}" ]; then
+        echo "Repo ${REPO_NAME} not needed in this job. Skip download."
+        return 0
+    fi
+
     if [ ! -d "${SHARE_FOLDER}/${REPO_NAME}" ]; then
         git_clone $REPO_URL "${SHARE_FOLDER}/${REPO_NAME}"
         git_checkout "${SHARE_FOLDER}/${REPO_NAME}" $REPO_REFSPEC
@@ -79,7 +57,36 @@
     # Copy repos into pwd dir (workspace in CI), so each job would work
     # on its own workspace
     cp -a -f "${SHARE_FOLDER}/${REPO_NAME}" "${WORKSPACE}/${REPO_NAME}"
-done
+}
+
+# Take into consideration non-CI runs where SHARE_FOLDER variable
+# may not be present
+if [ -z "${SHARE_FOLDER}" ]; then
+    # Default Jenkins values
+    SHARE_VOLUME="${SHARE_VOLUME:-$PWD}"
+    JOB_NAME="${JOB_NAME:-local}"
+    BUILD_NUMBER="${BUILD_NUMBER:-0}"
+    SHARE_FOLDER=${SHARE_VOLUME}/${JOB_NAME}/${BUILD_NUMBER}
+fi
+
+echo "Share Folder path: ${SHARE_FOLDER}"
+echo
+
+# TF-M project
+if [ -n "${GERRIT_EVENT_HASH}" ]; then
+    # If triggered by Gerrit, use its variables
+    TFM_PROJECT="https://${GERRIT_HOST}/${GERRIT_PROJECT}"
+else
+    TFM_PROJECT="${CODE_REPO:?}"
+fi
+TFM_REFSPEC="${GERRIT_REFSPEC:?}"
+TFM_NAME="trusted-firmware-m"
+
+clone_repo_to_share_folder "${TFM_PROJECT}" "${TFM_NAME}" "${TFM_REFSPEC}"
+if [ ! -d "${SHARE_FOLDER}/${TFM_NAME}" ]; then
+    echo "Fatal error: ${TFM_NAME} not downloaded!"
+    exit 1
+fi
 
 # Dependency projects
 TFM_TESTS_PROJECT="${TFM_TESTS_URL:-}"
@@ -126,23 +133,6 @@
     REPO_URL="$(echo "${repo}" | awk -F ';' '{print $1}')"
     REPO_NAME="$(echo "${repo}" | awk -F ';' '{print $2}')"
     REPO_REFSPEC="$(echo "${repo}" | awk -F ';' '{print $3}')"
-    echo "Repo: $REPO_URL $REPO_NAME $REPO_REFSPEC"
 
-    # In case repository is not defined, just skip it
-    if [ -z "${REPO_URL}" ]; then
-        continue
-    fi
-
-    if [ ! -d "${SHARE_FOLDER}/${REPO_NAME}" ]; then
-        git_clone $REPO_URL "${SHARE_FOLDER}/${REPO_NAME}"
-        git_checkout "${SHARE_FOLDER}/${REPO_NAME}" $REPO_REFSPEC
-    else
-        cd "${SHARE_FOLDER}/${REPO_NAME}"
-        echo -e "Share Folder ${REPO_NAME} $(git rev-parse --short HEAD)\n"
-        cd $OLDPWD
-    fi
-
-    # Copy repos into pwd dir (workspace in CI), so each job would work
-    # on its own workspace
-    cp -a -f "${SHARE_FOLDER}/${REPO_NAME}" "${WORKSPACE}/${REPO_NAME}"
+    clone_repo_to_share_folder "${REPO_URL}" "${REPO_NAME}" "${REPO_REFSPEC}"
 done