diff options
Diffstat (limited to 'git2redcrew.sh')
-rwxr-xr-x | git2redcrew.sh | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/git2redcrew.sh b/git2redcrew.sh new file mode 100755 index 0000000..d4a8b60 --- /dev/null +++ b/git2redcrew.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +set -ue + +SUBDIR="" +PRIVATE=0 + +REMHOST="redcrew" + +while getopts ":d:p" opt; do + case $opt in + d) + SUBDIR="/${OPTARG}" + ;; + p) + PRIVATE=1 + ;; + \?) + echo "Invalid option: -$OPTARG" + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." + exit 1 + ;; + esac +done + +# Shift past the last option parsed by getopts +shift $((OPTIND-1)) + +if [ -e .git ] ; then + git gc --aggressive --prune=now + REPO="$(basename "$(git rev-parse --show-toplevel)")" + cd .. +else + [ "$#" -gt 0 ] || exit 1 + REPO="$1" + (cd "$REPO" + git gc --aggressive --prune=now + ) +fi + +GITDIR="$(readlink -f "${REPO}").git" +git clone --bare "$REPO" "${GITDIR}" +(cd "${GITDIR}" + # shellcheck disable=SC3045 + read -r -e -p "Describe the repository:" DESC + echo "$DESC" >description + touch git-daemon-export-ok + git config --add gitweb.owner 'Matěj Cepl <mcepl@cepl.eu>' + git remote rm origin || /bin/true +) + +if [ $PRIVATE -eq 1 ] ; then + TARGET="private_git${SUBDIR}" + URL_BASE="${REMHOST}:${TARGET}" +else + TARGET="/srv/git${SUBDIR}" + URL_BASE="https://git.cepl.eu/cgit${SUBDIR}" +fi + +rsync -avz "${GITDIR}" "${REMHOST}:${TARGET}/" +rm -rf "${GITDIR}" +cd "$REPO" +git remote add myrepo "${URL_BASE}/${REPO}" +if [ $PRIVATE -ne 1 ] ; then + git remote set-url --push myrepo "${REMHOST}:${TARGET}/${REPO}.git" +fi +# if git remote show gitlab >/dev/null 2>&1 ; then +# git remote remove gitlab +# fi +git remote update +git push --all -u myrepo |