#!/bin/bash -xe # This script store release meta information in the git repository for # a project. It does so on an isolated, hidden branch called # refs/meta/openstack/release. Because it's not under refs/heads, a # standard clone won't retrieve it or cause it to show up in the list # of remote branches. The branch shares no history with the project # itself; it starts with its own root commit. Jenkins is permitted to # push directly to refs/meta/openstack/*. GIT_HOST="review.openstack.org:29418" PROJECT_PREFIX="openstack" if [[ ! -e ${PROJECT} ]]; then git clone ssh://$GIT_HOST/$PROJECT_PREFIX/$PROJECT fi cd $PROJECT git checkout master # Get the list of meta refs git fetch origin +refs/meta/*:refs/remotes/meta/* # Checkout or create the meta/openstack/release branch if ! { git branch -a |grep ^[[:space:]]*remotes/meta/openstack/release$; } then git checkout --orphan release # Delete everything so the first commit is truly empty: git rm -rf . # git rm -rf leaves submodule directories: find -maxdepth 1 -not -regex '\./\.git\(/.*\)?' -not -name . \ -exec rm -fr {} \; ls -la else git branch -D release || /bin/true git checkout -b release remotes/meta/openstack/release fi # Normally a branch name will just be a file, but we can have branches # like stable/diablo, so in that case, make the "stable/" directory # if needed: mkdir -p $(dirname $BRANCH) # Read and update the value for the branch if [ -e "$BRANCH" ]; then echo "Current contents of ${BRANCH}:" cat "${BRANCH}" else echo "${BRANCH} does not exist. Creating it." fi echo "Updating ${BRANCH} to read $VALUE" echo "$VALUE" > ${BRANCH} git add ${BRANCH} git commit -m "Milestone ${BRANCH} set to $VALUE" git push origin HEAD:refs/meta/openstack/release