mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 07:26:17 -04:00
Code refactor
This commit is contained in:
parent
9263aec739
commit
5957544dee
97
bin/git-bulk
97
bin/git-bulk
|
|
@ -13,34 +13,35 @@ singlemode=false
|
|||
usage() {
|
||||
echo 1>&2 "usage: git bulk [-g] [-w <ws-name>] <git command>"
|
||||
echo 1>&2 " git bulk --addworkspace <ws-name> <ws-root-directory>"
|
||||
echo 1>&2 " git bulk --removeworkspace <ws-name> <ws-root-directory>"
|
||||
echo 1>&2 " git bulk --removeworkspace <ws-name>"
|
||||
echo 1>&2 " git bulk --addcurrent <ws-name>"
|
||||
echo 1>&2 " git bulk --purge"
|
||||
echo 1>&2 " git bulk --listall"
|
||||
}
|
||||
|
||||
# add another workspace to global git config
|
||||
function addWSDir () {
|
||||
function addworkspace () {
|
||||
git config --global bulkworkspaces.$wsname "$wsdir"
|
||||
}
|
||||
|
||||
# add current directory
|
||||
function addCurrWSDir () {
|
||||
function addcurrent () {
|
||||
git config --global bulkworkspaces.$wsname "$PWD"
|
||||
}
|
||||
|
||||
# remove workspace from global git config
|
||||
function remWSDir () {
|
||||
function removeworkspace () {
|
||||
checkWSName
|
||||
git config --global --unset bulkworkspaces.$wsname
|
||||
}
|
||||
|
||||
# remove workspace from global git config
|
||||
function purgeWS () {
|
||||
function purge () {
|
||||
git config --global --remove-section bulkworkspaces
|
||||
}
|
||||
|
||||
# list all current workspace locations defined
|
||||
function listWSDir () {
|
||||
function listall () {
|
||||
git config --global --get-regexp bulkworkspaces
|
||||
}
|
||||
|
||||
|
|
@ -80,18 +81,30 @@ function checkWSName () {
|
|||
while read workspace; do
|
||||
cwsname=$(echo $workspace | cut -f1 -d' ' | cut -f2 -d'.')
|
||||
if [[ $cwsname == $wsname ]]; then return; fi
|
||||
done <<< "$(echo "$(listWSDir)")"
|
||||
done <<< "$(echo "$(listall)")"
|
||||
# when here the ws name was not found
|
||||
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
|
||||
}
|
||||
|
||||
# execute the bulk operation
|
||||
function executBulkOp () {
|
||||
checkGitCommand
|
||||
if $singlemode; then
|
||||
echo "Selected single workspace mode in workspace: $wsname"
|
||||
checkWSName
|
||||
fi
|
||||
listWSDir | while read workspacespec; do
|
||||
listall | while read workspacespec; do
|
||||
cwsname=$(echo $workspacespec | cut -f1 -d' ' | cut -f2 -d'.')
|
||||
if $singlemode && [[ $cwsname != $wsname ]]; then continue; fi
|
||||
wslocation=$(echo $workspacespec | cut -f2 -d' ')
|
||||
|
|
@ -102,7 +115,7 @@ function executBulkOp () {
|
|||
gitrepodir=${line::${#line}-5} # cut the .git part of find results to have the root git directory of that repository
|
||||
eval cd "$gitrepodir" # into git repo location
|
||||
curdir=$(pwd)
|
||||
echo "Current repository: ${curdir%/*}/${bldred}${curdir##*/}${reset}"
|
||||
echo "Current repository: ${actual#${curdir%/*}}/${bldred}${curdir##*/}${reset}"
|
||||
guardedExecution
|
||||
eval cd "$wslocation" # back to origin location of last find command
|
||||
done
|
||||
|
|
@ -112,68 +125,46 @@ function executBulkOp () {
|
|||
initialcount="${#}"
|
||||
initialarguments="${@}"
|
||||
|
||||
# if no arguments show registered workspaces
|
||||
# if no arguments show usage
|
||||
if [[ $initialcount -le 0 ]]; then
|
||||
listWSDir
|
||||
usage
|
||||
fi
|
||||
|
||||
# parse command parameters
|
||||
while [ "${#}" -ge 1 ] ; do
|
||||
|
||||
case "$1" in
|
||||
--listall)
|
||||
butilcommand="listWSDir"
|
||||
break
|
||||
;;
|
||||
--purge)
|
||||
butilcommand="purgeWS"
|
||||
break
|
||||
;;
|
||||
--removeworkspace)
|
||||
shift
|
||||
wsname="$1"
|
||||
butilcommand="remWSDir"
|
||||
break
|
||||
;;
|
||||
--addcurrent)
|
||||
shift
|
||||
wsname="$1"
|
||||
butilcommand="addCurrWSDir"
|
||||
break
|
||||
;;
|
||||
--addworkspace)
|
||||
shift
|
||||
--listall|--purge|--removeworkspace|--addcurrent|--addworkspace)
|
||||
butilcommand="${1:2}"
|
||||
shift
|
||||
wsname="$1"
|
||||
shift
|
||||
wsdir="$1"
|
||||
butilcommand="addWSDir"
|
||||
break
|
||||
;;
|
||||
-g)
|
||||
-g)
|
||||
guarded=true
|
||||
;;
|
||||
-w)
|
||||
-w)
|
||||
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
|
||||
;;
|
||||
*)
|
||||
*) # git core commands
|
||||
butilcommand="executBulkOp"
|
||||
corecommand="$1"
|
||||
gitcommand="$@"
|
||||
checkGitCommand
|
||||
butilcommand="executBulkOp"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
|
|
@ -182,27 +173,9 @@ done
|
|||
|
||||
# check right number of arguments
|
||||
case $butilcommand in
|
||||
@(listWSDir|purgeWS) )
|
||||
if [[ $initialcount -ne 1 ]]; then
|
||||
usage
|
||||
echo 1>&2 "error: wrong number of arguments"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
@(addCurrWSDir|remWSDir))
|
||||
if [[ $initialcount -ne 2 ]]; then
|
||||
usage
|
||||
echo 1>&2 "error: wrong number of arguments"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
addWSDir)
|
||||
if [[ $initialcount -ne 3 ]]; then
|
||||
usage
|
||||
echo 1>&2 "error: wrong number of arguments"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
@(listall|purge) ) allowedargcount 1;;
|
||||
@(addcurrent|removeworkspace)) allowedargcount 2;;
|
||||
addworkspace) allowedargcount 3;;
|
||||
esac
|
||||
|
||||
$butilcommand # run user command
|
||||
Loading…
Reference in a new issue