]> oss.titaniummirror.com Git - repo_shell.git/blobdiff - scripts/gitcreate
gitcreate: add option to set description
[repo_shell.git] / scripts / gitcreate
index c19839f35844137716b9f6f1d0274468f41cf7c8..ecd9f0ffa8e6966a66901a0f25e87a1a9377d376 100755 (executable)
@@ -6,7 +6,16 @@ if [ -z "$owner" -o -z "$git_root" ]; then
     echo "$0: please configure /etc/repo_shell.conf"
     exit 1
 fi
-gitacls="$git_root/.gitacls"
+gitacls=.gitacls
+gitaclspath="$git_root/$gitacls"
+githooks=.githooks
+githookspath="$git_root/$githooks"
+
+# If running as root, rerun via sudo as user $owner to ensure proper permissions
+if [ "$(whoami)" == "root" ]; then
+    sudo -u $owner $0 $*
+    exit $?
+fi
 
 if [ "$(whoami)" != "$owner" ]; then
     echo "$0: must run as user $owner" >&2
@@ -19,21 +28,24 @@ if [ "$1" = "-y" ]; then
   shift
 fi
 
-if [ $# -ne 1 ]; then
-    echo "usage: $0 <repopath>" >&2
+if [ $# -lt 1 -o $# -gt 2 ]; then
+    echo "usage: $0 <repopath> [\"Short description\"]" >&2
     exit 1
 fi
 
-if [ -e $git_root/$1 ]; then
-    echo "$0: repository $1 already exists" >&2
+repopath=$1
+repodesc=$2
+
+if [ -e $git_root/$repopath ]; then
+    echo "$0: repository $repopath already exists" >&2
     exit 1
 fi
 
 # Do not create subdirectories without asking first
-repopath=$(dirname $1)
-if [ ! -d "$git_root/$repopath" ]; then
+repodir=$(dirname $repopath)
+if [ ! -d "$git_root/$repodir" ]; then
   if [ ! $yes ]; then
-    echo -n "Create git subdir '$repopath' (y/N)? "
+    echo -n "Create git subdir '$repodir' (y/N)? "
     read ans
     ans=$(expr "$ans" : '\(.\).*') # works with dash too
     if [ "$ans" != "y" -a "$ans" != "Y" ];then
@@ -41,19 +53,33 @@ if [ ! -d "$git_root/$repopath" ]; then
       exit 0
     fi
   fi
-  mkdir -p "$git_root/$repopath" 2>/dev/null
-  if [ ! -d "$git_root/$repopath" ]; then
-    echo "%0: repository not created, git subdir '$repopath' create failed" >&2
+  mkdir -p "$git_root/$repodir" 2>/dev/null
+  if [ ! -d "$git_root/$repodir" ]; then
+    echo "$0: repository not created, git subdir '$repodir' create failed" >&2
     exit 1
   fi
 fi
 
 # Create the respository
 umask 027
-git --git-dir "$git_root/$1" init --bare
+git --git-dir "$git_root/$repopath" init --bare
 [ $? -ne 0 ] && exit 1
 
-[ -f "$gitacls" ] && echo "Check $gitacls for proper access permissions"
+# Update the description
+if [ -n "$2" ]; then
+    echo $2 > $git_root/$repopath/description
+fi
+
+# Create symbolic links to any hook scripts in $githookspath
+hooks="pre-receive post-receive update post-update"
+backdir=$(echo "$repopath/hooks" | sed -e 's|[^/]*|..|g')
+hookscripts=$(cd $githookspath 2>/dev/null && ls -d $hooks 2>/dev/null)
+for s in $hookscripts; do
+    echo "Linking default hook script $s"
+    ln -s $backdir/$githooks/$s $git_root/$repopath/hooks/
+done
+
+[ -f "$gitaclspath" ] && echo "Check $gitaclspath for proper access permissions"
 echo "Repository created."
-[ ! -f "$gitacls" ] && echo "WARNING: $gitacls DOES NOT EXIST!"
+[ ! -f "$gitaclspath" ] && echo "WARNING: $gitaclspath DOES NOT EXIST!"
 exit 0