summaryrefslogtreecommitdiff
path: root/git-shell-commands/create-bare-repo
diff options
context:
space:
mode:
Diffstat (limited to 'git-shell-commands/create-bare-repo')
-rwxr-xr-xgit-shell-commands/create-bare-repo17
1 files changed, 9 insertions, 8 deletions
diff --git a/git-shell-commands/create-bare-repo b/git-shell-commands/create-bare-repo
index 3051c9d..b4d2d5f 100755
--- a/git-shell-commands/create-bare-repo
+++ b/git-shell-commands/create-bare-repo
@@ -1,17 +1,18 @@
-#!/bin/sh
+#!/bin/bash
# * create-bare-repo
# Allows users to create repo.git
# ssh git@host create-bare-repo repo1 repo2 ...
set -e
-for repo in $@; do
-# Cleanup names, allow hidden repos
- 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 'Already exists: %s\n' "${repo}"; continue; }
- mkdir -p "$repo".git
- pushd "$repo".git
+ mkdir -p -- "$repo".git
+ pushd "$repo".git >/dev/null
git init --bare
- popd
+ popd >/dev/null
done