git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Use reflog in 'pull --rebase . foo'
@ 2010-11-12 19:38 Martin von Zweigbergk
  2010-11-13  8:58 ` Andreas Schwab
  0 siblings, 1 reply; 6+ messages in thread
From: Martin von Zweigbergk @ 2010-11-12 19:38 UTC (permalink / raw)
  To: git, gitster, santi; +Cc: Martin von Zweigbergk

Since c85c792 (pull --rebase: be cleverer with rebased upstream
branches, 2008-01-26), "git pull --rebase" has used the reflog to try to
rebase from the old upstream onto the new upstream.

Make this work if the local repository is explicitly passed on the
command line as in 'git pull --rebase . foo'.
---
I removed some seemingly unnecessary variables. I couldn't find any uses
of them in the callers' code either, so it should be safe...

I apparently introduced a call to sed as well. I think I remember seeing
some guideslines about the use of sed in Git, but I can't remember what.
I couldn't find anything in the CodingGuidelines either. Is the code
below ok?

 git-parse-remote.sh |   24 ++++++++++--------------
 t/t5520-pull.sh     |    7 +++++++
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index 5f47b18..0565edd 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -63,33 +63,29 @@ get_default_remote () {
 get_remote_merge_branch () {
 	case "$#" in
 	0|1)
-	    origin="$1"
-	    default=$(get_default_remote)
-	    test -z "$origin" && origin=$default
 	    curr_branch=$(git symbolic-ref -q HEAD)
-	    [ "$origin" = "$default" ] &&
+	    test -z "$1" || test "$1" = $(get_default_remote) &&
 	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
 	    ;;
 	*)
 	    repo=$1
 	    shift
-	    ref=$1
 	    # FIXME: It should return the tracking branch
 	    #        Currently only works with the default mapping
-	    case "$ref" in
-	    +*)
-		ref=$(expr "z$ref" : 'z+\(.*\)')
-		;;
-	    esac
-	    expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
-	    remote=$(expr "z$ref" : 'z\([^:]*\):')
+	    remote=$(echo "$1" | sed -e 's|+\?\([^:]*\):\?|\1|g')
 	    case "$remote" in
 	    '' | HEAD ) remote=HEAD ;;
 	    heads/*) remote=${remote#heads/} ;;
 	    refs/heads/*) remote=${remote#refs/heads/} ;;
 	    refs/* | tags/* | remotes/* ) remote=
 	    esac
-
-	    [ -n "$remote" ] && echo "refs/remotes/$repo/$remote"
+	    [ -n "$remote" ] && case "$repo" in
+		.)
+		    echo "refs/heads/$remote"
+		    ;;
+		*)
+		    echo "refs/remotes/$repo/$remote"
+		    ;;
+	    esac
 	esac
 }
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 0b489f5..0470a81 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -222,4 +222,11 @@ test_expect_success 'git pull --rebase does not reapply old patches' '
 	)
 '
 
+test_expect_success 'git pull --rebase against local branch' '
+	git checkout -b copy2 to-rebase-orig &&
+	git pull --rebase . to-rebase &&
+	test "conflicting modification" = "$(cat file)" &&
+	test file = "$(cat file2)"
+'
+
 test_done
-- 
1.7.3.2.167.ga361b

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-11-13 23:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-12 19:38 [PATCH] Use reflog in 'pull --rebase . foo' Martin von Zweigbergk
2010-11-13  8:58 ` Andreas Schwab
2010-11-13 12:09   ` Martin von Zweigbergk
2010-11-13 17:20     ` Santi Béjar
2010-11-13 17:52       ` Martin von Zweigbergk
2010-11-13 23:10         ` Santi Béjar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).