diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-08-21 11:33:08 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-08-21 11:33:08 -0700 |
commit | 07d6309e63aa272d2930540faa72147dc5be97a5 (patch) | |
tree | 90ac260b170f62b92d4169de01f39dfcbf67460e | |
parent | 83e355a62cd05fba4533d59f9ab4e104c0596279 (diff) | |
parent | d44e71261f91d3cc81293e0976bb40daa8abb583 (diff) | |
download | git-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-x | git-pull.sh | 14 | ||||
-rwxr-xr-x | t/t5520-pull.sh | 13 |
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 && |