aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-08-21 11:33:08 -0700
committerJunio C Hamano <gitster@pobox.com>2009-08-21 11:33:08 -0700
commit07d6309e63aa272d2930540faa72147dc5be97a5 (patch)
tree90ac260b170f62b92d4169de01f39dfcbf67460e
parent83e355a62cd05fba4533d59f9ab4e104c0596279 (diff)
parentd44e71261f91d3cc81293e0976bb40daa8abb583 (diff)
downloadgit-07d6309e63aa272d2930540faa72147dc5be97a5.tar.gz
git-07d6309e63aa272d2930540faa72147dc5be97a5.tar.xz
Merge branch 'sb/maint-pull-rebase' into maint
* sb/maint-pull-rebase: pull: support rebased upstream + fetch + pull --rebase t5520-pull: Test for rebased upstream + fetch + pull --rebase
-rwxr-xr-xgit-pull.sh14
-rwxr-xr-xt/t5520-pull.sh13
2 files changed, 24 insertions, 3 deletions
diff --git a/git-pull.sh b/git-pull.sh
index 4b78a0cd3..0f2418297 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -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
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index c5a2e66a0..e78d40242 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -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 &&