summaryrefslogtreecommitdiff
path: root/git-shell-commands/delete-repo
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2014-06-02 13:48:51 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2014-06-02 13:48:51 -0400
commite3f6b8e3246f89c6df4052006d18df542721c16e (patch)
tree481143d61ead547b2e76ac66bc07cc533f2f7f6e /git-shell-commands/delete-repo
parent296184cb6a3f34b2e1f0ced37e862f1fcae7cc0c (diff)
lukeshu-ify the git-shell-commands
mostly, handle escaping repo names consistently-ish
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