From 6f825c7a95549824545b66fe3ab5b3ed53905a44 Mon Sep 17 00:00:00 2001 From: Ross Brattain Date: Wed, 21 Jun 2017 22:49:25 -0700 Subject: improve git code with devstack functions if we aren't re-cloning we still need to make sure we update the branch/tag/commit to the version from the remote so we need to fetch and then checkout again it is more complicated. Dockerfile does a shallow clone, so we don't get all the remote ref information. To clone a random remote commit id we have to unshallow Change-Id: If15f504b6ff2cfdfc8894fd3b37e687a19616714 Signed-off-by: Ross Brattain --- docker/exec_tests.sh | 86 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/docker/exec_tests.sh b/docker/exec_tests.sh index 9726e2b4a..46e5a05bd 100755 --- a/docker/exec_tests.sh +++ b/docker/exec_tests.sh @@ -17,39 +17,87 @@ set -e : ${RELENG_REPO:='https://gerrit.opnfv.org/gerrit/releng'} : ${RELENG_REPO_DIR:='/home/opnfv/repos/releng'} # TEMP HACK to freeze releng version to workaround fetch_os_creds.sh problem -: ${RELENG_BRANCH:='abbf19f'} # branch, tag, sha1 or refspec +: ${RELENG_BRANCH:='master'} # branch, tag, sha1 or refspec + +# git update using reference as a branch. +# git_update_branch ref +function git_update_branch { + local git_branch=$1 + + git checkout -f origin/${git_branch} + # a local branch might not exist + git branch -D ${git_branch} || true + git checkout -b ${git_branch} +} + +# git update using reference as a branch. +# git_update_remote_branch ref +function git_update_remote_branch { + local git_branch=$1 + + git checkout -b ${git_branch} -t origin/${git_branch} +} + +# git update using reference as a tag. Be careful editing source at that repo +# as working copy will be in a detached mode +# git_update_tag ref +function git_update_tag { + local git_tag=$1 + + git tag -d ${git_tag} + # fetching given tag only + git fetch origin tag ${git_tag} + git checkout -f ${git_tag} +} + + +# OpenStack Functions git_checkout() { - if git cat-file -e $1^{commit} 2>/dev/null; then - # branch, tag or sha1 object - git checkout $1 && git pull - else + local git_ref=$1 + if [[ -n "$(git show-ref refs/tags/${git_ref})" ]]; then + git_update_tag "${git_ref}" + elif [[ -n "$(git show-ref refs/heads/${git_ref})" ]]; then + git_update_branch "${git_ref}" + elif [[ -n "$(git show-ref refs/remotes/origin/${git_ref})" ]]; then + git_update_remote_branch "${git_ref}" + # check to see if it is a remote ref + elif git fetch --tags origin "${git_ref}"; then # refspec / changeset - git fetch --tags --progress $2 $1 git checkout FETCH_HEAD + else + # if we are a random commit id we have to unshallow + # to get all the commits + git fetch --unshallow origin + git checkout -f "${git_ref}" fi } echo -echo "INFO: Updating releng -> $RELENG_BRANCH" -if [ ! -d $RELENG_REPO_DIR ]; then - git clone $RELENG_REPO $RELENG_REPO_DIR +echo "INFO: Updating releng -> ${RELENG_BRANCH}" +if [ ! -d ${RELENG_REPO_DIR} ]; then + git clone ${RELENG_REPO} ${RELENG_REPO_DIR} fi -cd $RELENG_REPO_DIR -git checkout master -git_checkout $RELENG_BRANCH $RELENG_REPO +cd ${RELENG_REPO_DIR} +# reset remote so we know origin is valid +git remote set-url origin ${RELENG_REPO} +# fetch the exact ref +git fetch --tags origin ${RELENG_BRANCH} || true +# purge pyc files +find . -name '*.pyc' -delete +git_checkout ${RELENG_BRANCH} echo -echo "INFO: Updating yardstick -> $YARDSTICK_BRANCH" -if [ ! -d $YARDSTICK_REPO_DIR ]; then - git clone $YARDSTICK_REPO $YARDSTICK_REPO_DIR +echo "INFO: Updating yardstick -> ${YARDSTICK_BRANCH}" +if [ ! -d ${YARDSTICK_REPO_DIR} ]; then + git clone ${YARDSTICK_REPO} ${YARDSTICK_REPO_DIR} fi -cd $YARDSTICK_REPO_DIR -git_checkout $YARDSTICK_BRANCH $YARDSTICK_REPO +cd ${YARDSTICK_REPO_DIR} +git_checkout ${YARDSTICK_BRANCH} # setup the environment -source $YARDSTICK_REPO_DIR/tests/ci/prepare_env.sh +source ${YARDSTICK_REPO_DIR}/tests/ci/prepare_env.sh # execute tests -$YARDSTICK_REPO_DIR/tests/ci/yardstick-verify $@ +${YARDSTICK_REPO_DIR}/tests/ci/yardstick-verify $@ -- cgit 1.2.3-korg