125 lines
2.7 KiB
Plaintext
125 lines
2.7 KiB
Plaintext
|
#!/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
|