diff options
author | sefidel <contact@sefidel.net> | 2023-02-06 18:08:33 +0900 |
---|---|---|
committer | sefidel <contact@sefidel.net> | 2023-02-06 18:08:33 +0900 |
commit | 2788edf8f6ddc0a5ccd141db51321cd21abb5adf (patch) | |
tree | cbca719739f3eeef32dd47cb9d0fa823f09c4915 /nixos/cobalt/services/gitolite-noncore/rename | |
parent | bdf36408a71b1b3993a9552637d86495cb677b86 (diff) | |
download | nixrc-2788edf8f6ddc0a5ccd141db51321cd21abb5adf.tar.gz nixrc-2788edf8f6ddc0a5ccd141db51321cd21abb5adf.zip |
feat: merge colmena to nixos
Diffstat (limited to 'nixos/cobalt/services/gitolite-noncore/rename')
-rw-r--r-- | nixos/cobalt/services/gitolite-noncore/rename | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/nixos/cobalt/services/gitolite-noncore/rename b/nixos/cobalt/services/gitolite-noncore/rename new file mode 100644 index 0000000..00aa5ca --- /dev/null +++ b/nixos/cobalt/services/gitolite-noncore/rename @@ -0,0 +1,62 @@ + +# 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 + +[ -f "$HOME/projects.list" ] && sed "s:$from.git$:$to.git:g" -i "$HOME/projects.list" + +echo "$from renamed to $to" >&2 + +exit |