From 87b7c959b498ea840c9fcb76a1cf216dc7a47018 Mon Sep 17 00:00:00 2001 From: spacewander Date: Sat, 2 Feb 2019 11:45:27 +0800 Subject: [PATCH] git-pr: added <[remote]:pr number> option. --- bin/git-pr | 30 +++++++++++++++++++++++------- man/git-pr.1 | 18 +++++++++++++++++- man/git-pr.html | 8 +++++++- man/git-pr.md | 5 +++++ 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/bin/git-pr b/bin/git-pr index 5f68638..f09bb3a 100755 --- a/bin/git-pr +++ b/bin/git-pr @@ -1,22 +1,38 @@ #!/usr/bin/env bash # Based on https://gist.github.com/gnarf/5406589 and https://gist.github.com/jhnns/d654d9d6da6d3b749986 +pull() { + local remote="$1" + local id="$2" + local branch="$3" + git fetch -fu $remote refs/pull/$id/head:$branch && \ + git checkout $branch && \ + git config --local --replace branch.$branch.merge refs/pull/$id/head && \ + git config --local --replace branch.$branch.remote $remote; +} + 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 =~ ^(https?://[^/]+/(.+))/pull/([0-9]+).*$ ]]; then - remote=${BASH_REMATCH[1]}.git - id=${BASH_REMATCH[3]} + +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 remote=${2:-origin} id=$1 branch=pr/$id + pull "$remote" "$id" "$branch" fi -git fetch -fu $remote refs/pull/$id/head:$branch && \ -git checkout $branch && \ -git config --local --replace branch.$branch.merge refs/pull/$id/head && \ -git config --local --replace branch.$branch.remote $remote; diff --git a/man/git-pr.1 b/man/git-pr.1 index 34f10fe..2ed3a90 100644 --- a/man/git-pr.1 +++ b/man/git-pr.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "GIT\-PR" "1" "October 2017" "" "Git Extras" +.TH "GIT\-PR" "1" "February 2019" "" "Git Extras" . .SH "NAME" \fBgit\-pr\fR \- Checks out a pull request locally @@ -10,6 +10,9 @@ \fBgit\-pr\fR [] . .br +\fBgit\-pr\fR <[remote]:number> +. +.br \fBgit\-pr\fR . .br @@ -66,6 +69,19 @@ $ git pr 226 upstream .IP "" 0 . .P +This does the same thing as the command above: +. +.IP "" 4 +. +.nf + +$ git pr upstream:226 +. +.fi +. +.IP "" 0 +. +.P You can also checkout a pull request based on a GitHub URL: . .IP "" 4 diff --git a/man/git-pr.html b/man/git-pr.html index a7d6301..be1dedd 100644 --- a/man/git-pr.html +++ b/man/git-pr.html @@ -77,6 +77,7 @@

SYNOPSIS

git-pr <number> [<remote>]
+git-pr <[remote]:number>
git-pr <url>
git-pr clean

@@ -116,6 +117,11 @@ Switched to branch 'pr/226'
$ git pr 226 upstream
 
+

This does the same thing as the command above:

+ +
$ git pr upstream:226
+
+

You can also checkout a pull request based on a GitHub URL:

$ git pr https://github.com/tj/git-extras/pull/453
@@ -148,7 +154,7 @@ Deleted branch pr/220 (was d34dc0f).
 
   
  1. -
  2. October 2017
  3. +
  4. February 2019
  5. git-pr(1)
diff --git a/man/git-pr.md b/man/git-pr.md index 93c6fd0..be2e823 100644 --- a/man/git-pr.md +++ b/man/git-pr.md @@ -4,6 +4,7 @@ git-pr(1) -- Checks out a pull request locally ## SYNOPSIS `git-pr` <number> [<remote>]
+`git-pr` <[remote]:number>
`git-pr` <url>
`git-pr clean` @@ -41,6 +42,10 @@ This pulls from a different remote: $ git pr 226 upstream +This does the same thing as the command above: + + $ git pr upstream:226 + You can also checkout a pull request based on a GitHub URL: $ git pr https://github.com/tj/git-extras/pull/453