mirror of
https://github.com/tj/git-extras.git
synced 2026-09-12 16:36:22 -04:00
Codereview Spacewander - whitespaces in workspace locations
This commit is contained in:
parent
7263b6c611
commit
ca62bdcfe6
|
|
@ -237,7 +237,7 @@ $ git effort bin/* lib/*
|
|||
|
||||
## git bulk
|
||||
|
||||
`git bulk` adds covenient support for operations that you want to execute on multiple git repositories.
|
||||
`git bulk` adds convenient support for operations that you want to execute on multiple git repositories.
|
||||
|
||||
* simply register workspaces that contain multiple git repos in their directory structure
|
||||
* run any git command on the repositories of the registered workspaces in one command to `git bulk`
|
||||
|
|
|
|||
45
bin/git-bulk
45
bin/git-bulk
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
invers=`tput rev`
|
||||
reset=`tput sgr0`
|
||||
invers=$(tput rev)
|
||||
reset=$(tput sgr0)
|
||||
txtbld=$(tput bold)
|
||||
bldred=${txtbld}$(tput setaf 1)
|
||||
|
||||
|
|
@ -22,13 +22,13 @@ 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; }
|
||||
|
|
@ -68,20 +68,26 @@ function checkGitCommand () {
|
|||
# check if workspace name is registered
|
||||
function checkWSName () {
|
||||
while read workspace; do
|
||||
rwsname=$(echo $workspace | cut -f1 -d' ' | cut -f2 -d'.')
|
||||
if [[ $rwsname == $wsname ]]; then return; fi
|
||||
parseWsName "$workspace"
|
||||
if [[ $rwsname == "$wsname" ]]; then return; fi
|
||||
done <<< "$(echo "$(listall)")"
|
||||
# when here the ws name was not found
|
||||
usage && echo "error: unknown workspace name: $wsname" && exit 1
|
||||
}
|
||||
|
||||
# parse out wsname from workspacespec
|
||||
function parseWsName () {
|
||||
local wsspec="$1"
|
||||
rwsdir=${wsspec#* }
|
||||
rwsname=${wsspec#*.} && rwsname=${rwsname%% *}
|
||||
}
|
||||
|
||||
# detects the wsname of the current directory
|
||||
function wsnameToCurrent () {
|
||||
while read workspace; do
|
||||
if [ -z "$workspace" ]; then continue; fi
|
||||
rwsdir=${workspace#* }
|
||||
rwsname=${workspace#*.} && rwsname=${rwsname% *}
|
||||
if echo $PWD | grep -o -q $rwsdir; then wsname=$rwsname && return; fi
|
||||
parseWsName "$workspace"
|
||||
if echo "$PWD" | grep -o -q "$rwsdir"; then wsname="$rwsname" && return; fi
|
||||
done <<< "$(echo "$(listall)")"
|
||||
# when here then not in workspace dir
|
||||
echo "error: you are not in a workspace directory. your registered workspaces are:" && \
|
||||
|
|
@ -90,7 +96,7 @@ function wsnameToCurrent () {
|
|||
|
||||
# helper to check number of arguments
|
||||
function allowedargcount () {
|
||||
( test $paramcount -ne $1 ) && ( usage && echo 1>&2 "error: wrong number of arguments" && exit 1 )
|
||||
( test "$paramcount" -ne "$1" ) && ( usage && echo 1>&2 "error: wrong number of arguments" && exit 1 )
|
||||
}
|
||||
|
||||
# execute the bulk operation
|
||||
|
|
@ -98,19 +104,18 @@ function executBulkOp () {
|
|||
checkGitCommand
|
||||
if ! $allwsmode && ! $singlemode; then wsnameToCurrent; fi # by default git bulk works within the 'current' workspace
|
||||
listall | while read workspacespec; do
|
||||
cwsname=$(echo $workspacespec | cut -f1 -d' ' | cut -f2 -d'.')
|
||||
if [[ -n $wsname ]] && [[ $cwsname != $wsname ]]; then continue; fi
|
||||
wslocation=$(echo $workspacespec | cut -f2 -d' ')
|
||||
eval cd "$wslocation"
|
||||
actual=$(pwd)
|
||||
parseWsName "$workspacespec"
|
||||
if [[ -n $wsname ]] && [[ $rwsname != "$wsname" ]]; then continue; fi
|
||||
eval cd "\"$rwsdir\""
|
||||
local actual=$(pwd)
|
||||
echo "Executing bulk operation in workspace ${invers}$actual${reset}"
|
||||
eval find . -name ".git" | while read line; do
|
||||
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)
|
||||
local 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
|
||||
local curdir=$(pwd)
|
||||
echo "Current repository: ${actual#${curdir%/*}}/${bldred}${curdir##*/}${reset}"
|
||||
guardedExecution
|
||||
eval cd "$wslocation" # back to origin location of last find command
|
||||
eval cd "\"$rwsdir\"" # back to origin location of last find command
|
||||
done
|
||||
done
|
||||
}
|
||||
|
|
|
|||
125
man/git-bulk.1
125
man/git-bulk.1
|
|
@ -0,0 +1,125 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-BULK" "1" "March 2017" "" "Git Extras"
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBgit\-bulk\fR \- Run git commands on multiple repositories
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
usage: usage: git bulk [\-g] ([\-a]|[\-w <ws\-name>]) <git command> git bulk \-\-addworkspace <ws\-name> <ws\-root\-directory> git bulk \-\-removeworkspace <ws\-name> git bulk \-\-addcurrent <ws\-name> git bulk \-\-purge git bulk \-\-listall
|
||||
.
|
||||
.SH "DESCRIPTION"
|
||||
git bulk adds convenien support for operations that you want to execute on multiple git repositories\.
|
||||
.
|
||||
.IP "\(bu" 4
|
||||
simply register workspaces that contain multiple git repos in their directory structure
|
||||
.
|
||||
.IP "\(bu" 4
|
||||
run any git command on the repositories of the registered workspaces in one command to \fBgit bulk\fR
|
||||
.
|
||||
.IP "\(bu" 4
|
||||
use the "guarded mode" to check on each execution
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
\-a
|
||||
.
|
||||
.P
|
||||
Run a git command on all workspaces and their repositories\.
|
||||
.
|
||||
.P
|
||||
\-g
|
||||
.
|
||||
.P
|
||||
Ask the user for confirmation on every execution\.
|
||||
.
|
||||
.P
|
||||
\-w <ws\-name>
|
||||
.
|
||||
.P
|
||||
Run the git command on the specified workspace\. The workspace must be registered\.
|
||||
.
|
||||
.P
|
||||
<git command>
|
||||
.
|
||||
.P
|
||||
Any git Command you wish to execute on the repositories\.
|
||||
.
|
||||
.P
|
||||
\-\-addworkspace <ws\-name> <ws\-root\-directory>
|
||||
.
|
||||
.P
|
||||
Register a workspace for bulk operations\. All repositories in the diretories below <ws\-root\-directory> get registered under this workspace with the name <ws\-name>\.
|
||||
.
|
||||
.P
|
||||
\-\-removeworkspace <ws\-name>
|
||||
.
|
||||
.P
|
||||
Remove the workspace with the logical name <ws\-name>\.
|
||||
.
|
||||
.P
|
||||
\-\-addcurrent <ws\-name>
|
||||
.
|
||||
.P
|
||||
Adds the current directory as workspace to git bulk operations\. The workspace is referenced with its logical name <ws\-name>\.
|
||||
.
|
||||
.P
|
||||
git bulk \-\-purge
|
||||
.
|
||||
.P
|
||||
Removes all defined repository locations\.
|
||||
.
|
||||
.P
|
||||
git bulk \-\-listall
|
||||
.
|
||||
.P
|
||||
List all registered repositories\.
|
||||
.
|
||||
.SH "EXAMPLES"
|
||||
.
|
||||
.nf
|
||||
|
||||
Register a workspace so that git bulk knows about it:
|
||||
|
||||
$ git bulk \-\-addworkspace personal ~/workspaces/personal
|
||||
|
||||
Register the current directory as a workspace to git bulk:
|
||||
|
||||
$ git bulk \-\-addcurrent personal
|
||||
|
||||
List all registered workspaces:
|
||||
|
||||
$ git bulk \-\-listall
|
||||
|
||||
Run a git command on the repositories of the current workspace:
|
||||
|
||||
$ git bulk fetch
|
||||
|
||||
Run a git command on the specified workspace and its repositories:
|
||||
|
||||
$ git bulk \-w personal fetch
|
||||
|
||||
Run a git command but ask user for confirmation on every execution (guarded mode):
|
||||
|
||||
$ git bulk \-g fetch
|
||||
|
||||
Remove a registered workspace:
|
||||
|
||||
$ git bulk \-\-removeworkspace personal
|
||||
|
||||
Remove all registered workspaces:
|
||||
|
||||
$ git bulk \-\-purge
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Niklas Schlimm <\fIns103@hotmail\.de\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<https://github\.com/nschlimm/git\-bulk>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
||||
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
||||
<title>git-bulk(1) - Run git commands on multiple repositories</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
body#manpage {margin:0}
|
||||
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
||||
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
||||
.mp h2 {margin:10px 0 0 0}
|
||||
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
||||
.mp h3 {margin:0 0 0 4ex}
|
||||
.mp dt {margin:0;clear:left}
|
||||
.mp dt.flush {float:left;width:8ex}
|
||||
.mp dd {margin:0 0 0 9ex}
|
||||
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
||||
.mp pre {margin-bottom:20px}
|
||||
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
||||
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
||||
.mp img {display:block;margin:auto}
|
||||
.mp h1.man-title {display:none}
|
||||
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
||||
.mp h2 {font-size:16px;line-height:1.25}
|
||||
.mp h1 {font-size:20px;line-height:2}
|
||||
.mp {text-align:justify;background:#fff}
|
||||
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
||||
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
||||
.mp u {text-decoration:underline}
|
||||
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
||||
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
||||
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
||||
.mp b.man-ref {font-weight:normal;color:#434241}
|
||||
.mp pre {padding:0 4ex}
|
||||
.mp pre code {font-weight:normal;color:#434241}
|
||||
.mp h2+pre,h3+pre {padding-left:0}
|
||||
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
||||
ol.man-decor {width:100%}
|
||||
ol.man-decor li.tl {text-align:left}
|
||||
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
||||
ol.man-decor li.tr {text-align:right;float:right}
|
||||
</style>
|
||||
</head>
|
||||
<!--
|
||||
The following styles are deprecated and will be removed at some point:
|
||||
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
||||
|
||||
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
||||
.man-navigation should be used instead.
|
||||
-->
|
||||
<body id='manpage'>
|
||||
<div class='mp' id='man'>
|
||||
|
||||
<div class='man-navigation' style='display:none'>
|
||||
<a href="#NAME">NAME</a>
|
||||
<a href="#SYNOPSIS">SYNOPSIS</a>
|
||||
<a href="#DESCRIPTION">DESCRIPTION</a>
|
||||
<a href="#OPTIONS">OPTIONS</a>
|
||||
<a href="#EXAMPLES">EXAMPLES</a>
|
||||
<a href="#AUTHOR">AUTHOR</a>
|
||||
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
|
||||
<a href="#SEE-ALSO">SEE ALSO</a>
|
||||
</div>
|
||||
|
||||
<ol class='man-decor man-head man head'>
|
||||
<li class='tl'>git-bulk(1)</li>
|
||||
<li class='tc'>Git Extras</li>
|
||||
<li class='tr'>git-bulk(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-bulk</code> - <span class="man-whatis">Run git commands on multiple repositories</span>
|
||||
</p>
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p>usage: usage: git bulk [-g] ([-a]|[-w <ws-name>]) <git command>
|
||||
git bulk --addworkspace <ws-name> <ws-root-directory>
|
||||
git bulk --removeworkspace <ws-name>
|
||||
git bulk --addcurrent <ws-name>
|
||||
git bulk --purge
|
||||
git bulk --listall</p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>git bulk adds convenien support for operations that you want to execute on multiple git repositories.</p>
|
||||
|
||||
<ul>
|
||||
<li>simply register workspaces that contain multiple git repos in their directory structure</li>
|
||||
<li>run any git command on the repositories of the registered workspaces in one command to <code>git bulk</code></li>
|
||||
<li>use the "guarded mode" to check on each execution</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p> -a</p>
|
||||
|
||||
<p> Run a git command on all workspaces and their repositories.</p>
|
||||
|
||||
<p> -g</p>
|
||||
|
||||
<p> Ask the user for confirmation on every execution.</p>
|
||||
|
||||
<p> -w <ws-name></p>
|
||||
|
||||
<p> Run the git command on the specified workspace. The workspace must be registered.</p>
|
||||
|
||||
<p> <git command></p>
|
||||
|
||||
<p> Any git Command you wish to execute on the repositories.</p>
|
||||
|
||||
<p> --addworkspace <ws-name> <ws-root-directory></p>
|
||||
|
||||
<p> Register a workspace for bulk operations. All repositories in the diretories below <ws-root-directory> get registered under this workspace with the name <ws-name>.</p>
|
||||
|
||||
<p> --removeworkspace <ws-name></p>
|
||||
|
||||
<p> Remove the workspace with the logical name <ws-name>.</p>
|
||||
|
||||
<p> --addcurrent <ws-name></p>
|
||||
|
||||
<p> Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name <ws-name>.</p>
|
||||
|
||||
<p> git bulk --purge</p>
|
||||
|
||||
<p> Removes all defined repository locations.</p>
|
||||
|
||||
<p> git bulk --listall</p>
|
||||
|
||||
<p> List all registered repositories.</p>
|
||||
|
||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||
|
||||
<pre><code>Register a workspace so that git bulk knows about it:
|
||||
|
||||
$ git bulk --addworkspace personal ~/workspaces/personal
|
||||
|
||||
Register the current directory as a workspace to git bulk:
|
||||
|
||||
$ git bulk --addcurrent personal
|
||||
|
||||
List all registered workspaces:
|
||||
|
||||
$ git bulk --listall
|
||||
|
||||
Run a git command on the repositories of the current workspace:
|
||||
|
||||
$ git bulk fetch
|
||||
|
||||
Run a git command on the specified workspace and its repositories:
|
||||
|
||||
$ git bulk -w personal fetch
|
||||
|
||||
Run a git command but ask user for confirmation on every execution (guarded mode):
|
||||
|
||||
$ git bulk -g fetch
|
||||
|
||||
Remove a registered workspace:
|
||||
|
||||
$ git bulk --removeworkspace personal
|
||||
|
||||
Remove all registered workspaces:
|
||||
|
||||
$ git bulk --purge
|
||||
</code></pre>
|
||||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Niklas Schlimm <<a href="mailto:ns103@hotmail.de" data-bare-link="true">ns103@hotmail.de</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
<p><https://github.com/nschlimm/git-bulk></p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>March 2017</li>
|
||||
<li class='tr'>git-bulk(1)</li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -12,7 +12,7 @@ usage: usage: git bulk [-g] ([-a]|[-w <ws-name>]) <git command>
|
|||
|
||||
## DESCRIPTION
|
||||
|
||||
git bulk adds covenien support for operations that you want to execute on multiple git repositories.
|
||||
git bulk adds convenien support for operations that you want to execute on multiple git repositories.
|
||||
|
||||
- simply register workspaces that contain multiple git repos in their directory structure
|
||||
- run any git command on the repositories of the registered workspaces in one command to `git bulk`
|
||||
|
|
|
|||
Loading…
Reference in a new issue