merge and push all branches from remote
authorBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Fri, 2 Jul 2010 15:40:55 +0000 (17:40 +0200)
committerBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Fri, 2 Jul 2010 15:40:55 +0000 (17:40 +0200)
scripts/git-mirror.sh

index 6dfe88f..e7af573 100755 (executable)
@@ -31,6 +31,39 @@ function run () {
     popd > /dev/null
 }
 
+function merge_all_branches () {
+    NAME=$1
+    REMOTE=$2
+    REPO_DIR=$3
+
+    pushd $REPO_DIR
+    BRANCHES=$(git branch -r | grep $REMOTE | grep -v "\->" | sed "s/.*\///g")
+    popd > /dev/null
+
+    run "git checkout master" ${REPO_DIR}
+    run "git merge --ff $REMOTE/master" ${REPO_DIR}
+    for BRANCH in $BRANCHES ; do
+        run "git branch $BRANCH" ${REPO_DIR}
+        run "git checkout $BRANCH" ${REPO_DIR}
+        run "git merge --ff $REMOTE/$BRANCH" ${REPO_DIR}
+    done
+}
+
+function push_all_branches () {
+    NAME=$1
+    REMOTE=$2
+    REPO_DIR=$3
+
+    pushd $REPO_DIR
+    BRANCHES=$(git branch -r | grep $REMOTE | grep -v "\->" | sed "s/.*\///g")
+    popd > /dev/null
+
+    run "git push $REMOTE master:master" ${REPO_DIR}
+    for BRANCH in $BRANCHES ; do
+        run "git push $REMOTE $BRANCH:$BRANCH" ${REPO_DIR}
+    done
+}
+
 function mirror () {
     for arg in "$@" ; do
         NAME=$(basename ${arg} | sed s/.git$//g)
@@ -49,7 +82,7 @@ function mirror () {
                msg "pulling from ${NAME}"
                 run "git fetch origin --tags" ${REPO_DIR}
                run "git fetch origin" ${REPO_DIR}
-                run "git merge --ff origin/master" ${REPO_DIR}
+                merge_all_branches $NAME origin $REPO_DIR
                 if [ $? -ne 0 ]
                 then
                     error "Can not fetch from ${MASTER_REPO}"
@@ -63,13 +96,13 @@ function mirror () {
             msg "pushing ${NAME} to local master"
             run "git fetch local_master --tags" ${REPO_DIR}
             run "git fetch local_master" ${REPO_DIR}
-            run "git merge --ff local_master/master" ${REPO_DIR}
+            merge_all_branches $NAME local_master $REPO_DIR
             if [ $? -ne 0 ]
             then
                 error "Can not fetch from ${MIRROR_REPO}"
             else
-                run "git push local_master" ${REPO_DIR}
                 run "git push --tags local_master" ${REPO_DIR}
+                push_all_branches $NAME local_master $REPO_DIR
             fi
         fi
     done