#!/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