Patchwork D212: tests: demonstrate crash when trying to rebase merge without its parents

login
register
mail settings
Submitter phabricator
Date Aug. 2, 2017, 5:10 a.m.
Message ID <differential-rev-PHID-DREV-zagdasywqzx5ikms6rcy-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/22629/
State Superseded
Headers show

Comments

phabricator - Aug. 2, 2017, 5:10 a.m.
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  As the test case shows, when "hg rebase -d G -r 'B + D + F'" is run on
  the following graph, we crash with traceback. It's reasonable to fail
  because we can not easily produce a correct rebased F. The problem is
  what diff to apply to either the rebased B or the rebased D. We could
  potentially produce the result by e.g. applying the (F-D) diff to the
  rebased B and then applying the reverse (E-D) diff on top, but that
  could result in merge conflicts in each of those steps, which we don't
  have a way of dealing with. So for now, let's just add a test case to
  demonstrate that we crash (i.e. the AssertionError is clearly
  incorrect since the user can run into it).
  
    F
  
  /|
  C E
  
  |  |
  |
  
  B D G
   \|/
  
    A

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D212

AFFECTED FILES
  tests/test-rebase-obsolete.t

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: mercurial-devel
phabricator - Aug. 2, 2017, 8:06 p.m.
quark accepted this revision.
quark added a comment.


  Thanks for this case too!

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D212

To: martinvonz, #hg-reviewers, quark
Cc: quark, mercurial-devel

Patch

diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
--- a/tests/test-rebase-obsolete.t
+++ b/tests/test-rebase-obsolete.t
@@ -473,6 +473,27 @@ 
   
   $ cd ..
 
+Detach both parents
+
+  $ hg init double-detach
+  $ cd double-detach
+
+  $ hg debugdrawdag <<EOF
+  >   F
+  >  /|
+  > C E
+  > | |
+  > B D G
+  >  \|/
+  >   A
+  > EOF
+
+BROKEN: This raises an exception
+  $ hg rebase -d G -r 'B + D + F' 2>&1 | grep ^AssertionError
+  AssertionError: no base found to rebase on (defineparents called wrong)
+
+  $ cd ..
+
 test on rebase dropping a merge
 
 (setup)