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)
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}"
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