Re: [PATCH v2 5/7] add tests for rebasing merged history

2013-05-30 Thread Martin von Zweigbergk
On Wed, May 29, 2013 at 12:57 AM, Johannes Sixt j.s...@viscovery.net wrote:
 Am 5/29/2013 8:39, schrieb Martin von Zweigbergk:
 +# a---b---c
 +#  \   \
 +#   d---e   \
 +#\   \   \
 +# n---o---w---v
 +#  \
 +#   z

 +#TODO: make all flavors of rebase use --topo-order
 +test_run_rebase success 'e n o' ''
 +test_run_rebase success 'e n o' -m
 +test_run_rebase success 'n o e' -i

 As test_commit offers predictable timestamps, I think you can work around
 this discrepancy by generating commits n and o before e. (That is not a
 solution--just a workaround that depends on the current
 implementation--because the order in which parents of a merge are listed
 is unspecified.)

I actually liked it as documentation of the current inconsistency and
with an explicit TODO.

I have addressed the remainder of your comments in this and the next
message. Thanks again.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 5/7] add tests for rebasing merged history

2013-05-29 Thread Martin von Zweigbergk
---
 t/t3400-rebase.sh |  31 +
 t/t3401-rebase-partial.sh |  45 ---
 t/t3404-rebase-interactive.sh |  10 +-
 t/t3409-rebase-preserve-merges.sh |  53 
 t/t3425-rebase-topology-merges.sh | 250 ++
 5 files changed, 252 insertions(+), 137 deletions(-)
 delete mode 100755 t/t3401-rebase-partial.sh
 create mode 100755 t/t3425-rebase-topology-merges.sh

diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index b58fa1a..b436ef4 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -40,13 +40,6 @@ test_expect_success 'prepare repository with topic branches' 
'
echo Side C 
git add C 
git commit -m Add C 
-   git checkout -b nonlinear my-topic-branch 
-   echo Edit B 
-   git add B 
-   git commit -m Modify B 
-   git merge side 
-   git checkout -b upstream-merged-nonlinear 
-   git merge master 
git checkout -f my-topic-branch 
git tag topic
 '
@@ -106,31 +99,9 @@ test_expect_success 'rebase from ambiguous branch name' '
git rebase master
 '
 
-test_expect_success 'rebase after merge master' '
-   git checkout --detach refs/tags/topic 
-   git branch -D topic 
-   git reset --hard topic 
-   git merge master 
-   git rebase master 
-   ! (git show | grep ^Merge:)
-'
-
-test_expect_success 'rebase of history with merges is linearized' '
-   git checkout nonlinear 
-   test 4 = $(git rev-list master.. | wc -l) 
-   git rebase master 
-   test 3 = $(git rev-list master.. | wc -l)
-'
-
-test_expect_success 'rebase of history with merges after upstream merge is 
linearized' '
-   git checkout upstream-merged-nonlinear 
-   test 5 = $(git rev-list master.. | wc -l) 
-   git rebase master 
-   test 3 = $(git rev-list master.. | wc -l)
-'
-
 test_expect_success 'rebase a single mode change' '
git checkout master 
+   git branch -D topic 
echo 1 X 
git add X 
test_tick 
diff --git a/t/t3401-rebase-partial.sh b/t/t3401-rebase-partial.sh
deleted file mode 100755
index 7ba1797..000
--- a/t/t3401-rebase-partial.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2006 Yann Dirson, based on t3400 by Amos Waterland
-#
-
-test_description='git rebase should detect patches integrated upstream
-
-This test cherry-picks one local change of two into master branch, and
-checks that git rebase succeeds with only the second patch in the
-local branch.
-'
-. ./test-lib.sh
-
-test_expect_success 'prepare repository with topic branch' '
-   test_commit A 
-   git checkout -b my-topic-branch 
-   test_commit B 
-   test_commit C 
-   git checkout -f master 
-   test_commit A2 A.t
-'
-
-test_expect_success 'pick top patch from topic branch into master' '
-   git cherry-pick C 
-   git checkout -f my-topic-branch
-'
-
-test_debug '
-   git cherry master 
-   git format-patch -k --stdout --full-index master /dev/null 
-   gitk --all  sleep 1
-'
-
-test_expect_success 'rebase topic branch against new master and check git am 
did not get halted' '
-   git rebase master 
-   test_path_is_missing .git/rebase-apply
-'
-
-test_expect_success 'rebase --merge topic branch that was partially merged 
upstream' '
-   git reset --hard C 
-   git rebase --merge master 
-   test_path_is_missing .git/rebase-merge
-'
-
-test_done
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index a58406d..ffcaf02 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -477,19 +477,11 @@ test_expect_success 'interrupted squash works as expected 
(case 2)' '
test $one = $(git rev-parse HEAD~2)
 '
 
-test_expect_success 'ignore patch if in upstream' '
-   HEAD=$(git rev-parse HEAD) 
-   git checkout -b has-cherry-picked HEAD^ 
+test_expect_success '--continue tries to commit, even for edit' '
echo unrelated  file7 
git add file7 
test_tick 
git commit -m unrelated change 
-   git cherry-pick $HEAD 
-   EXPECT_COUNT=1 git rebase -i $HEAD 
-   test $HEAD = $(git rev-parse HEAD^)
-'
-
-test_expect_success '--continue tries to commit, even for edit' '
parent=$(git rev-parse HEAD^) 
test_tick 
FAKE_LINES=edit 1 git rebase -i HEAD^ 
diff --git a/t/t3409-rebase-preserve-merges.sh 
b/t/t3409-rebase-preserve-merges.sh
index 6de4e22..2e0c364 100755
--- a/t/t3409-rebase-preserve-merges.sh
+++ b/t/t3409-rebase-preserve-merges.sh
@@ -11,14 +11,6 @@ Run git rebase -p and check that merges are properly 
carried along
 GIT_AUTHOR_EMAIL=bogus_email_address
 export GIT_AUTHOR_EMAIL
 
-# Clone 1 (trivial merge):
-#
-# A1--A2  -- origin/master
-#  \   \
-#   B1--M  -- topic
-#\
-# B2  -- origin/topic
-#
 # Clone 2 (conflicting merge):
 #
 # A1--A2--B3   -- origin/master
@@ -36,16 +28,6 @@ export GIT_AUTHOR_EMAIL
 # \--A3

Re: [PATCH v2 5/7] add tests for rebasing merged history

2013-05-29 Thread Johannes Sixt
Am 5/29/2013 8:39, schrieb Martin von Zweigbergk:
 +# a---b---c
 +#  \   \
 +#   d---e   \
 +#\   \   \
 +# n---o---w---v
 +#  \
 +#   z

 +#TODO: make all flavors of rebase use --topo-order
 +test_run_rebase success 'e n o' ''
 +test_run_rebase success 'e n o' -m
 +test_run_rebase success 'n o e' -i

As test_commit offers predictable timestamps, I think you can work around
this discrepancy by generating commits n and o before e. (That is not a
solution--just a workaround that depends on the current
implementation--because the order in which parents of a merge are listed
is unspecified.)

 +test_expect_success rebase -p re-creates internal merge 
 + reset_rebase 
 + git rebase -p c w 
 + test_revision_subjects 'c d n e o w' HEAD~4 HEAD~3 HEAD~2 HEAD^2 HEAD^ 
 HEAD

Shouldn't this better be

test_cmp_rev c HEAD~4 
test_revision_subjects 'd n e o w' HEAD~3 HEAD~2 HEAD^2 HEAD^ HEAD

to ensure that c is not a rewritten commit?

 +
 +
 +test_expect_success rebase -p can re-create two branches on onto 
 + reset_rebase 
 + git rebase -p --onto c d w 
 + test_revision_subjects 'c n e o w' HEAD~3 HEAD~2 HEAD^2 HEAD^ HEAD
 +

Same here.

Time is fleeting. I have to stop here.

-- Hannes
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 5/7] add tests for rebasing merged history

2013-05-29 Thread Johannes Sixt
Am 5/29/2013 8:39, schrieb Martin von Zweigbergk:
 +#   f
 +#  /
 +# a---b---c---g---h
 +#  \
 +#   d---G---i
 +#\   \
 +# e---u
 +#
 +# uppercase = cherry-picked
 +# h = reverted g

 +test_expect_failure rebase -p --onto in merged history does not lose 
 patches in upstream 
 + reset_rebase 
 + git rebase -p --onto f h u 
 + test_cmp_rev f HEAD~3 
 + test_revision_subjects 'd G i e u' HEAD~2 HEAD^2^ HEAD^2 HEAD^ HEAD
 +

My expectations are different: When a patch is in upstream, then it is not
to be rebased, even --onto somewhere else than upstream.

But take this with a grain of salt, as I never encounter(ed) this use-case
in practice.

 +test_expect_success rebase -p --onto in merged history drops patches in 
 onto 
 + reset_rebase 
 + git rebase -p --onto h f u 
 + test_cmp_rev h HEAD~3 
 + test_revision_subjects 'd i e u' HEAD~2 HEAD^2 HEAD^ HEAD
 +

And this is just the opposite case, where I think the patch should be kept.

 +# a---b---c
 +#  \
 +#   d---e
 +#\   \
 +# n---r
 +#  \
 +#   o
 +#
 +# r = tree-same with n
 +# uppercace = cherry-picked

I do not see any upper-cased letters in this graph. ;)

 +test_expect_success rebase -p re-creates empty internal merge commit 
 + reset_rebase 
 + git rebase -p c r 
 + test_revision_subjects 'c d e n r' HEAD~3 HEAD~2 HEAD^2 HEAD^ HEAD

Again, check c with test_cmp_rev.

-- Hannes
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html