summaryrefslogtreecommitdiff
path: root/update_git_svn
diff options
context:
space:
mode:
Diffstat (limited to 'update_git_svn')
-rwxr-xr-xupdate_git_svn58
1 files changed, 58 insertions, 0 deletions
diff --git a/update_git_svn b/update_git_svn
new file mode 100755
index 0000000..aaf5f16
--- /dev/null
+++ b/update_git_svn
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# Push changes from local git-svn mirrors to gitorious repositories:
+BASE_DIR=/home/git
+PUSH_MIRROR=gitorious
+FORCE_UPLOAD=0
+
+set -e
+
+while getopts 'fh' opt; do
+ case "$opt" in
+ f) FORCE_UPLOAD=1;;
+ h) usage; exit 0;;
+ \?) usage; exit 1;;
+ esac
+done
+
+shift $((OPTIND-1))
+
+REPOS="${1:-asterisk dahdi-linux dahdi-tools libpri octapi}"
+
+# An explicit list of heads to mirror. Don't push any random working branch
+# svn_* - branchs
+# v[0-9]* - tags
+# vPR[0-9]* - tags of octapi
+mirrored_refs() {
+ ls .git/refs/heads/ | grep '^svn_'
+ ls .git/refs/tags/ | egrep '^v(|PR)[0-9]\+\.'
+}
+
+mirror_repo() {
+ # Sanity check: make sure we already set up mirroring:
+ if ! grep -q "^\[remote \"$PUSH_MIRROR\"\]" .git/config; then
+ return
+ fi
+ # FIXME: make less noisy?
+ git push --thin --force "$PUSH_MIRROR" `mirrored_refs`
+}
+
+# A quick snapshot of this repository. To help check if anything changed:
+remotes_checksum() {
+ grep . .git/refs/remotes/* .git/refs/remotes/tags/* \
+ | sha1sum | cut -d' ' -f1
+}
+
+for repo in $REPOS; do
+ cd $BASE_DIR/$repo
+ git checkout --quiet master
+ sum_before=`remotes_checksum`
+ git svn fetch --quiet --fetch-all
+ sum_after=`remotes_checksum`
+ if [ "$sum_before" = "$sum_after" ] && [ "$FORCE_UPLOAD" = 0 ]; then
+ continue
+ fi
+ ../asterisk-tools/update_branches
+ ../asterisk-tools/update_tags
+ mirror_repo
+done