aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/gl-setup')
-rwxr-xr-xsrc/gl-setup81
1 files changed, 69 insertions, 12 deletions
diff --git a/src/gl-setup b/src/gl-setup
index 7bf8881..1970d93 100755
--- a/src/gl-setup
+++ b/src/gl-setup
@@ -18,16 +18,42 @@ GL_PACKAGE_CONF=/tmp/share/gitolite/conf
# pubkey file if you happen to have lost all gitolite-access to the repos (but
# do have shell access via some other means)
+# ----------------------------------------------------------------------
+# local functions
+# ----------------------------------------------------------------------
+
die() { echo "$@" >&2; exit 1; }
get_rc_val() {
`dirname $0`/gl-query-rc $1
}
-TEMPDIR=`mktemp -d -t tmp.XXXXXXXXXX`
+# ----------------------------------------------------------------------
+# tempdir setup
+# ----------------------------------------------------------------------
+
+TEMPDIR=`perl -MFile::Temp -l -e 'print File::Temp::tempdir("tmp.XXXXXXXXXX", TMPDIR => 1);'`
export TEMPDIR
trap "/bin/rm -rf $TEMPDIR" 0
+# ----------------------------------------------------------------------
+# argument handling
+# ----------------------------------------------------------------------
+
+# save arguments for use in commit message later
+args="$*"
+
+if [ "$1" = "-h" ]
+then
+ echo Usage:
+ echo " gl-setup [-q] [-q] [YourName.pub] # ssh mode"
+ echo " gl-setup [-q] [-q] [YourName] # http mode"
+ echo
+ echo "Please see 'appendix d' in doc/install.mkd for more. (Online at"
+ echo " http://sitaramc.github.com/gitolite/install.html#gl-setup)"
+ exit 1
+fi
+
# quiet mode; only used to suppress popping up an editor on a new rc file
if [ "$1" = "-q" ]
then
@@ -35,6 +61,17 @@ then
quiet=1
fi
+# extra quiet mode (second '-q'); suppress the lint check at the end
+if [ "$1" = "-q" ]
+then
+ shift
+ nolint=1
+fi
+
+# ----------------------------------------------------------------------
+# get the admin_name and (usually) the pubkey file name
+# ----------------------------------------------------------------------
+
if [ -n "$GITOLITE_HTTP_HOME" ]
then
HOME=$GITOLITE_HTTP_HOME
@@ -51,6 +88,10 @@ else
fi
fi
+# ----------------------------------------------------------------------
+# report changes to rc file (for manual fixing) or setup a new rc file
+# ----------------------------------------------------------------------
+
export GL_RC
GL_RC=`get_rc_val GL_RC 2>/dev/null`
[ -z "$GL_RC" ] && GL_RC=$HOME/.gitolite.rc
@@ -62,7 +103,7 @@ then
}
print_rc_vars $GL_PACKAGE_CONF/example.gitolite.rc > $TEMPDIR/.newvars
print_rc_vars $GL_RC > $TEMPDIR/.oldvars
- comm -23 $TEMPDIR/.newvars $TEMPDIR/.oldvars > $TEMPDIR/.diffvars
+ grep -f $TEMPDIR/.oldvars -v $TEMPDIR/.newvars > $TEMPDIR/.diffvars
if [ -s $TEMPDIR/.diffvars ]
then
cp $GL_PACKAGE_CONF/example.gitolite.rc $HOME/.gitolite.rc.new
@@ -88,6 +129,10 @@ else
fi
fi
+# ----------------------------------------------------------------------
+# setup ~/.ssh
+# ----------------------------------------------------------------------
+
# setup ssh stuff. We break our normal rule that we will not fiddle with
# authkeys etc., because in this case it seems appropriate
(
@@ -98,6 +143,10 @@ fi
chmod go-w . .ssh .ssh/authorized_keys
)
+# ----------------------------------------------------------------------
+# setup gitolite's env vars
+# ----------------------------------------------------------------------
+
export GL_BINDIR
export REPO_BASE
export GL_ADMINDIR
@@ -105,42 +154,50 @@ GL_BINDIR=` get_rc_val GL_BINDIR `
REPO_BASE=` get_rc_val REPO_BASE `
GL_ADMINDIR=`get_rc_val GL_ADMINDIR`
-# now we get to gitolite itself
+# ----------------------------------------------------------------------
+# setup hooks, admindir, the admin repo
+# ----------------------------------------------------------------------
gl-install -q
[ -f $GL_ADMINDIR/conf/gitolite.conf ] || {
- cat <<EOF | cut -c9- > $GL_ADMINDIR/conf/gitolite.conf
+ echo "
repo gitolite-admin
RW+ = $admin_name
repo testing
RW+ = @all
-EOF
+ " | cut -c9- > $GL_ADMINDIR/conf/gitolite.conf
}
[ -n "$pubkey_file" ] && cp $pubkey_file $GL_ADMINDIR/keydir
touch $HOME/.ssh/authorized_keys
gl-compile-conf -q
-# setup push-to-admin
-[ -n "$pubkey_file" ] && (
+# setup the admin repo
+[ -n "$pubkey_file" ] || [ -n "$GITOLITE_HTTP_HOME" ] && (
cd $HOME; cd $REPO_BASE/gitolite-admin.git
GIT_WORK_TREE=$GL_ADMINDIR; export GIT_WORK_TREE
git add conf/gitolite.conf keydir
git config --get user.email >/dev/null || git config user.email $USER@`hostname`
git config --get user.name >/dev/null || git config user.name "$USER on `hostname`"
- git diff --cached --quiet 2>/dev/null || git commit -am start
+ git diff --cached --quiet 2>/dev/null || git commit -am "gl-setup $args"
)
# now that the admin repo is created, you have to set the hooks properly; best
# do it by running install again
gl-install -q
-# ----
+# ----------------------------------------------------------------------
+# lint check on ssh keys
+# ----------------------------------------------------------------------
+
+[ -z "$nolint" ] && {
+ # the never-ending quest to help with bloody ssh issues...
+ cd $GL_ADMINDIR/keydir
+ [ -n "$pubkey_file" ] && $GL_BINDIR/sshkeys-lint -q -a $admin_name < $HOME/.ssh/authorized_keys
+}
-# the never-ending quest to help with bloody ssh issues...
-cd $GL_ADMINDIR/keydir
-[ -n "$pubkey_file" ] && $GL_BINDIR/sshkeys-lint -q -a $admin_name < $HOME/.ssh/authorized_keys
+# ----------------------------------------------------------------------
exit 0