summaryrefslogtreecommitdiff
path: root/git-shell-commands/delete-repo
diff options
context:
space:
mode:
Diffstat (limited to 'git-shell-commands/delete-repo')
-rwxr-xr-xgit-shell-commands/delete-repo13
1 files changed, 7 insertions, 6 deletions
diff --git a/git-shell-commands/delete-repo b/git-shell-commands/delete-repo
index 4ca644e..5ef94b1 100755
--- a/git-shell-commands/delete-repo
+++ b/git-shell-commands/delete-repo
@@ -1,16 +1,17 @@
-#!/bin/sh
+#!/bin/bash
# * delete-repo
# Allows users to delete repositories permanently
# ssh git@host delete-repo repo1 repo2 ...
set -e
-for repo in $@; do
-# Remove leading slashes and dots and perform cleanup
- repo="`echo "$repo" | sed -e "s/\.\.//g" -e "s,^/\+,,g" -e "s,[^a-z0-9\./_-],,gi"`"
- test ! -d "$repo".git && continue
+for repo in "$@"; do
+ repo="$(sed -r 's,^/*,,' <<<"$repo")"
+ _repo="$(sed -r -e '/(^|\/)\.\.($|\/)/d' -e "s,[^A-Za-z0-9\./_~-],,g" <<<"$repo")"
+ test "$repo" != "$_repo" && { printf 'Illegal name: %s\n' "${repo}"; continue; }
+ test ! -d "$repo".git && { printf 'Does not exist: %s\n' "${repo}"; continue; }
echo "Removing ${repo}.git"
# lo and behold absolute horror
- rm -rf "$repo".git
+ rm -rf -- "$repo".git
done