Script to execute git-shell-commands on remote host through ssh
This commit is contained in:
parent
5ae0c82a87
commit
2858a37fd5
124
rgit
Executable file
124
rgit
Executable file
@ -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
|
Loading…
Reference in New Issue
Block a user