gitolite/src/triggers/partial-copy
Sitaram Chamarty 61f6967f67 partial-copy fixed...
...there was one real bug, plus I had forgotten to put a comented out
line in the rc file, but most of the rest of the effort was moving the
test script over.

oh and I'd also forgotten to move this from 'commands' to 'triggers' :-)
2012-03-26 21:27:49 +05:30

36 lines
1 KiB
Bash
Executable file

#!/bin/sh
# this is a wee bit expensive in terms of forks etc., compared to doing it in
# perl, but I wanted to show how *easy* it actually is now. And really,
# you'll only notice if you access this repo like a hundred times a minute or
# something so don't sweat it.
# given a repo and a user, check if option('partialCopyOf') is set, and if so,
# fetch all allowed branches from there.
die() { echo "$@" >&2; exit 1; }
# make sure we're being called from the pre_git trigger
[ "$1" = "PRE_GIT" ] || die I must be called from PRE_GIT, not "$1"
shift
repo=$1
user=$2
main=`git config --file $GL_REPO_BASE/$repo.git/config --get gitolite.partialCopyOf`;
[ -z "$main" ] && exit 0
# "we", "our repo" => the partial copy
# "main", "pco" => the one which we are a "partial copy of"
cd $GL_REPO_BASE/$main.git
for ref in `git for-each-ref refs/heads '--format=%(refname)'`
do
cd $GL_REPO_BASE/$repo.git
gitolite access -q $repo $user R $ref &&
git fetch -f $GL_REPO_BASE/$main.git $ref:$ref
done
exit 0