git: Add scripts to enable a base path for git over ssh.
authorMatthijs Kooijman <matthijs@stdin.nl>
Mon, 30 Mar 2009 07:15:36 +0000 (09:15 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Mon, 30 Mar 2009 07:15:36 +0000 (09:15 +0200)
These files provide wrappers aroudn git-{receive,upload}-pack that
prepend the base path '/data/vcs/git/' to each non-option argument. This
enables git urls over ssh to leave out this base path.

usr/local/bin/git-prepend-base [new file with mode: 0755]
usr/local/bin/git-receive-pack [new symlink]
usr/local/bin/git-upload-pack [new symlink]

diff --git a/usr/local/bin/git-prepend-base b/usr/local/bin/git-prepend-base
new file mode 100755 (executable)
index 0000000..6b524cb
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# This script prepends BASE_PATH to any arguments that are not options (start
+# with --) and do not start with BASE_PATH already.
+# It then executes its equivalent in /usr/bin with those updated arguments.
+#
+# This script is meant to provide a base path for accessing git repositories
+# through ssh. This is similar to running git-daemon(1) with --base-path and
+# --base-path-relaxed. 
+
+BASE_PATH='/data/vcs/git'
+
+# We keep an array of arguments, so we can handle quoting an spaces in
+# arguments properly.
+ARGS=()
+i=0
+until [ "$#" -eq 0 ]
+do
+       if ! echo $1 | egrep "^(--|$BASE_PATH)" &>/dev/null; then
+               ARGS[$i]="$BASE_PATH/$1"
+       else
+               ARGS[$i]="$1"
+       fi
+       ((i++))
+       shift
+done
+
+exec /usr/bin/`basename $0` "${ARGS[@]}"
diff --git a/usr/local/bin/git-receive-pack b/usr/local/bin/git-receive-pack
new file mode 120000 (symlink)
index 0000000..f0c4399
--- /dev/null
@@ -0,0 +1 @@
+git-prepend-base
\ No newline at end of file
diff --git a/usr/local/bin/git-upload-pack b/usr/local/bin/git-upload-pack
new file mode 120000 (symlink)
index 0000000..f0c4399
--- /dev/null
@@ -0,0 +1 @@
+git-prepend-base
\ No newline at end of file