mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 07:26:17 -04:00
git-pr: accpeted multiple GitHub URL or ID with remote.
This commit is contained in:
parent
87b7c959b4
commit
f29dad042c
47
bin/git-pr
47
bin/git-pr
|
|
@ -11,28 +11,45 @@ pull() {
|
|||
git config --local --replace branch.$branch.remote $remote;
|
||||
}
|
||||
|
||||
pull_pr_if_matched() {
|
||||
if [[ $1 =~ ^(.*):([0-9]+)|(https?://[^/]+/.+)/pull/([0-9]+).*$ ]]; then
|
||||
if [[ -n ${BASH_REMATCH[2]} ]]; then
|
||||
remote="${BASH_REMATCH[1]:-origin}"
|
||||
id="${BASH_REMATCH[2]}"
|
||||
else
|
||||
remote="${BASH_REMATCH[3]}.git"
|
||||
id="${BASH_REMATCH[4]}"
|
||||
fi
|
||||
|
||||
branch=pr/$id
|
||||
pull "$remote" "$id" "$branch"
|
||||
return $?
|
||||
fi
|
||||
|
||||
echo "$1 doesn't match the pr id pattern."
|
||||
return 1
|
||||
}
|
||||
|
||||
test -z "$1" && echo "pr number required." 1>&2 && exit 1
|
||||
|
||||
if test "$1" = "clean"; then
|
||||
git for-each-ref refs/heads/pr/* --format='%(refname)' | while read ref; do
|
||||
git branch -D ${ref#refs/heads/}
|
||||
done
|
||||
exit 0
|
||||
|
||||
elif [[ $1 =~ ^(.*):([0-9]+)|(https?://[^/]+/.+)/pull/([0-9]+).*$ ]]; then
|
||||
if [[ -n ${BASH_REMATCH[2]} ]]; then
|
||||
remote="${BASH_REMATCH[1]:-origin}"
|
||||
id="${BASH_REMATCH[2]}"
|
||||
else
|
||||
remote="${BASH_REMATCH[3]}.git"
|
||||
id="${BASH_REMATCH[4]}"
|
||||
fi
|
||||
|
||||
branch=pr/$id
|
||||
pull "$remote" "$id" "$branch"
|
||||
|
||||
else
|
||||
test -z $1 && echo "pr number required." 1>&2 && exit 1
|
||||
elif [[ "$1" =~ ^[0-9]+$ ]]; then
|
||||
remote=${2:-origin}
|
||||
id=$1
|
||||
branch=pr/$id
|
||||
pull "$remote" "$id" "$branch"
|
||||
|
||||
else
|
||||
rc=1
|
||||
while [ "$1" != "" ]; do
|
||||
pull_pr_if_matched "$1"
|
||||
rc=$?
|
||||
shift
|
||||
done
|
||||
|
||||
exit "$rc"
|
||||
fi
|
||||
|
|
|
|||
35
man/git-pr.1
35
man/git-pr.1
|
|
@ -10,10 +10,10 @@
|
|||
\fBgit\-pr\fR <number> [<remote>]
|
||||
.
|
||||
.br
|
||||
\fBgit\-pr\fR <[remote]:number>
|
||||
\fBgit\-pr\fR <[remote]:number>\.\.\.
|
||||
.
|
||||
.br
|
||||
\fBgit\-pr\fR <url>
|
||||
\fBgit\-pr\fR <url>\.\.\.
|
||||
.
|
||||
.br
|
||||
\fBgit\-pr clean\fR
|
||||
|
|
@ -99,6 +99,37 @@ Switched to branch \'pr/453\'
|
|||
.IP "" 0
|
||||
.
|
||||
.P
|
||||
You could even pull multiple pull requests via the GitHub URL or the ID with remote:
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git pr upstream:226 upstream:443
|
||||
$ git pr upstream:443 https://github\.com/tj/git\-extras/pull/453
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.P
|
||||
Note that \fBgit pr PR\-A PR\-B\fR is equal to:
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git pr PR\-A
|
||||
$ git pr PR\-B
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.P
|
||||
Therefore, if one of the pull request is failed to pull, this command will still go ahead and pull the others\. The final exit code will be decided by the result of the final pulling\.
|
||||
.
|
||||
.P
|
||||
To clean up old branches:
|
||||
.
|
||||
.IP "" 4
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@
|
|||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-pr</code> <number> [<remote>]<br />
|
||||
<code>git-pr</code> <[remote]:number><br />
|
||||
<code>git-pr</code> <url><br />
|
||||
<code>git-pr</code> <[remote]:number>...<br />
|
||||
<code>git-pr</code> <url>...<br />
|
||||
<code>git-pr clean</code></p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
|
@ -131,6 +131,21 @@ From https://github.com/tj/git-extras
|
|||
Switched to branch 'pr/453'
|
||||
</code></pre>
|
||||
|
||||
<p>You could even pull multiple pull requests via the GitHub URL or the ID with remote:</p>
|
||||
|
||||
<pre><code>$ git pr upstream:226 upstream:443
|
||||
$ git pr upstream:443 https://github.com/tj/git-extras/pull/453
|
||||
</code></pre>
|
||||
|
||||
<p>Note that <code>git pr PR-A PR-B</code> is equal to:</p>
|
||||
|
||||
<pre><code>$ git pr PR-A
|
||||
$ git pr PR-B
|
||||
</code></pre>
|
||||
|
||||
<p>Therefore, if one of the pull request is failed to pull, this command will still go ahead and pull
|
||||
the others. The final exit code will be decided by the result of the final pulling.</p>
|
||||
|
||||
<p>To clean up old branches:</p>
|
||||
|
||||
<pre><code>$ git pr clean
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ git-pr(1) -- Checks out a pull request locally
|
|||
## SYNOPSIS
|
||||
|
||||
`git-pr` <number> [<remote>]<br>
|
||||
`git-pr` <[remote]:number><br>
|
||||
`git-pr` <url><br>
|
||||
`git-pr` <[remote]:number>...<br>
|
||||
`git-pr` <url>...<br>
|
||||
`git-pr clean`
|
||||
|
||||
## DESCRIPTION
|
||||
|
|
@ -54,6 +54,19 @@ You can also checkout a pull request based on a GitHub URL:
|
|||
* [new ref] refs/pull/453/head -> pr/453
|
||||
Switched to branch 'pr/453'
|
||||
|
||||
You could even pull multiple pull requests via the GitHub URL or the ID with remote:
|
||||
|
||||
$ git pr upstream:226 upstream:443
|
||||
$ git pr upstream:443 https://github.com/tj/git-extras/pull/453
|
||||
|
||||
Note that `git pr PR-A PR-B` is equal to:
|
||||
|
||||
$ git pr PR-A
|
||||
$ git pr PR-B
|
||||
|
||||
Therefore, if one of the pull request is failed to pull, this command will still go ahead and pull
|
||||
the others. The final exit code will be decided by the result of the final pulling.
|
||||
|
||||
To clean up old branches:
|
||||
|
||||
$ git pr clean
|
||||
|
|
|
|||
Loading…
Reference in a new issue