about summary refs log tree commit diff
path: root/colmena/cobalt/services/gitolite-noncore/rename
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2023-02-05 13:10:48 +0900
committersefidel <contact@sefidel.net>2023-02-05 13:10:48 +0900
commit8b58776e9c2ad8ee5f7fd553a4650ca921e69579 (patch)
treeddcb466f5cfed96a0f8c35d2bab738ef558442c9 /colmena/cobalt/services/gitolite-noncore/rename
parent1c471fc1847e0da278f0aa4957867f75f40cb1a9 (diff)
downloadnixrc-8b58776e9c2ad8ee5f7fd553a4650ca921e69579.tar.gz
nixrc-8b58776e9c2ad8ee5f7fd553a4650ca921e69579.zip
feat(colmena/services): add 'rename' & enable symbolic-ref
+ move raw scripts to separate directory
Diffstat (limited to 'colmena/cobalt/services/gitolite-noncore/rename')
-rw-r--r--colmena/cobalt/services/gitolite-noncore/rename60
1 files changed, 60 insertions, 0 deletions
diff --git a/colmena/cobalt/services/gitolite-noncore/rename b/colmena/cobalt/services/gitolite-noncore/rename
new file mode 100644
index 0000000..091de82
--- /dev/null
+++ b/colmena/cobalt/services/gitolite-noncore/rename
@@ -0,0 +1,60 @@
+
+# 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
+
+echo "$from renamed to $to" >&2
+
+exit