scripts/rgit

125 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

#!/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