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