#!/bin/sh set -eu GIT_REPO_ROOT="${GIT_REPO_ROOT:-/var/lib/git}" GIT_USER="${GIT_USER:-git}" GIT_GROUP="${GIT_GROUP:-git}" usage() { echo "usage: create-repo [description]" >&2 echo "example: create-repo myrepo 'My application repository'" >&2 exit 64 } [ "$#" -ge 1 ] || usage name="$1" description="${2:-Unnamed repository}" case "${name}" in */* | .* | *" "* | *".."* ) echo "invalid repository name: ${name}" >&2 exit 64 ;; esac case "${name}" in *.git) repo_name="${name}" ;; *) repo_name="${name}.git" ;; esac repo_path="${GIT_REPO_ROOT}/${repo_name}" if [ -e "${repo_path}" ]; then echo "repository already exists: ${repo_path}" >&2 exit 1 fi install -d -o "${GIT_USER}" -g "${GIT_GROUP}" "${repo_path}" git init --bare "${repo_path}" >/dev/null printf '%s\n' "${description}" > "${repo_path}/description" chown -R "${GIT_USER}:${GIT_GROUP}" "${repo_path}" echo "created ${repo_path}"