summaryrefslogtreecommitdiff
path: root/tool/git-refresh
diff options
context:
space:
mode:
Diffstat (limited to 'tool/git-refresh')
-rwxr-xr-xtool/git-refresh46
1 files changed, 46 insertions, 0 deletions
diff --git a/tool/git-refresh b/tool/git-refresh
new file mode 100755
index 0000000000..9ed7d7c76e
--- /dev/null
+++ b/tool/git-refresh
@@ -0,0 +1,46 @@
+#!/bin/sh
+set -e
+
+if (cd -P .) 2>/dev/null; then
+ CHDIR='cd -P'
+else
+ CHDIR='cd'
+fi
+
+quiet=
+branch=
+
+until [ $# = 0 ]; do
+ case "$1" in
+ --) shift; break;;
+ -C|--directory) shift; $CHDIR "$1";;
+ -C*) $CHDIR `expr "$1" : '-C\(.*\)'`;;
+ --directory=*) $CHDIR `expr "$1" : '[^=]*=\(.*\)'`;;
+ -q) quiet=1;;
+ -b|--branch) shift; branch="$1";;
+ -b*) branch=`expr "$1" : '-b\(.*\)'`;;
+ --branch=*) branch=`expr "$1" : '[^=]*=\(.*\)'`;;
+ -*) echo "unknown option: $1" 1>&2; exit 1;;
+ *) break;;
+ esac
+ shift
+done
+
+url="$1"
+dir="$2"
+shift 2
+[ x"$branch" = x ] && unset branch || :
+if [ -d "$dir" ]; then
+ if [ x"$(git -C "$dir" describe --tags)" = x"$branch" ]; then
+ exit 0 # already up-to-date
+ fi
+ echo updating `expr "/$dir/" : '.*/\([^/][^/]*\)/'` ...
+ [ $quiet ] || set -x
+ $CHDIR "$dir"
+ ${branch+git} ${branch+fetch} ${branch+"$@"}
+ exec git ${branch+checkout} "${branch-pull}" "$@"
+else
+ echo retrieving `expr "/$dir/" : '.*/\([^/][^/]*\)/'` ...
+ [ $quiet ] || set -x
+ exec git clone ${branch+--branch} ${branch+"$branch"} "$url" "$dir" "$@"
+fi