summaryrefslogtreecommitdiff
path: root/config/services/git/shell-commands/repo/src/create_command.sh
diff options
context:
space:
mode:
Diffstat (limited to 'config/services/git/shell-commands/repo/src/create_command.sh')
-rw-r--r--config/services/git/shell-commands/repo/src/create_command.sh25
1 files changed, 25 insertions, 0 deletions
diff --git a/config/services/git/shell-commands/repo/src/create_command.sh b/config/services/git/shell-commands/repo/src/create_command.sh
new file mode 100644
index 0000000..ab8bf3f
--- /dev/null
+++ b/config/services/git/shell-commands/repo/src/create_command.sh
@@ -0,0 +1,25 @@
+repo=$(realpath --canonicalize-missing /srv/git/"${args[repo]}")
+
+if [[ ! "$repo" == /srv/git/* ]]
+then
+ red "Forbidden path."
+ exit 2
+fi
+
+subpath=/srv/git
+IFS='/' read -ra dirs <<< "${repo#/srv/git/}"
+for dir in "${dirs[@]}"; do
+ subpath="$subpath/$dir"
+ if [[ ! -d "$subpath" ]]
+ then
+ break
+ fi
+done
+
+mkdir --parents "$repo"
+chmod u=rwX,g=,o= --recursive "$subpath"
+git init --bare "$repo"
+
+args[path]="$repo"
+args[--tree]=1
+repo_show_command