tests/test-evolve-issue6097.t
author Martin von Zweigbergk <martinvonz@google.com>
Mon, 09 Dec 2019 11:09:11 -0800
changeset 5343 ebfd0d875600
parent 5323 417503ef667d
child 5349 e8660b28bfee
permissions -rw-r--r--
evolve: handle relocation during divergence resolution producing no changes When resolving divergence and the two divergent commits have different parents, we start by rebasing one of them to have the same parent as the other. That step can result in no changes to commit. When it does, we would crash with a TypeError before this patch. This patch fixes it by instead creating an empty commit in that scenario. The existing code then continues to attempt to merge it, which produces no changes, and no commit is created on top. The other side of the divergence is marked as successor as usual, so orphans from the side that became empty will be evolved to the right place (see test).

Orphan changeset and trying to relocate a node on top of itself (issue6097)
https://bz.mercurial-scm.org/show_bug.cgi?id=6097

  $ . $TESTDIR/testlib/common.sh

  $ cat << EOF >> $HGRCPATH
  > [extensions]
  > rebase =
  > evolve =
  > EOF

  $ hg init issue6097
  $ cd issue6097

  $ echo apricot > a
  $ hg ci -qAm apricot

  $ echo banana > b
  $ hg ci -qAm banana

Let's go back to amend 0 and make an orphan out of 1

  $ hg up -q 0
  $ echo coconut > c
  $ hg add -q c
  $ hg ci --amend -m 'apricot and coconut'
  1 new orphan changesets

Now rebase the successor of 0 on top of 1

  $ hg rebase -r . -d 1
  rebasing 2:32acf8fb1b23 "apricot and coconut" (tip)
  1 new orphan changesets

Pruning 1 just to get it out of the way

  $ hg prune -q 1

Note how both the regular DAG and the obsolescence graph are linear, but the
paths from 3 to 0 are different: 3-1-0 and 3-2-0

  $ hg log -G
  @  changeset:   3:2868fe6df617
  |  tag:         tip
  |  parent:      1:e0486f65907d
  |  user:        test
  |  date:        Thu Jan 01 00:00:00 1970 +0000
  |  instability: orphan
  |  summary:     apricot and coconut
  |
  x  changeset:   1:e0486f65907d
  |  user:        test
  |  date:        Thu Jan 01 00:00:00 1970 +0000
  |  obsolete:    pruned using prune
  |  summary:     banana
  |
  x  changeset:   0:692cc7b6212c
     user:        test
     date:        Thu Jan 01 00:00:00 1970 +0000
     obsolete:    rewritten using amend, rebase as 3:2868fe6df617
     summary:     apricot
  

  $ hg debugobsolete
  692cc7b6212c102a9eafcf04ed2e4bfca5023754 32acf8fb1b2325c727135dcd65153745a031a125 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'}
  32acf8fb1b2325c727135dcd65153745a031a125 2868fe6df617a3045cf668e4ab1c486a8692abd1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'rebase', 'user': 'test'}
  e0486f65907dac7107e72a247386845e6a9fd83b 0 {692cc7b6212c102a9eafcf04ed2e4bfca5023754} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
  $ hg obslog
  @  2868fe6df617 (3) apricot and coconut
  |
  x  32acf8fb1b23 (2) apricot and coconut
  |    rewritten(parent, content) as 2868fe6df617 using rebase by test (Thu Jan 01 00:00:00 1970 +0000)
  |
  x  692cc7b6212c (0) apricot
       rewritten(description, content) as 32acf8fb1b23 using amend by test (Thu Jan 01 00:00:00 1970 +0000)
  

  $ hg evolve -r .
  move:[3] apricot and coconut
  atop:[-1] 
  working directory is now at bb847d1d3a5f

  $ hg log -G
  @  changeset:   4:bb847d1d3a5f
     tag:         tip
     parent:      -1:000000000000
     user:        test
     date:        Thu Jan 01 00:00:00 1970 +0000
     summary:     apricot and coconut
  

  $ hg debugobsolete
  692cc7b6212c102a9eafcf04ed2e4bfca5023754 32acf8fb1b2325c727135dcd65153745a031a125 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'}
  32acf8fb1b2325c727135dcd65153745a031a125 2868fe6df617a3045cf668e4ab1c486a8692abd1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'rebase', 'user': 'test'}
  e0486f65907dac7107e72a247386845e6a9fd83b 0 {692cc7b6212c102a9eafcf04ed2e4bfca5023754} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
  2868fe6df617a3045cf668e4ab1c486a8692abd1 bb847d1d3a5f3de90f4fd5e845b69d848568401a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'}
  $ hg obslog
  @  bb847d1d3a5f (4) apricot and coconut
  |
  x  2868fe6df617 (3) apricot and coconut
  |    rebased(parent) as bb847d1d3a5f using evolve by test (Thu Jan 01 00:00:00 1970 +0000)
  |
  x  32acf8fb1b23 (2) apricot and coconut
  |    rewritten(parent, content) as 2868fe6df617 using rebase by test (Thu Jan 01 00:00:00 1970 +0000)
  |
  x  692cc7b6212c (0) apricot
       rewritten(description, content) as 32acf8fb1b23 using amend by test (Thu Jan 01 00:00:00 1970 +0000)