diff options
author | Milo Casagrande <milo.casagrande@linaro.org> | 2014-08-28 18:18:15 +0200 |
---|---|---|
committer | Milo Casagrande <milo.casagrande@linaro.org> | 2014-08-28 18:18:15 +0200 |
commit | 92cb22aa997f1bda3fe1fcf96bbb0cbf7deffe98 (patch) | |
tree | a9715cde3a99c8212c37ec6702e58ce4a2d84e33 | |
parent | a011bb70a95f6507080c2221b17db5eff31ed573 (diff) |
toolchain-tools: Add function for new gcc mirror.
Change-Id: I9dc44438c13c4f1bf541eba13d3efa905c2d91ac
-rwxr-xr-x | toolchain-tools | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/toolchain-tools b/toolchain-tools index 75f624a..8931e5b 100755 --- a/toolchain-tools +++ b/toolchain-tools @@ -15,6 +15,7 @@ # For more info: https://wiki.linaro.org/Platform/LAVA/Infrastructure/ToolchainsMirror # +GIT_BIN=`which git` GITOLITE_BIN="/home/git/bin/gitolite" REPOSITORIES_DIR="/srv/repositories" TOOLCHAIN_DIR="$REPOSITORIES_DIR/toolchain" @@ -31,6 +32,122 @@ SVN_UPSTREAM_49_BRANCH="$MIRROR_DIR/linaro-gcc-4_9-branch" LINARO_UPSTREAM_48_BRANCH="linaro-4.8-branch" LINARO_UPSTREAM_49_BRANCH="linaro-4.9-branch" +NEW_GCC_MIRROR_DIR="$MIRROR_DIR/gcc" +NEW_GCC_TOOLCHAIN_DIR="$NEW_GCC_MIRROR_DIR/toolchain" +NEW_GCC_LOCAL_MIRROR="$NEW_GCC_TOOLCHAIN_DIR/gcc.git" +NEW_GCC_MIRROR_FETCH_DIR="$NEW_GCC_MIRROR_DIR/fetch" +NEW_GCC_BRANCHES_DIR="$NEW_GCC_MIRROR_FETCH_DIR/branches" +NEW_GCC_SVN_BRANCHES_DIR="$NEW_GCC_BRANCHES_DIR/svn" +NEW_GCC_UPSTREAM_DIR="$NEW_GCC_MIRROR_FETCH_DIR/gcc.git" + +function errcho() { + # Print on stderr passed messages. + >&2 echo $1 +} + +function new_gcc() { + new_gcc_update_upstream_mirror + new_gcc_update_local_mirror + new_gcc_update_svn_branches + + if [ $? -eq 0 ]; then + cd $NEW_GCC_UPSTREAM_DIR + # It's a mirror we are pushing, so no --all/--tag. + $GITOLITE_BIN push 2>&1 > /dev/null + + if [ $? -ne 0 ]; then + errcho "Error pushing to final destination" + fi + fi +} + +function new_gcc_update_svn_branches() { + # SVN branches need to be created manually. + # Once cloned, the git-svn repo must have as the remote push origin the + # path defined in $NEW_GCC_UPSTREAM_DIR + if [ ! -d $NEW_GCC_SVN_BRANCHES_DIR ]; then + return 0 + fi + + for git_svn_repo in `find $NEW_GCC_SVN_BRANCHES_DIR -type d -name ".git" -prune -exec dirname {} \;`; do + cd $git_svn_repo + branch_name=`basename $git_svn_repo` + $GIT_BIN svn rebase 2>&1 > /dev/null + + if [ $? -ne 0 ]; then + errcho "Error updating gcc svn branch $branch_name" + return 1 + fi + + $GIT_BIN push origin master:$branch_name 2>&1 > /dev/null + if [ $? -ne 0 ]; then + errcho "Error pushing gcc svn branch $branch_name" + return 1 + fi + done + + return 0 +} + +function new_gcc_update_upstream_mirror() { + if [ ! -d $NEW_GCC_UPSTREAM_DIR ]; then + errcho "Missing upstream gcc mirror, cloning it..." + + mkdir -p $NEW_GCC_MIRROR_FETCH_DIR + cd $NEW_GCC_MIRROR_FETCH_DIR + + $GIT_BIN clone -q --mirror git://gcc.gnu.org/git/gcc.git 2>&1 > /dev/null + + if [ $? -ne 0 ]; then + errcho "Error creating gcc upstream mirror (fetch)" + return 1 + fi + + fi + + cd $NEW_GCC_UPSTREAM_DIR + $GIT_BIN remote update 2>&1 > /dev/null + + if [ $? -ne 0 ]; then + errcho "Error updating gcc upstream mirror (fetch)" + return 1 + fi + + return 0 +} + +function new_gcc_update_local_mirror() { + if [ ! -d $NEW_GCC_LOCAL_MIRROR ]; then + errcho "Missing local gcc mirror, cloning it..." + + mkdir -p $NEW_GCC_TOOLCHAIN_DIR + cd $NEW_GCC_TOOLCHAIN_DIR + + $GIT_BIN clone --mirror $NEW_GCC_UPSTREAM_DIR 2>&1 > /dev/null + + if [ $? -ne 0 ]; then + errcho "Error cloning gcc upstream mirror (local)" + return 1 + fi + + cd $NEW_GCC_LOCAL_MIRROR + $GIT_BIN remote set-url --push origin "$TOOLCHAIN_DIR/gcc-new.git" + if [ $? -ne 0 ]; then + errcho "Error setting correct remote (local)" + return 1 + fi + fi + + cd $NEW_GCC_LOCAL_MIRROR + $GIT_BIN remote update 2>&1 > /dev/null + + if [ $? -ne 0 ]; then + errcho "Error updating gcc upstream mirror (local)" + return 1 + fi + + return 0 +} function push_changes() { cd $GCC_MIRROR_DIR |