Code

Merge branch 'sb/maint-pull-rebase'
authorJunio C Hamano <gitster@pobox.com>
Wed, 5 Aug 2009 19:38:39 +0000 (12:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 Aug 2009 19:38:39 +0000 (12:38 -0700)
* sb/maint-pull-rebase:
  pull: support rebased upstream + fetch + pull --rebase
  t5520-pull: Test for rebased upstream + fetch + pull --rebase

git-pull.sh
t/t5520-pull.sh

index 4b78a0cd37ba70236a05f78fb5bed3f763348096..0f24182974fe2040c950b846decf360c1c22dbb1 100755 (executable)
@@ -124,10 +124,18 @@ test true = "$rebase" && {
        git diff-index --ignore-submodules --cached --quiet HEAD -- ||
        die "refusing to pull with rebase: your working tree is not up-to-date"
 
+       oldremoteref= &&
        . git-parse-remote &&
-       reflist="$(get_remote_merge_branch "$@" 2>/dev/null)" &&
-       oldremoteref="$(git rev-parse -q --verify \
-               "$reflist")"
+       remoteref="$(get_remote_merge_branch "$@" 2>/dev/null)" &&
+       oldremoteref="$(git rev-parse -q --verify "$remoteref")" &&
+       for reflog in $(git rev-list -g $remoteref 2>/dev/null)
+       do
+               if test "$reflog" = "$(git merge-base $reflog $curr_branch)"
+               then
+                       oldremoteref="$reflog"
+                       break
+               fi
+       done
 }
 orig_head=$(git rev-parse -q --verify HEAD)
 git fetch $verbosity --update-head-ok "$@" || exit 1
index c5a2e66a09b9a871fb97142a58de51097a685ae0..e78d40242a80d9b2aa74e74d3a4aecddbb63ab99 100755 (executable)
@@ -117,6 +117,19 @@ test_expect_success '--rebase with rebased default upstream' '
 
 '
 
+test_expect_success 'rebased upstream + fetch + pull --rebase' '
+
+       git update-ref refs/remotes/me/copy copy-orig &&
+       git reset --hard to-rebase-orig &&
+       git checkout --track -b to-rebase3 me/copy &&
+       git reset --hard to-rebase-orig &&
+       git fetch &&
+       git pull --rebase &&
+       test "conflicting modification" = "$(cat file)" &&
+       test file = "$(cat file2)"
+
+'
+
 test_expect_success 'pull --rebase dies early with dirty working directory' '
 
        git checkout to-rebase &&