aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilo Casagrande <milo.casagrande@linaro.org>2014-08-28 18:18:15 +0200
committerMilo Casagrande <milo.casagrande@linaro.org>2014-08-28 18:18:15 +0200
commit92cb22aa997f1bda3fe1fcf96bbb0cbf7deffe98 (patch)
treea9715cde3a99c8212c37ec6702e58ce4a2d84e33
parenta011bb70a95f6507080c2221b17db5eff31ed573 (diff)
toolchain-tools: Add function for new gcc mirror.
Change-Id: I9dc44438c13c4f1bf541eba13d3efa905c2d91ac
-rwxr-xr-xtoolchain-tools117
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