mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 07:26:17 -04:00
Even shorter
This commit is contained in:
parent
5957544dee
commit
9260fd92bf
101
bin/git-bulk
101
bin/git-bulk
|
|
@ -1,8 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
invers=`tput rev`
|
||||
reset=`tput sgr0`
|
||||
txtbld=$(tput bold) # Bold
|
||||
bldred=${txtbld}$(tput setaf 1) # red
|
||||
txtbld=$(tput bold)
|
||||
bldred=${txtbld}$(tput setaf 1)
|
||||
shopt -s extglob
|
||||
guarded=false
|
||||
singlemode=false
|
||||
|
|
@ -20,39 +20,26 @@ usage() {
|
|||
}
|
||||
|
||||
# add another workspace to global git config
|
||||
function addworkspace () {
|
||||
git config --global bulkworkspaces.$wsname "$wsdir"
|
||||
}
|
||||
function addworkspace { git config --global bulkworkspaces.$wsname "$wsdir"; }
|
||||
|
||||
# add current directory
|
||||
function addcurrent () {
|
||||
git config --global bulkworkspaces.$wsname "$PWD"
|
||||
}
|
||||
function addcurrent { git config --global bulkworkspaces.$wsname "$PWD"; }
|
||||
|
||||
# remove workspace from global git config
|
||||
function removeworkspace () {
|
||||
checkWSName
|
||||
git config --global --unset bulkworkspaces.$wsname
|
||||
}
|
||||
function removeworkspace { checkWSName && git config --global --unset bulkworkspaces.$wsname; }
|
||||
|
||||
# remove workspace from global git config
|
||||
function purge () {
|
||||
git config --global --remove-section bulkworkspaces
|
||||
}
|
||||
function purge { git config --global --remove-section bulkworkspaces; }
|
||||
|
||||
# list all current workspace locations defined
|
||||
function listall () {
|
||||
git config --global --get-regexp bulkworkspaces
|
||||
}
|
||||
function listall { git config --global --get-regexp bulkworkspaces; }
|
||||
|
||||
# guarded execution of a git command in one specific repository
|
||||
function guardedExecution () {
|
||||
if $guarded; then
|
||||
echo -n "${invers}git $gitcommand${reset} -> execute here (y/n)? "
|
||||
read -n 1 -r </dev/tty; echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
atomicExecution
|
||||
fi
|
||||
[[ $REPLY =~ ^[Yy]$ ]] && atomicExecution
|
||||
else
|
||||
atomicExecution
|
||||
fi
|
||||
|
|
@ -60,18 +47,19 @@ function guardedExecution () {
|
|||
|
||||
# atomic git command execution with log
|
||||
function atomicExecution () {
|
||||
echo "${bldred}->${reset} executing ${invers}git $gitcommand${reset}"
|
||||
git $gitcommand
|
||||
echo "${bldred}->${reset} executing ${invers}git $gitcommand${reset}" && git $gitcommand
|
||||
}
|
||||
|
||||
# check if the passed command is known as a core git command
|
||||
function checkGitCommand () {
|
||||
if git help -a | cat | grep -o -q "$corecommand"; then
|
||||
if git help -a | cat | grep -o -q "\b${corecommand}\b"; then
|
||||
echo "Core command \"$corecommand\" accepted."
|
||||
else
|
||||
usage
|
||||
echo "error: unknown GIT command: $corecommand"
|
||||
exit 1
|
||||
if git config --get-regexp alias | grep -o -q "\.${corecommand} "; then
|
||||
echo "Alias ${corecommand} accepted."
|
||||
else
|
||||
usage && echo "error: unknown GIT command: $corecommand" && exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -80,30 +68,21 @@ function checkWSName () {
|
|||
found=0
|
||||
while read workspace; do
|
||||
cwsname=$(echo $workspace | cut -f1 -d' ' | cut -f2 -d'.')
|
||||
if [[ $cwsname == $wsname ]]; then return; fi
|
||||
[[ $cwsname == $wsname ]] && return
|
||||
done <<< "$(echo "$(listall)")"
|
||||
# when here the ws name was not found
|
||||
usage
|
||||
echo "error: unknown workspace name: $wsname"
|
||||
exit 1
|
||||
usage && echo "error: unknown workspace name: $wsname" && exit 1
|
||||
}
|
||||
|
||||
# helper to check number of arguments
|
||||
function allowedargcount () {
|
||||
if [[ $initialcount -ne $1 ]]; then
|
||||
usage
|
||||
echo 1>&2 "error: wrong number of arguments"
|
||||
exit 1
|
||||
fi
|
||||
( test $initialcount -ne $1 ) && ( usage && echo 1>&2 "error: wrong number of arguments" && exit 1 )
|
||||
}
|
||||
|
||||
# execute the bulk operation
|
||||
function executBulkOp () {
|
||||
checkGitCommand
|
||||
if $singlemode; then
|
||||
echo "Selected single workspace mode in workspace: $wsname"
|
||||
checkWSName
|
||||
fi
|
||||
( [[ $singlemode ]] ) && ( echo "Selected single workspace mode in workspace: $wsname" && checkWSName )
|
||||
listall | while read workspacespec; do
|
||||
cwsname=$(echo $workspacespec | cut -f1 -d' ' | cut -f2 -d'.')
|
||||
if $singlemode && [[ $cwsname != $wsname ]]; then continue; fi
|
||||
|
|
@ -123,52 +102,26 @@ function executBulkOp () {
|
|||
}
|
||||
|
||||
initialcount="${#}"
|
||||
initialarguments="${@}"
|
||||
|
||||
# if no arguments show usage
|
||||
if [[ $initialcount -le 0 ]]; then
|
||||
usage
|
||||
fi
|
||||
( [[ $initialcount -le 0 ]] ) && usage
|
||||
|
||||
# parse command parameters
|
||||
while [ "${#}" -ge 1 ] ; do
|
||||
|
||||
case "$1" in
|
||||
--listall|--purge|--removeworkspace|--addcurrent|--addworkspace)
|
||||
butilcommand="${1:2}"
|
||||
shift
|
||||
wsname="$1"
|
||||
shift
|
||||
wsdir="$1"
|
||||
break
|
||||
;;
|
||||
butilcommand="${1:2}" && shift && wsname="$1" && shift && wsdir="$1" && break ;;
|
||||
-g)
|
||||
guarded=true
|
||||
;;
|
||||
guarded=true ;;
|
||||
-w)
|
||||
singlemode=true
|
||||
shift
|
||||
wsname="$1"
|
||||
checkWSName
|
||||
;;
|
||||
singlemode=true && shift && wsname="$1" && checkWSName ;;
|
||||
-*)
|
||||
usage
|
||||
echo 1>&2 "error: unknown argument $1"
|
||||
exit 1
|
||||
;;
|
||||
usage && echo 1>&2 "error: unknown argument $1" && exit 1 ;;
|
||||
--*)
|
||||
usage
|
||||
echo 1>&2 "error: unknown argument $1"
|
||||
exit 1
|
||||
;;
|
||||
usage && echo 1>&2 "error: unknown argument $1" && exit 1 ;;
|
||||
*) # git core commands
|
||||
butilcommand="executBulkOp"
|
||||
corecommand="$1"
|
||||
gitcommand="$@"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
butilcommand="executBulkOp" && corecommand="$1" && gitcommand="$@" && break ;;
|
||||
esac && shift
|
||||
done
|
||||
|
||||
# check right number of arguments
|
||||
|
|
|
|||
Loading…
Reference in a new issue