From 502c5b07b53a49b708b7a6b71ed2dc5360829b9b 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 | 84 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 18 deletions(-) diff --git a/docker/exec_tests.sh b/docker/exec_tests.sh index db053f7bc..5f6a945c2 100755 --- a/docker/exec_tests.sh +++ b/docker/exec_tests.sh @@ -18,37 +18,85 @@ set -e : ${RELENG_REPO_DIR:='/home/opnfv/repos/releng'} : ${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