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