tests/test-copies-chain-merge.t
changeset 44327 f9dfb56ed6e8
child 44463 bc1786973c6d
equal deleted inserted replaced
44326:93a05cb223da 44327:f9dfb56ed6e8
       
     1 =====================================================
       
     2 Test Copy tracing for chain of copies involving merge
       
     3 =====================================================
       
     4 
       
     5 This test files covers copies/rename case for a chains of commit where merges
       
     6 are involved. It cheks we do not have unwanted update of behavior and that the
       
     7 different options to retrieve copies behave correctly.
       
     8 
       
     9 Setup
       
    10 =====
       
    11 
       
    12 use git diff to see rename
       
    13 
       
    14   $ cat << EOF >> $HGRCPATH
       
    15   > [diff]
       
    16   > git=yes
       
    17   > [ui]
       
    18   > logtemplate={rev} {desc}]\n
       
    19   > EOF
       
    20 
       
    21   $ hg init repo-chain
       
    22   $ cd repo-chain
       
    23 
       
    24 Add some linear rename initialy
       
    25 
       
    26   $ touch a b
       
    27   $ hg ci -Am 'i-0 initial commit: a b'
       
    28   adding a
       
    29   adding b
       
    30   $ hg mv a c
       
    31   $ hg ci -Am 'i-1: a -move-> c'
       
    32   $ hg mv c d
       
    33   $ hg ci -Am 'i-2: c -move-> d'
       
    34   $ hg log -G
       
    35   @  2 i-2: c -move-> d]
       
    36   |
       
    37   o  1 i-1: a -move-> c]
       
    38   |
       
    39   o  0 i-0 initial commit: a b]
       
    40   
       
    41 
       
    42 Have a branching with nothing on one side
       
    43 
       
    44   $ hg mv d e
       
    45   $ hg ci -Am 'a-1: d -move-> e'
       
    46   $ hg mv e f
       
    47   $ hg ci -Am 'a-2: e -move-> f'
       
    48   $ hg log -G --rev '::.'
       
    49   @  4 a-2: e -move-> f]
       
    50   |
       
    51   o  3 a-1: d -move-> e]
       
    52   |
       
    53   o  2 i-2: c -move-> d]
       
    54   |
       
    55   o  1 i-1: a -move-> c]
       
    56   |
       
    57   o  0 i-0 initial commit: a b]
       
    58   
       
    59 
       
    60 And Having another branch with renames on the other side
       
    61 
       
    62   $ hg up 'desc("i-2")'
       
    63   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    64   $ echo foo > b
       
    65   $ hg ci -m 'b-1: b update'
       
    66   created new head
       
    67   $ hg log -G --rev '::.'
       
    68   @  5 b-1: b update]
       
    69   |
       
    70   o  2 i-2: c -move-> d]
       
    71   |
       
    72   o  1 i-1: a -move-> c]
       
    73   |
       
    74   o  0 i-0 initial commit: a b]
       
    75   
       
    76 
       
    77 
       
    78 Merge the two branches we just defined (in both directions)
       
    79 - one with change to an unrelated file
       
    80 - one with renames in them
       
    81 
       
    82   $ hg up 'desc("b-1")'
       
    83   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    84   $ hg merge 'desc("a-2")'
       
    85   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    86   (branch merge, don't forget to commit)
       
    87   $ hg ci -m 'mBAm-0 simple merge - one way'
       
    88   $ hg up 'desc("a-2")'
       
    89   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    90   $ hg merge 'desc("b-1")'
       
    91   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    92   (branch merge, don't forget to commit)
       
    93   $ hg ci -m 'mABm-0 simple merge - the other way'
       
    94   created new head
       
    95   $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
       
    96   @    7 mABm-0 simple merge - the other way]
       
    97   |\
       
    98   +---o  6 mBAm-0 simple merge - one way]
       
    99   | |/
       
   100   | o  5 b-1: b update]
       
   101   | |
       
   102   o |  4 a-2: e -move-> f]
       
   103   | |
       
   104   o |  3 a-1: d -move-> e]
       
   105   |/
       
   106   o  2 i-2: c -move-> d]
       
   107   |
       
   108   o  1 i-1: a -move-> c]
       
   109   |
       
   110   o  0 i-0 initial commit: a b]
       
   111   
       
   112 
       
   113 Create a branch that delete a file previous renamed
       
   114 
       
   115   $ hg up 'desc("i-2")'
       
   116   2 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   117   $ hg rm d
       
   118   $ hg ci -m 'c-1 delete d'
       
   119   created new head
       
   120   $ hg log -G --rev '::.'
       
   121   @  8 c-1 delete d]
       
   122   |
       
   123   o  2 i-2: c -move-> d]
       
   124   |
       
   125   o  1 i-1: a -move-> c]
       
   126   |
       
   127   o  0 i-0 initial commit: a b]
       
   128   
       
   129 
       
   130 Merge:
       
   131 - one with change to an unrelated file
       
   132 - one deleting the change
       
   133 and recreate an unrelated file after the merge
       
   134 
       
   135   $ hg up 'desc("b-1")'
       
   136   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   137   $ hg merge 'desc("c-1")'
       
   138   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   139   (branch merge, don't forget to commit)
       
   140   $ hg ci -m 'mBCm-0 simple merge - one way'
       
   141   $ echo bar > d
       
   142   $ hg add d
       
   143   $ hg ci -m 'mBCm-1 re-add d'
       
   144   $ hg up 'desc("c-1")'
       
   145   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   146   $ hg merge 'desc("b-1")'
       
   147   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   148   (branch merge, don't forget to commit)
       
   149   $ hg ci -m 'mCBm-0 simple merge - the other way'
       
   150   created new head
       
   151   $ echo bar > d
       
   152   $ hg add d
       
   153   $ hg ci -m 'mCBm-1 re-add d'
       
   154   $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
       
   155   @  12 mCBm-1 re-add d]
       
   156   |
       
   157   o    11 mCBm-0 simple merge - the other way]
       
   158   |\
       
   159   | | o  10 mBCm-1 re-add d]
       
   160   | | |
       
   161   +---o  9 mBCm-0 simple merge - one way]
       
   162   | |/
       
   163   | o  8 c-1 delete d]
       
   164   | |
       
   165   o |  5 b-1: b update]
       
   166   |/
       
   167   o  2 i-2: c -move-> d]
       
   168   |
       
   169   o  1 i-1: a -move-> c]
       
   170   |
       
   171   o  0 i-0 initial commit: a b]
       
   172   
       
   173 
       
   174 Create a branch that delete a file previous renamed and recreate it
       
   175 
       
   176   $ hg up 'desc("i-2")'
       
   177   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   178   $ hg rm d
       
   179   $ hg ci -m 'd-1 delete d'
       
   180   created new head
       
   181   $ echo bar > d
       
   182   $ hg add d
       
   183   $ hg ci -m 'd-2 re-add d'
       
   184   $ hg log -G --rev '::.'
       
   185   @  14 d-2 re-add d]
       
   186   |
       
   187   o  13 d-1 delete d]
       
   188   |
       
   189   o  2 i-2: c -move-> d]
       
   190   |
       
   191   o  1 i-1: a -move-> c]
       
   192   |
       
   193   o  0 i-0 initial commit: a b]
       
   194   
       
   195 
       
   196 Merge:
       
   197 - one with change to an unrelated file
       
   198 - one deleting and recreating the change
       
   199 
       
   200 Note:
       
   201 | In this case, the merge get conflicting information since on one side we have
       
   202 | a "brand new" d. and one the other one we have "d renamed from c (itself
       
   203 | renamed from c)".
       
   204 |
       
   205 | The current code arbitrarily pick one side
       
   206 
       
   207   $ hg up 'desc("b-1")'
       
   208   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   209   $ hg merge 'desc("d-2")'
       
   210   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   211   (branch merge, don't forget to commit)
       
   212   $ hg ci -m 'mBDm-0 simple merge - one way'
       
   213   $ hg up 'desc("d-2")'
       
   214   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   215   $ hg merge 'desc("b-1")'
       
   216   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   217   (branch merge, don't forget to commit)
       
   218   $ hg ci -m 'mDBm-0 simple merge - the other way'
       
   219   created new head
       
   220   $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
       
   221   @    16 mDBm-0 simple merge - the other way]
       
   222   |\
       
   223   +---o  15 mBDm-0 simple merge - one way]
       
   224   | |/
       
   225   | o  14 d-2 re-add d]
       
   226   | |
       
   227   | o  13 d-1 delete d]
       
   228   | |
       
   229   o |  5 b-1: b update]
       
   230   |/
       
   231   o  2 i-2: c -move-> d]
       
   232   |
       
   233   o  1 i-1: a -move-> c]
       
   234   |
       
   235   o  0 i-0 initial commit: a b]
       
   236   
       
   237 
       
   238 Having another branch renaming a different file to the same filename as another
       
   239 
       
   240   $ hg up 'desc("i-2")'
       
   241   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   242   $ hg mv b g
       
   243   $ hg ci -m 'e-1 b -move-> g'
       
   244   created new head
       
   245   $ hg mv g f
       
   246   $ hg ci -m 'e-2 g -move-> f'
       
   247   $ hg log -G --rev '::.'
       
   248   @  18 e-2 g -move-> f]
       
   249   |
       
   250   o  17 e-1 b -move-> g]
       
   251   |
       
   252   o  2 i-2: c -move-> d]
       
   253   |
       
   254   o  1 i-1: a -move-> c]
       
   255   |
       
   256   o  0 i-0 initial commit: a b]
       
   257   
       
   258 
       
   259 Merge:
       
   260 - one with change to an unrelated file
       
   261 - one deleting and recreating the change
       
   262 
       
   263   $ hg up 'desc("a-2")'
       
   264   2 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   265   $ hg merge 'desc("e-2")'
       
   266   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   267   (branch merge, don't forget to commit)
       
   268   $ hg ci -m 'mAEm-0 simple merge - one way'
       
   269   $ hg up 'desc("e-2")'
       
   270   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   271   $ hg merge 'desc("a-2")'
       
   272   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   273   (branch merge, don't forget to commit)
       
   274   $ hg ci -m 'mEAm-0 simple merge - the other way'
       
   275   created new head
       
   276   $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
       
   277   @    20 mEAm-0 simple merge - the other way]
       
   278   |\
       
   279   +---o  19 mAEm-0 simple merge - one way]
       
   280   | |/
       
   281   | o  18 e-2 g -move-> f]
       
   282   | |
       
   283   | o  17 e-1 b -move-> g]
       
   284   | |
       
   285   o |  4 a-2: e -move-> f]
       
   286   | |
       
   287   o |  3 a-1: d -move-> e]
       
   288   |/
       
   289   o  2 i-2: c -move-> d]
       
   290   |
       
   291   o  1 i-1: a -move-> c]
       
   292   |
       
   293   o  0 i-0 initial commit: a b]
       
   294   
       
   295 
       
   296 Note:
       
   297 | In this case, the merge get conflicting information since each side have a
       
   298 | different way to reach 'f'.
       
   299 
       
   300 final summary
       
   301 
       
   302   $ hg log -G
       
   303   @    20 mEAm-0 simple merge - the other way]
       
   304   |\
       
   305   +---o  19 mAEm-0 simple merge - one way]
       
   306   | |/
       
   307   | o  18 e-2 g -move-> f]
       
   308   | |
       
   309   | o  17 e-1 b -move-> g]
       
   310   | |
       
   311   | | o    16 mDBm-0 simple merge - the other way]
       
   312   | | |\
       
   313   | | +---o  15 mBDm-0 simple merge - one way]
       
   314   | | | |/
       
   315   | | | o  14 d-2 re-add d]
       
   316   | | | |
       
   317   | +---o  13 d-1 delete d]
       
   318   | | |
       
   319   | | | o  12 mCBm-1 re-add d]
       
   320   | | | |
       
   321   | | | o  11 mCBm-0 simple merge - the other way]
       
   322   | | |/|
       
   323   | | | | o  10 mBCm-1 re-add d]
       
   324   | | | | |
       
   325   | | +---o  9 mBCm-0 simple merge - one way]
       
   326   | | | |/
       
   327   | +---o  8 c-1 delete d]
       
   328   | | |
       
   329   +-----o  7 mABm-0 simple merge - the other way]
       
   330   | | |/
       
   331   +-----o  6 mBAm-0 simple merge - one way]
       
   332   | | |/
       
   333   | | o  5 b-1: b update]
       
   334   | |/
       
   335   o |  4 a-2: e -move-> f]
       
   336   | |
       
   337   o |  3 a-1: d -move-> e]
       
   338   |/
       
   339   o  2 i-2: c -move-> d]
       
   340   |
       
   341   o  1 i-1: a -move-> c]
       
   342   |
       
   343   o  0 i-0 initial commit: a b]
       
   344   
       
   345 
       
   346 Check results
       
   347 =============
       
   348 
       
   349 merging with unrelated change does not interfer wit the renames
       
   350 ---------------------------------------------------------------
       
   351 
       
   352 - rename on one side
       
   353 - unrelated change on the other side
       
   354 
       
   355   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
       
   356   A f
       
   357     d
       
   358   R d
       
   359   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
       
   360   A f
       
   361     d
       
   362   R d
       
   363   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
       
   364   M b
       
   365   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
       
   366   M b
       
   367   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
       
   368   M b
       
   369   A f
       
   370     d
       
   371   R d
       
   372   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
       
   373   M b
       
   374   A f
       
   375     d
       
   376   R d
       
   377   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
       
   378   M b
       
   379   A f
       
   380     a
       
   381   R a
       
   382   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
       
   383   M b
       
   384   A f
       
   385     a
       
   386   R a
       
   387 
       
   388 merging with the side having a delete
       
   389 -------------------------------------
       
   390 
       
   391 case summary:
       
   392 - one with change to an unrelated file
       
   393 - one deleting the change
       
   394 and recreate an unrelated file after the merge
       
   395 
       
   396 checks:
       
   397 - comparing from the merge
       
   398 
       
   399   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
       
   400   R d
       
   401   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
       
   402   R d
       
   403   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
       
   404   M b
       
   405   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
       
   406   M b
       
   407   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
       
   408   M b
       
   409   R d
       
   410   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
       
   411   M b
       
   412   R d
       
   413   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
       
   414   M b
       
   415   R a
       
   416   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
       
   417   M b
       
   418   R a
       
   419 
       
   420 - comparing with the merge children re-adding the file
       
   421 
       
   422   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
       
   423   M d
       
   424   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
       
   425   M d
       
   426   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
       
   427   M b
       
   428   A d
       
   429   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
       
   430   M b
       
   431   A d
       
   432   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
       
   433   M b
       
   434   M d
       
   435   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
       
   436   M b
       
   437   M d
       
   438   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
       
   439   M b
       
   440   A d
       
   441   R a
       
   442   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
       
   443   M b
       
   444   A d
       
   445   R a
       
   446 
       
   447 Comparing with a merge re-adding the file afterward
       
   448 ---------------------------------------------------
       
   449 
       
   450 Merge:
       
   451 - one with change to an unrelated file
       
   452 - one deleting and recreating the change
       
   453 
       
   454 Note:
       
   455 | In this case, the merge get conflicting information since on one side we have
       
   456 | a "brand new" d. and one the other one we have "d renamed from c (itself
       
   457 | renamed from c)".
       
   458 |
       
   459 | The current code arbitrarily pick one side
       
   460 
       
   461   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
       
   462   M d
       
   463   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
       
   464   M d
       
   465   $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
       
   466   M b
       
   467   M d
       
   468   $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
       
   469   M b
       
   470   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
       
   471   M b
       
   472   M d
       
   473   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
       
   474   M b
       
   475   M d
       
   476 
       
   477 The recorded copy is different depending of where we started the merge from since
       
   478 
       
   479   $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644   d'
       
   480   0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 644   d
       
   481   $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644   d'
       
   482   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   483 
       
   484 This second b004912a8510032a0350a74daa2803dadfb00e12 seems wrong. We should record the merge
       
   485   $ hg manifest --debug --rev 'desc("d-2")' | grep '644   d'
       
   486   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   487   $ hg manifest --debug --rev 'desc("b-1")' | grep '644   d'
       
   488   01c2f5eabdc4ce2bdee42b5f86311955e6c8f573 644   d
       
   489   $ hg debugindex d
       
   490      rev linkrev nodeid       p1           p2
       
   491        0       2 01c2f5eabdc4 000000000000 000000000000
       
   492        1      10 b004912a8510 000000000000 000000000000
       
   493        2      15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
       
   494 
       
   495   $ hg log -Gfr 'desc("mBDm-0")' d
       
   496   o    15 mBDm-0 simple merge - one way]
       
   497   |\
       
   498   o :  14 d-2 re-add d]
       
   499   :/
       
   500   o  2 i-2: c -move-> d]
       
   501   |
       
   502   o  1 i-1: a -move-> c]
       
   503   |
       
   504   o  0 i-0 initial commit: a b]
       
   505   
       
   506 
       
   507 (That output seems wrong, if we had opportunity to record the merge, we should
       
   508 probably have recorded the merge).
       
   509 
       
   510   $ hg log -Gfr 'desc("mDBm-0")' d
       
   511   o  14 d-2 re-add d]
       
   512   |
       
   513   ~
       
   514 
       
   515   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
       
   516   M b
       
   517   A d
       
   518     a
       
   519   R a
       
   520   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
       
   521   M b
       
   522   A d
       
   523   R a
       
   524 
       
   525 Comparing with a merge re-adding the file afterward
       
   526 ---------------------------------------------------
       
   527 
       
   528 - one with change to an unrelated file
       
   529 - one deleting and recreating the change
       
   530 
       
   531   $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644   f'
       
   532   eb806e34ef6be4c264effd5933d31004ad15a793 644   f
       
   533   $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644   f'
       
   534   eb806e34ef6be4c264effd5933d31004ad15a793 644   f
       
   535   $ hg manifest --debug --rev 'desc("a-2")' | grep '644   f'
       
   536   0dd616bc7ab1a111921d95d76f69cda5c2ac539c 644   f
       
   537   $ hg manifest --debug --rev 'desc("e-2")' | grep '644   f'
       
   538   6da5a2eecb9c833f830b67a4972366d49a9a142c 644   f
       
   539   $ hg debugindex f
       
   540      rev linkrev nodeid       p1           p2
       
   541        0       4 0dd616bc7ab1 000000000000 000000000000
       
   542        1      18 6da5a2eecb9c 000000000000 000000000000
       
   543        2      19 eb806e34ef6b 0dd616bc7ab1 6da5a2eecb9c
       
   544   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
       
   545   M f
       
   546   R b
       
   547   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
       
   548   M f
       
   549   R b
       
   550   $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
       
   551   M f
       
   552   R d
       
   553   $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
       
   554   M f
       
   555   R d
       
   556   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
       
   557   A f
       
   558     d
       
   559   R d
       
   560   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
       
   561   A f
       
   562     b
       
   563   R b
       
   564   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
       
   565   A f
       
   566     d
       
   567   R b
       
   568   R d
       
   569   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
       
   570   A f
       
   571     d
       
   572   R b
       
   573   R d
       
   574   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
       
   575   A f
       
   576     a
       
   577   R a
       
   578   R b
       
   579   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
       
   580   A f
       
   581     a
       
   582   R a
       
   583   R b
       
   584 
       
   585   $ hg log -Gfr 'desc("mAEm-0")' f
       
   586   o    19 mAEm-0 simple merge - one way]
       
   587   |\
       
   588   | o  18 e-2 g -move-> f]
       
   589   | |
       
   590   | o  17 e-1 b -move-> g]
       
   591   | |
       
   592   o |  4 a-2: e -move-> f]
       
   593   | |
       
   594   o |  3 a-1: d -move-> e]
       
   595   |/
       
   596   o  2 i-2: c -move-> d]
       
   597   |
       
   598   o  1 i-1: a -move-> c]
       
   599   |
       
   600   o  0 i-0 initial commit: a b]
       
   601   
       
   602 
       
   603   $ hg log -Gfr 'desc("mEAm-0")' f
       
   604   @    20 mEAm-0 simple merge - the other way]
       
   605   |\
       
   606   | o  18 e-2 g -move-> f]
       
   607   | |
       
   608   | o  17 e-1 b -move-> g]
       
   609   | |
       
   610   o |  4 a-2: e -move-> f]
       
   611   | |
       
   612   o |  3 a-1: d -move-> e]
       
   613   |/
       
   614   o  2 i-2: c -move-> d]
       
   615   |
       
   616   o  1 i-1: a -move-> c]
       
   617   |
       
   618   o  0 i-0 initial commit: a b]
       
   619