diff --git a/rgit b/rgit new file mode 100755 index 0000000..2ec060a --- /dev/null +++ b/rgit @@ -0,0 +1,124 @@ +#!/bin/bash +set -euo pipefail +IFS=$'\n\t' + +version="0.1" +host="git" +declare -a repoNames=() + +help() { + echo "Usage: $(basename $0) [-h] [-v] [-H host] -- COMMAND" + echo + echo "Options:" + echo " -h, --help Display this message" + echo " -v, --version Display version" + echo " -H, --host Set host of repository" + echo "Commands:" + echo " init Initialize bare repository on host" + echo " ls List all remote repositories" + echo " mv Rename remote repository" + echo " rm Remove remote repositories" + echo " desc, description Edit description of remote repository" + echo " conf, config Edit configuration of remote repository" + exit 1 +} + +parseRepos() { + for repo in $@; do + repoNames+=("/srv/git/$repo.git") + done +} + +create() { + parseRepos $@ + ssh $host init ${repoNames[@]} +} + +list() { + ssh $host ls +} + +rename() { + parseRepos $@ + ssh $host mv ${repoNames[@]} +} + +remove() { + parseRepos $@ + ssh $host rm ${repoNames[@]} +} + +# +# $1: Name of repo +# $2: Type of file (ex.: config) +# +editFile() { + if [[ $# -ne 2 ]]; then + echo "Please enter the name of the repository and file to edit" + fi + parseRepos "$1" + local tmp="/tmp/$2$RANDOM" + ssh $host "cat ${repoNames[0]}/$2" > $tmp + $EDITOR "$tmp" + ssh $host write "${repoNames[0]}/$2" "$(<$tmp)" +} + +if [[ $# -eq 0 ]]; then + echo "Interactive mode" +else + while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do + case $1 in + -v | --version ) + echo $version + exit + ;; + -h | --help ) + help + exit + ;; + -H | --host ) + shift + host=$1 + ;; + * ) + >&2 echo "Unrecognized option $1" + help + exit + ;; + esac; + shift; + done + if [[ "$1" == '--' ]]; then + shift; + fi + case $1 in + 'init' ) + shift + create $@ + ;; + 'ls' ) + list + ;; + 'mv' ) + shift + rename $@ + ;; + 'rm' ) + shift + remove $@ + ;; + 'desc' | 'description' ) + shift + editFile $1 'description' + ;; + 'conf' | 'config' ) + shift + editFile $1 'config' + ;; + * ) + >&2 echo "Unrecognized command $1" + help + exit + ;; + esac +fi