about summary refs log tree commit diff
path: root/modules/services/gitolite/rename
blob: 2b00c7a6427e5b58ce2264dc70c88010e244d33a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Usage:    ssh git@host rename [-c] <repo1> <repo2>
#
# Renames repo1 to repo2. You must be the creator of repo1, and have
# create ("C") permissions for repo2, which of course must not exist.
# Alternatively you must be an account admin, that is, you must have
# write access to the gitolite-admin repository. If you have "C"
# permissions for repo2 then you can use the -c option to take over
# as creator of the repository.

die() { echo "$@" >&2; exit 1; }
usage() { perl -lne 'print substr($_, 2) if /^# Usage/../^$/' < $0; exit 1; }
[ -z "$1" ] && usage
[ "$1" = "-h" ] && usage
[ -z "$GL_USER" ] && die GL_USER not set

# ----------------------------------------------------------------------

if [ "$1" = "-c" ]
then	shift
	takeover=true
else	takeover=false
fi

from="$1"; shift
to="$1"; shift
[ -z "$to" ] && usage

topath=$GL_REPO_BASE/$to.git

checkto() {
	gitolite access -q "$to" $GL_USER ^C any ||
		die "'$to' already exists or you are not allowed to create it"
}

if gitolite access -q gitolite-admin $GL_USER
then
	# the user is an admin so we can avoid most permission checks
	if $takeover
	then checkto
	elif [ -e $topath ]
	then die "'$to' already exists"
	fi
else
	# the user isn't an admin, so do all the checks
	checkto
	gitolite creator "$from" $GL_USER ||
		die "'$from' does not exist or you are not allowed to delete it"
fi

# ----------------------------------------------------------------------

mv $GL_REPO_BASE/$from.git $topath
[ $? -ne 0 ] && exit 1

$takeover && echo $GL_USER > $topath/gl-creator

# Rebuild projects.list
gitolite trigger POST_COMPILE

echo "$from renamed to $to" >&2

exit