73 lines
2.5 KiB
Bash
Executable File
73 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# manage local, gitolite-controlled, copies of read-only upstream repos.
|
|
|
|
repo=$2
|
|
|
|
url=$(gitolite git-config $repo gitolite-options.upstream.url)
|
|
[ -z "$url" ] && exit 0 # exit if no url was specified
|
|
|
|
cd $GL_REPO_BASE/$repo.git || exit 1
|
|
|
|
[ "$1" != "fetch" ] && {
|
|
nice=$(gitolite git-config $repo gitolite-options.upstream.nice)
|
|
[ -n "$nice" ] && find FETCH_HEAD -mmin -$nice 2>/dev/null | grep . >/dev/null && exit 0
|
|
}
|
|
|
|
git fetch -q "$url" '+refs/*:refs/*'
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
# FEATURES:
|
|
# * invokes upstream fetch on each local fetch
|
|
# (unless the optional 'nice' setting is enabled)
|
|
# * can force a fetch (ignoring 'nice' value) from server CLI
|
|
|
|
# INSTRUCTIONS:
|
|
#
|
|
# * add 'upstream' to the PRE_GIT trigger list in the rc file.
|
|
# * add option lines to conf file. For example:
|
|
#
|
|
# repo git
|
|
# R = @all
|
|
# RW+ my-company/ = @developers
|
|
#
|
|
# option upstream.url = git://git.kernel.org/pub/scm/git/git.git
|
|
# option upstream.nice = 120
|
|
#
|
|
# * to force a fetch on the server shell (or via cron), run this command:
|
|
# gitolite ../triggers/upstream fetch reponame
|
|
|
|
# ADDITIONAL NOTES:
|
|
# * restrict local pushes to a namespace that the upstream won't use
|
|
# (otherwise the next fetch will wipe them out)
|
|
# * if the upstream URL changes, just change the conf and push admin repo
|
|
# * the 'nice' setting is in minutes and is optional; it is the minimum
|
|
# elapsed time between 2 upstream fetches.
|
|
|
|
# USAGE EXAMPLE:
|
|
#
|
|
# Let's say you want to keep a read-only local mirror of all your github repos
|
|
# on your local gitolite installation. Assuming your github usernames are the
|
|
# same as your local usernames, and you have updated GIT_CONFIG_KEYS in the rc
|
|
# file to allow 'config' lines, you can do this:
|
|
#
|
|
# repo github/CREATOR/..*
|
|
# C = @all
|
|
# R = @all
|
|
# option upstream.url = git://github.com/%GL_REPO.git
|
|
# option upstream.nice = 120
|
|
# config url.git://github.com/.insteadOf = git://github.com/github/
|
|
#
|
|
# Now you can make local, read-only, clones of all your github repos with
|
|
#
|
|
# git ls-remote gitolite:github/sitaramc/gitolite
|
|
# git ls-remote gitolite:github/sitaramc/hap
|
|
# (etc)
|
|
#
|
|
# and if milki were also a user on this gitolite instance, then
|
|
#
|
|
# git ls-remote gitolite:github/milki/xclip
|
|
# git ls-remote gitolite:github/milki/ircblogger
|
|
# (etc)
|