git: Automatically create non-existing repositories.
authorMatthijs Kooijman <matthijs@stdin.nl>
Thu, 13 Aug 2009 09:18:59 +0000 (11:18 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Thu, 13 Aug 2009 09:21:16 +0000 (11:21 +0200)
This extends the git-prepend-base script to automatically create a bare
git repository when it does not exist yet. This also makes the option
handling slightly more robust, to prevent the script from messing with
arguments that aren't git repository paths at all.

usr/local/bin/git-prepend-base

index 6b524cbf274e9709f9a8b4f105c3103fcd387a12..cd8f7c1d4a11cc2ede3ddd724b7cbfab261a08b9 100755 (executable)
@@ -16,9 +16,24 @@ ARGS=()
 i=0
 until [ "$#" -eq 0 ]
 do
-       if ! echo $1 | egrep "^(--|$BASE_PATH)" &>/dev/null; then
-               ARGS[$i]="$BASE_PATH/$1"
+       if echo $1 | egrep "^--" &>/dev/null; then
+               # This is an option argument, leave it untouched
+               ARGS[$i]="$1"
+       elif echo $1 | egrep ".git$" &>/dev/null; then
+               # This is a path to a git repository
+               DIR="$1"
+               # Prepend BASE_PATH if the path does not start with it already.
+               if ! echo $DIR | egrep "^$BASE_PATH" &>/dev/null; then
+                       DIR="$BASE_PATH/$DIR"
+               fi
+       
+               # Create the git repository if it does not exist yet    
+               if [ ! -e "$DIR" ]; then
+                       mkdir "$DIR" &> /dev/null && (cd $DIR && git --bare init &> /dev/null)
+               fi
+               ARGS[$i]="$DIR"
        else
+               # Not a path to a git repository, leave untouched.
                ARGS[$i]="$1"
        fi
        ((i++))