new program gl-dryrun; run without arguments for usage/WARNINGS
This commit is contained in:
parent
d2c10e87d8
commit
fcb41f06f0
118
src/gl-dryrun
Executable file
118
src/gl-dryrun
Executable file
|
@ -0,0 +1,118 @@
|
|||
#!/bin/bash
|
||||
|
||||
die() { echo; echo "FATAL: $@"; usage; }
|
||||
|
||||
usage() {
|
||||
|
||||
cat <<EOFU
|
||||
|
||||
==== WARNING ====
|
||||
|
||||
This is a quick hack. It is not "production quality". Resist the temptation
|
||||
to turn this into an update.secondary hook and put it on the server. I WILL
|
||||
NOT BE RESPONSIBLE FOR ANY PROBLEMS IF YOU DO THAT. (Even more so if you use
|
||||
'git checkout $3' *without* setting GIT_INDEX_FILE to something temporary, and
|
||||
eventually realise that *deleted* files don't stay deleted...! And if you
|
||||
didn't understand that, all the more reason not to do it).
|
||||
|
||||
Just do it on your workstation, and we'll all get along.
|
||||
|
||||
If you've read all that, here's how to run it:
|
||||
|
||||
- get a copy of the gitolite sources to your workstation
|
||||
- cd to your gitolite-admin clone (the one you're going to push and you're
|
||||
worried might fail)
|
||||
- run gl-dryrun from the gitolite source tree, using a full path, with one
|
||||
argument -- the name of the person to check admin push rights of
|
||||
|
||||
So, assuming both the gitolite software and the gitolite-admin repos are
|
||||
cloned in $HOME/myclones, and the admin username is 'sitaram':
|
||||
|
||||
cd $HOME/myclones/gitolite-admin
|
||||
$HOME/myclones/gitolite/src/gl-dryrun sitaram
|
||||
|
||||
EOFU
|
||||
exit 1;
|
||||
}
|
||||
|
||||
[ -n "$1" ] || die "need an admin username"
|
||||
admin="$1"; shift
|
||||
|
||||
export GL_BINDIR=${0%/*}
|
||||
|
||||
[ -x "$GL_BINDIR/gl-compile-conf" ] ||
|
||||
die "can't find executable gl-compile-conf in $GL_BINDIR"
|
||||
|
||||
# we expect to be in the top level of the gitolite-admin repo
|
||||
[ -f "conf/gitolite.conf" ] || die "I can't see the main config file"
|
||||
[ -d "keydir" ] || die "I can't see 'keydir'"
|
||||
|
||||
echo; echo "PLEASE READ WARNINGS IN SOURCE BEFORE USING!"; echo
|
||||
|
||||
export oldhome=$HOME
|
||||
export oldpwd=$PWD
|
||||
export tmp=$(mktemp -d);
|
||||
trap "rm -rf $tmp" 0;
|
||||
cd $tmp
|
||||
|
||||
mkdir -p .gitolite/logs
|
||||
cp -a $oldpwd/{conf,keydir} .gitolite
|
||||
echo '(dryrun)' > .gitolite/conf/VERSION
|
||||
|
||||
# setup a minimal .gitolite.rc
|
||||
export GL_RC=$PWD/gl_rc
|
||||
cat > $GL_RC <<'EOF'
|
||||
$GL_ADMINDIR=$ENV{PWD} . "/.gitolite";
|
||||
$GL_CONF="$GL_ADMINDIR/conf/gitolite.conf";
|
||||
$GL_KEYDIR="$GL_ADMINDIR/keydir";
|
||||
$GL_CONF_COMPILED="$GL_ADMINDIR/conf/gitolite.conf-compiled.pm";
|
||||
$GL_WILDREPOS = 0;
|
||||
$PROJECTS_LIST = $ENV{PWD} . "/projects.list";
|
||||
$REPO_UMASK = 0077;
|
||||
$GL_BIG_CONFIG = 0;
|
||||
$GL_NO_DAEMON_NO_GITWEB = 1;
|
||||
$GIT_PATH="";
|
||||
$GL_GITCONFIG_KEYS = ".*";
|
||||
$GL_NO_CREATE_REPOS = 1;
|
||||
$GL_NO_SETUP_AUTHKEYS = 1;
|
||||
$HTPASSWD_FILE = "";
|
||||
$RSYNC_BASE = "";
|
||||
$SVNSERVE = "";
|
||||
$GL_WILDREPOS_PERM_CATS = "READERS WRITERS";
|
||||
$GL_LOGT="$GL_ADMINDIR/logs/gitolite-%y-%m.log";
|
||||
$REPO_BASE="repositories";
|
||||
1;
|
||||
EOF
|
||||
|
||||
# now compile it
|
||||
echo compiling...
|
||||
$GL_BINDIR/gl-compile-conf
|
||||
echo
|
||||
|
||||
echo "checking if $admin has push rights..."
|
||||
SSH_ORIGINAL_COMMAND=info $GL_BINDIR/gl-auth-command $admin
|
||||
echo
|
||||
|
||||
# now find out who has admin...
|
||||
echo "checking what pubkeys (if any) have push rights..."
|
||||
for f in `find .gitolite/keydir -name "*.pub" | sort`
|
||||
do
|
||||
f=$(basename $f)
|
||||
u=$(perl -e '$u = shift; $u =~ s/(\@[^.]+)?\.pub$//; print $u' $f)
|
||||
SSH_ORIGINAL_COMMAND=info $GL_BINDIR/gl-auth-command $u | grep R...W..gitolite-admin.$ > /dev/null && echo ' '$f
|
||||
done
|
||||
echo
|
||||
|
||||
# now look for duplicate keys etc
|
||||
echo "looking for (duplicate) pubkeys; they could cause later ones to be 'hidden'..."
|
||||
cd .gitolite
|
||||
for f in `find keydir -name "*.pub" | sort`
|
||||
do
|
||||
ssh-keygen -l -f "$f"
|
||||
done | perl -ane '
|
||||
warn " $F[2] is hidden by $seen{$F[1]}\n" if $seen{$F[1]};
|
||||
$seen{$F[1]} = $F[2];
|
||||
'
|
||||
cd ..
|
||||
echo
|
||||
|
Loading…
Reference in a new issue