tests/test-copies-chain-merge.t
changeset 45732 4ffe502673c3
parent 45704 5e72827dae1e
child 45733 ee3fd9021fac
equal deleted inserted replaced
45731:03690079d7dd 45732:4ffe502673c3
   162   o  1 i-1: a -move-> c
   162   o  1 i-1: a -move-> c
   163   |
   163   |
   164   o  0 i-0 initial commit: a b h
   164   o  0 i-0 initial commit: a b h
   165   
   165   
   166 
   166 
       
   167 Setup all merge
       
   168 ===============
       
   169 
       
   170 This is done beforehand to validate that the upgrade process creates valid copy
       
   171 information.
       
   172 
   167 merging with unrelated change does not interfere with the renames
   173 merging with unrelated change does not interfere with the renames
   168 ---------------------------------------------------------------
   174 ---------------------------------------------------------------
   169 
   175 
   170 - rename on one side
   176 - rename on one side
   171 - unrelated change on the other side
   177 - unrelated change on the other side
   199   o  1 i-1: a -move-> c
   205   o  1 i-1: a -move-> c
   200   |
   206   |
   201   o  0 i-0 initial commit: a b h
   207   o  0 i-0 initial commit: a b h
   202   
   208   
   203 
   209 
   204   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
       
   205   A f
       
   206     d
       
   207   R d
       
   208   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
       
   209   A f
       
   210     d
       
   211   R d
       
   212   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
       
   213   M b
       
   214   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
       
   215   M b
       
   216   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
       
   217   M b
       
   218   A f
       
   219     d
       
   220   R d
       
   221   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
       
   222   M b
       
   223   A f
       
   224     d
       
   225   R d
       
   226   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
       
   227   M b
       
   228   A f
       
   229     a
       
   230   R a
       
   231   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
       
   232   M b
       
   233   A f
       
   234     a
       
   235   R a
       
   236 
   210 
   237 merging with the side having a delete
   211 merging with the side having a delete
   238 -------------------------------------
   212 -------------------------------------
   239 
   213 
   240 case summary:
   214 case summary:
   278   |
   252   |
   279   o  1 i-1: a -move-> c
   253   o  1 i-1: a -move-> c
   280   |
   254   |
   281   o  0 i-0 initial commit: a b h
   255   o  0 i-0 initial commit: a b h
   282   
   256   
   283 - comparing from the merge
       
   284 
       
   285   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
       
   286   R d
       
   287   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
       
   288   R d
       
   289   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
       
   290   M b
       
   291   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
       
   292   M b
       
   293   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
       
   294   M b
       
   295   R d
       
   296   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
       
   297   M b
       
   298   R d
       
   299   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
       
   300   M b
       
   301   R a
       
   302   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
       
   303   M b
       
   304   R a
       
   305 
       
   306 - comparing with the merge children re-adding the file
       
   307 
       
   308   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
       
   309   M d
       
   310   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
       
   311   M d
       
   312   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
       
   313   M b
       
   314   A d
       
   315   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
       
   316   M b
       
   317   A d
       
   318   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
       
   319   M b
       
   320   M d
       
   321   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
       
   322   M b
       
   323   M d
       
   324   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
       
   325   M b
       
   326   A d
       
   327   R a
       
   328   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
       
   329   M b
       
   330   A d
       
   331   R a
       
   332 
   257 
   333 Comparing with a merge re-adding the file afterward
   258 Comparing with a merge re-adding the file afterward
   334 ---------------------------------------------------
   259 ---------------------------------------------------
   335 
   260 
   336 Merge:
   261 Merge:
   365   |
   290   |
   366   o  1 i-1: a -move-> c
   291   o  1 i-1: a -move-> c
   367   |
   292   |
   368   o  0 i-0 initial commit: a b h
   293   o  0 i-0 initial commit: a b h
   369   
   294   
   370   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
       
   371   M d
       
   372   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
       
   373   M d
       
   374   $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
       
   375   M b
       
   376   $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
       
   377   M b
       
   378   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
       
   379   M b
       
   380   M d
       
   381   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
       
   382   M b
       
   383   M d
       
   384 
       
   385 The bugs makes recorded copy is different depending of where we started the merge from since
       
   386 
       
   387   $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644   d'
       
   388   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   389   $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644   d'
       
   390   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   391 
       
   392   $ hg manifest --debug --rev 'desc("d-2")' | grep '644   d'
       
   393   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   394   $ hg manifest --debug --rev 'desc("b-1")' | grep '644   d'
       
   395   169be882533bc917905d46c0c951aa9a1e288dcf 644   d (no-changeset !)
       
   396   b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644   d (changeset !)
       
   397   $ hg debugindex d
       
   398      rev linkrev nodeid       p1           p2
       
   399        0       2 169be882533b 000000000000 000000000000 (no-changeset !)
       
   400        0       2 b789fdd96dc2 000000000000 000000000000 (changeset !)
       
   401        1       8 b004912a8510 000000000000 000000000000
       
   402 
       
   403 Log output should not include a merge commit as it did not happen
       
   404 
       
   405 #if no-changeset
       
   406   $ hg log -Gfr 'desc("mBDm-0")' d
       
   407   o  8 d-2 re-add d
       
   408   |
       
   409   ~
       
   410 #else
       
   411   $ hg log -Gfr 'desc("mBDm-0")' d
       
   412   o  8 d-2 re-add d
       
   413   |
       
   414   ~
       
   415 #endif
       
   416 
       
   417 #if no-changeset
       
   418   $ hg log -Gfr 'desc("mDBm-0")' d
       
   419   o  8 d-2 re-add d
       
   420   |
       
   421   ~
       
   422 #else
       
   423   $ hg log -Gfr 'desc("mDBm-0")' d
       
   424   o  8 d-2 re-add d
       
   425   |
       
   426   ~
       
   427 #endif
       
   428 
       
   429   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
       
   430   M b
       
   431   A d
       
   432   R a
       
   433   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
       
   434   M b
       
   435   A d
       
   436   R a
       
   437 
   295 
   438 
   296 
   439 Comparing with a merge with colliding rename
   297 Comparing with a merge with colliding rename
   440 --------------------------------------------
   298 --------------------------------------------
   441 
   299 
   457   (branch merge, don't forget to commit)
   315   (branch merge, don't forget to commit)
   458   $ hg ci -m 'mEAm-0 simple merge - the other way'
   316   $ hg ci -m 'mEAm-0 simple merge - the other way'
   459   created new head
   317   created new head
   460   $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
   318   $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
   461   @    20 mEAm-0 simple merge - the other way
   319   @    20 mEAm-0 simple merge - the other way
       
   320   |\
       
   321   +---o  19 mAEm-0 simple merge - one way
       
   322   | |/
       
   323   | o  10 e-2 g -move-> f
       
   324   | |
       
   325   | o  9 e-1 b -move-> g
       
   326   | |
       
   327   o |  4 a-2: e -move-> f
       
   328   | |
       
   329   o |  3 a-1: d -move-> e
       
   330   |/
       
   331   o  2 i-2: c -move-> d
       
   332   |
       
   333   o  1 i-1: a -move-> c
       
   334   |
       
   335   o  0 i-0 initial commit: a b h
       
   336   
       
   337 
       
   338 
       
   339 Merge:
       
   340 - one with change to an unrelated file (b)
       
   341 - one overwriting a file (d) with a rename (from h to i to d)
       
   342 
       
   343   $ hg up 'desc("i-2")'
       
   344   2 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   345   $ hg mv h i
       
   346   $ hg commit -m "f-1: rename h -> i"
       
   347   created new head
       
   348   $ hg mv --force i d
       
   349   $ hg commit -m "f-2: rename i -> d"
       
   350   $ hg debugindex d
       
   351      rev linkrev nodeid       p1           p2
       
   352        0       2 169be882533b 000000000000 000000000000 (no-changeset !)
       
   353        0       2 b789fdd96dc2 000000000000 000000000000 (changeset !)
       
   354        1       8 b004912a8510 000000000000 000000000000
       
   355        2      22 4a067cf8965d 000000000000 000000000000 (no-changeset !)
       
   356        2      22 fe6f8b4f507f 000000000000 000000000000 (changeset !)
       
   357   $ hg up 'desc("b-1")'
       
   358   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   359   $ hg merge 'desc("f-2")'
       
   360   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   361   (branch merge, don't forget to commit)
       
   362   $ hg ci -m 'mBFm-0 simple merge - one way'
       
   363   $ hg up 'desc("f-2")'
       
   364   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   365   $ hg merge 'desc("b-1")'
       
   366   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   367   (branch merge, don't forget to commit)
       
   368   $ hg ci -m 'mFBm-0 simple merge - the other way'
       
   369   created new head
       
   370   $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
       
   371   @    24 mFBm-0 simple merge - the other way
       
   372   |\
       
   373   +---o  23 mBFm-0 simple merge - one way
       
   374   | |/
       
   375   | o  22 f-2: rename i -> d
       
   376   | |
       
   377   | o  21 f-1: rename h -> i
       
   378   | |
       
   379   o |  5 b-1: b update
       
   380   |/
       
   381   o  2 i-2: c -move-> d
       
   382   |
       
   383   o  1 i-1: a -move-> c
       
   384   |
       
   385   o  0 i-0 initial commit: a b h
       
   386   
       
   387 
       
   388 
       
   389 Merge:
       
   390 - one with change to a file
       
   391 - one deleting and recreating the file
       
   392 
       
   393 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
       
   394 consider history and rename on both branch of the merge.
       
   395 
       
   396   $ hg up 'desc("i-2")'
       
   397   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   398   $ echo "some update" >> d
       
   399   $ hg commit -m "g-1: update d"
       
   400   created new head
       
   401   $ hg up 'desc("d-2")'
       
   402   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   403   $ hg merge 'desc("g-1")' --tool :union
       
   404   merging d
       
   405   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   406   (branch merge, don't forget to commit)
       
   407   $ hg ci -m 'mDGm-0 simple merge - one way'
       
   408   $ hg up 'desc("g-1")'
       
   409   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   410   $ hg merge 'desc("d-2")' --tool :union
       
   411   merging d
       
   412   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   413   (branch merge, don't forget to commit)
       
   414   $ hg ci -m 'mGDm-0 simple merge - the other way'
       
   415   created new head
       
   416   $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
       
   417   @    27 mGDm-0 simple merge - the other way
       
   418   |\
       
   419   +---o  26 mDGm-0 simple merge - one way
       
   420   | |/
       
   421   | o  25 g-1: update d
       
   422   | |
       
   423   o |  8 d-2 re-add d
       
   424   | |
       
   425   o |  7 d-1 delete d
       
   426   |/
       
   427   o  2 i-2: c -move-> d
       
   428   |
       
   429   o  1 i-1: a -move-> c
       
   430   |
       
   431   o  0 i-0 initial commit: a b h
       
   432   
       
   433 
       
   434 
       
   435 Merge:
       
   436 - one with change to a file (d)
       
   437 - one overwriting that file with a rename (from h to i, to d)
       
   438 
       
   439 This case is similar to BF/FB, but an actual merge happens, so both side of the
       
   440 history are relevant.
       
   441 
       
   442 Note:
       
   443 | In this case, the merge get conflicting information since on one side we have
       
   444 | "a -> c -> d". and one the other one we have "h -> i -> d".
       
   445 |
       
   446 | The current code arbitrarily pick one side
       
   447 
       
   448   $ hg up 'desc("f-2")'
       
   449   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   450   $ hg merge 'desc("g-1")' --tool :union
       
   451   merging d
       
   452   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   453   (branch merge, don't forget to commit)
       
   454   $ hg ci -m 'mFGm-0 simple merge - one way'
       
   455   created new head
       
   456   $ hg up 'desc("g-1")'
       
   457   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   458   $ hg merge 'desc("f-2")' --tool :union
       
   459   merging d
       
   460   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   461   (branch merge, don't forget to commit)
       
   462   $ hg ci -m 'mGFm-0 simple merge - the other way'
       
   463   created new head
       
   464   $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
       
   465   @    29 mGFm-0 simple merge - the other way
       
   466   |\
       
   467   +---o  28 mFGm-0 simple merge - one way
       
   468   | |/
       
   469   | o  25 g-1: update d
       
   470   | |
       
   471   o |  22 f-2: rename i -> d
       
   472   | |
       
   473   o |  21 f-1: rename h -> i
       
   474   |/
       
   475   o  2 i-2: c -move-> d
       
   476   |
       
   477   o  1 i-1: a -move-> c
       
   478   |
       
   479   o  0 i-0 initial commit: a b h
       
   480   
       
   481 
       
   482 
       
   483 Comparing with merging with a deletion (and keeping the file)
       
   484 -------------------------------------------------------------
       
   485 
       
   486 Merge:
       
   487 - one removing a file (d)
       
   488 - one updating that file
       
   489 - the merge keep the modified version of the file (canceling the delete)
       
   490 
       
   491 In this case, the file keep on living after the merge. So we should not drop its
       
   492 copy tracing chain.
       
   493 
       
   494   $ hg up 'desc("c-1")'
       
   495   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   496   $ hg merge 'desc("g-1")'
       
   497   file 'd' was deleted in local [working copy] but was modified in other [merge rev].
       
   498   You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
       
   499   What do you want to do? u
       
   500   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   501   use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
       
   502   [1]
       
   503   $ hg resolve -t :other d
       
   504   (no more unresolved files)
       
   505   $ hg ci -m "mCGm-0"
       
   506   created new head
       
   507 
       
   508   $ hg up 'desc("g-1")'
       
   509   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   510   $ hg merge 'desc("c-1")'
       
   511   file 'd' was deleted in other [merge rev] but was modified in local [working copy].
       
   512   You can use (c)hanged version, (d)elete, or leave (u)nresolved.
       
   513   What do you want to do? u
       
   514   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   515   use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
       
   516   [1]
       
   517   $ hg resolve -t :local d
       
   518   (no more unresolved files)
       
   519   $ hg ci -m "mGCm-0"
       
   520   created new head
       
   521 
       
   522   $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
       
   523   @    31 mGCm-0
       
   524   |\
       
   525   +---o  30 mCGm-0
       
   526   | |/
       
   527   | o  25 g-1: update d
       
   528   | |
       
   529   o |  6 c-1 delete d
       
   530   |/
       
   531   o  2 i-2: c -move-> d
       
   532   |
       
   533   o  1 i-1: a -move-> c
       
   534   |
       
   535   o  0 i-0 initial commit: a b h
       
   536   
       
   537 
       
   538 
       
   539 
       
   540 Comparing with merge restoring an untouched deleted file
       
   541 --------------------------------------------------------
       
   542 
       
   543 Merge:
       
   544 - one removing a file (d)
       
   545 - one leaving the file untouched
       
   546 - the merge actively restore the file to the same content.
       
   547 
       
   548 In this case, the file keep on living after the merge. So we should not drop its
       
   549 copy tracing chain.
       
   550 
       
   551   $ hg up 'desc("c-1")'
       
   552   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   553   $ hg merge 'desc("b-1")'
       
   554   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   555   (branch merge, don't forget to commit)
       
   556   $ hg revert --rev 'desc("b-1")' d
       
   557   $ hg ci -m "mCB-revert-m-0"
       
   558   created new head
       
   559 
       
   560   $ hg up 'desc("b-1")'
       
   561   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   562   $ hg merge 'desc("c-1")'
       
   563   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   564   (branch merge, don't forget to commit)
       
   565   $ hg revert --rev 'desc("b-1")' d
       
   566   $ hg ci -m "mBC-revert-m-0"
       
   567   created new head
       
   568 
       
   569   $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
       
   570   @    33 mBC-revert-m-0
       
   571   |\
       
   572   +---o  32 mCB-revert-m-0
       
   573   | |/
       
   574   | o  6 c-1 delete d
       
   575   | |
       
   576   o |  5 b-1: b update
       
   577   |/
       
   578   o  2 i-2: c -move-> d
       
   579   |
       
   580   o  1 i-1: a -move-> c
       
   581   |
       
   582   o  0 i-0 initial commit: a b h
       
   583   
       
   584 
       
   585 
       
   586   $ hg up null --quiet
       
   587 
       
   588 Test copy information chaining
       
   589 ==============================
       
   590 
       
   591 merging with unrelated change does not interfere with the renames
       
   592 ---------------------------------------------------------------
       
   593 
       
   594 - rename on one side
       
   595 - unrelated change on the other side
       
   596 
       
   597   $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
       
   598   o    12 mABm-0 simple merge - the other way
       
   599   |\
       
   600   +---o  11 mBAm-0 simple merge - one way
       
   601   | |/
       
   602   | o  5 b-1: b update
       
   603   | |
       
   604   o |  4 a-2: e -move-> f
       
   605   | |
       
   606   o |  3 a-1: d -move-> e
       
   607   |/
       
   608   o  2 i-2: c -move-> d
       
   609   |
       
   610   o  1 i-1: a -move-> c
       
   611   |
       
   612   o  0 i-0 initial commit: a b h
       
   613   
       
   614 
       
   615   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
       
   616   A f
       
   617     d
       
   618   R d
       
   619   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
       
   620   A f
       
   621     d
       
   622   R d
       
   623   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
       
   624   M b
       
   625   $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
       
   626   M b
       
   627   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
       
   628   M b
       
   629   A f
       
   630     d
       
   631   R d
       
   632   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
       
   633   M b
       
   634   A f
       
   635     d
       
   636   R d
       
   637   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
       
   638   M b
       
   639   A f
       
   640     a
       
   641   R a
       
   642   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
       
   643   M b
       
   644   A f
       
   645     a
       
   646   R a
       
   647 
       
   648 merging with the side having a delete
       
   649 -------------------------------------
       
   650 
       
   651 case summary:
       
   652 - one with change to an unrelated file
       
   653 - one deleting the change
       
   654 and recreate an unrelated file after the merge
       
   655 
       
   656   $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
       
   657   o  16 mCBm-1 re-add d
       
   658   |
       
   659   o    15 mCBm-0 simple merge - the other way
       
   660   |\
       
   661   | | o  14 mBCm-1 re-add d
       
   662   | | |
       
   663   +---o  13 mBCm-0 simple merge - one way
       
   664   | |/
       
   665   | o  6 c-1 delete d
       
   666   | |
       
   667   o |  5 b-1: b update
       
   668   |/
       
   669   o  2 i-2: c -move-> d
       
   670   |
       
   671   o  1 i-1: a -move-> c
       
   672   |
       
   673   o  0 i-0 initial commit: a b h
       
   674   
       
   675 - comparing from the merge
       
   676 
       
   677   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
       
   678   R d
       
   679   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
       
   680   R d
       
   681   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
       
   682   M b
       
   683   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
       
   684   M b
       
   685   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
       
   686   M b
       
   687   R d
       
   688   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
       
   689   M b
       
   690   R d
       
   691   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
       
   692   M b
       
   693   R a
       
   694   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
       
   695   M b
       
   696   R a
       
   697 
       
   698 - comparing with the merge children re-adding the file
       
   699 
       
   700   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
       
   701   M d
       
   702   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
       
   703   M d
       
   704   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
       
   705   M b
       
   706   A d
       
   707   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
       
   708   M b
       
   709   A d
       
   710   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
       
   711   M b
       
   712   M d
       
   713   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
       
   714   M b
       
   715   M d
       
   716   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
       
   717   M b
       
   718   A d
       
   719   R a
       
   720   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
       
   721   M b
       
   722   A d
       
   723   R a
       
   724 
       
   725 Comparing with a merge re-adding the file afterward
       
   726 ---------------------------------------------------
       
   727 
       
   728 Merge:
       
   729 - one with change to an unrelated file
       
   730 - one deleting and recreating the change
       
   731 
       
   732   $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
       
   733   o    18 mDBm-0 simple merge - the other way
       
   734   |\
       
   735   +---o  17 mBDm-0 simple merge - one way
       
   736   | |/
       
   737   | o  8 d-2 re-add d
       
   738   | |
       
   739   | o  7 d-1 delete d
       
   740   | |
       
   741   o |  5 b-1: b update
       
   742   |/
       
   743   o  2 i-2: c -move-> d
       
   744   |
       
   745   o  1 i-1: a -move-> c
       
   746   |
       
   747   o  0 i-0 initial commit: a b h
       
   748   
       
   749   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
       
   750   M d
       
   751   $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
       
   752   M d
       
   753   $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
       
   754   M b
       
   755   $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
       
   756   M b
       
   757   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
       
   758   M b
       
   759   M d
       
   760   $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
       
   761   M b
       
   762   M d
       
   763 
       
   764 The bugs makes recorded copy is different depending of where we started the merge from since
       
   765 
       
   766   $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644   d'
       
   767   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   768   $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644   d'
       
   769   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   770 
       
   771   $ hg manifest --debug --rev 'desc("d-2")' | grep '644   d'
       
   772   b004912a8510032a0350a74daa2803dadfb00e12 644   d
       
   773   $ hg manifest --debug --rev 'desc("b-1")' | grep '644   d'
       
   774   169be882533bc917905d46c0c951aa9a1e288dcf 644   d (no-changeset !)
       
   775   b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644   d (changeset !)
       
   776   $ hg debugindex d | head -n 4
       
   777      rev linkrev nodeid       p1           p2
       
   778        0       2 169be882533b 000000000000 000000000000 (no-changeset !)
       
   779        0       2 b789fdd96dc2 000000000000 000000000000 (changeset !)
       
   780        1       8 b004912a8510 000000000000 000000000000
       
   781        2      22 4a067cf8965d 000000000000 000000000000 (no-changeset !)
       
   782        2      22 fe6f8b4f507f 000000000000 000000000000 (changeset !)
       
   783 
       
   784 Log output should not include a merge commit as it did not happen
       
   785 
       
   786 #if no-changeset
       
   787   $ hg log -Gfr 'desc("mBDm-0")' d
       
   788   o  8 d-2 re-add d
       
   789   |
       
   790   ~
       
   791 #else
       
   792   $ hg log -Gfr 'desc("mBDm-0")' d
       
   793   o  8 d-2 re-add d
       
   794   |
       
   795   ~
       
   796 #endif
       
   797 
       
   798 #if no-changeset
       
   799   $ hg log -Gfr 'desc("mDBm-0")' d
       
   800   o  8 d-2 re-add d
       
   801   |
       
   802   ~
       
   803 #else
       
   804   $ hg log -Gfr 'desc("mDBm-0")' d
       
   805   o  8 d-2 re-add d
       
   806   |
       
   807   ~
       
   808 #endif
       
   809 
       
   810   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
       
   811   M b
       
   812   A d
       
   813   R a
       
   814   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
       
   815   M b
       
   816   A d
       
   817   R a
       
   818 
       
   819 
       
   820 Comparing with a merge with colliding rename
       
   821 --------------------------------------------
       
   822 
       
   823 - the "e-" branch renaming b to f (through 'g')
       
   824 - the "a-" branch renaming d to f (through e)
       
   825 
       
   826   $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
       
   827   o    20 mEAm-0 simple merge - the other way
   462   |\
   828   |\
   463   +---o  19 mAEm-0 simple merge - one way
   829   +---o  19 mAEm-0 simple merge - one way
   464   | |/
   830   | |/
   465   | o  10 e-2 g -move-> f
   831   | o  10 e-2 g -move-> f
   466   | |
   832   | |
   579 
   945 
   580 Merge:
   946 Merge:
   581 - one with change to an unrelated file (b)
   947 - one with change to an unrelated file (b)
   582 - one overwriting a file (d) with a rename (from h to i to d)
   948 - one overwriting a file (d) with a rename (from h to i to d)
   583 
   949 
   584   $ hg up 'desc("i-2")'
       
   585   2 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   586   $ hg mv h i
       
   587   $ hg commit -m "f-1: rename h -> i"
       
   588   created new head
       
   589   $ hg mv --force i d
       
   590   $ hg commit -m "f-2: rename i -> d"
       
   591   $ hg debugindex d
       
   592      rev linkrev nodeid       p1           p2
       
   593        0       2 169be882533b 000000000000 000000000000 (no-changeset !)
       
   594        0       2 b789fdd96dc2 000000000000 000000000000 (changeset !)
       
   595        1       8 b004912a8510 000000000000 000000000000
       
   596        2      22 4a067cf8965d 000000000000 000000000000 (no-changeset !)
       
   597        2      22 fe6f8b4f507f 000000000000 000000000000 (changeset !)
       
   598   $ hg up 'desc("b-1")'
       
   599   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   600   $ hg merge 'desc("f-2")'
       
   601   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   602   (branch merge, don't forget to commit)
       
   603   $ hg ci -m 'mBFm-0 simple merge - one way'
       
   604   $ hg up 'desc("f-2")'
       
   605   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   606   $ hg merge 'desc("b-1")'
       
   607   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   608   (branch merge, don't forget to commit)
       
   609   $ hg ci -m 'mFBm-0 simple merge - the other way'
       
   610   created new head
       
   611   $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
   950   $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
   612   @    24 mFBm-0 simple merge - the other way
   951   o    24 mFBm-0 simple merge - the other way
   613   |\
   952   |\
   614   +---o  23 mBFm-0 simple merge - one way
   953   +---o  23 mBFm-0 simple merge - one way
   615   | |/
   954   | |/
   616   | o  22 f-2: rename i -> d
   955   | o  22 f-2: rename i -> d
   617   | |
   956   | |
   696 - one deleting and recreating the file
  1035 - one deleting and recreating the file
   697 
  1036 
   698 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
  1037 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
   699 consider history and rename on both branch of the merge.
  1038 consider history and rename on both branch of the merge.
   700 
  1039 
   701   $ hg up 'desc("i-2")'
       
   702   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   703   $ echo "some update" >> d
       
   704   $ hg commit -m "g-1: update d"
       
   705   created new head
       
   706   $ hg up 'desc("d-2")'
       
   707   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   708   $ hg merge 'desc("g-1")' --tool :union
       
   709   merging d
       
   710   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   711   (branch merge, don't forget to commit)
       
   712   $ hg ci -m 'mDGm-0 simple merge - one way'
       
   713   $ hg up 'desc("g-1")'
       
   714   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   715   $ hg merge 'desc("d-2")' --tool :union
       
   716   merging d
       
   717   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   718   (branch merge, don't forget to commit)
       
   719   $ hg ci -m 'mGDm-0 simple merge - the other way'
       
   720   created new head
       
   721   $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
  1040   $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
   722   @    27 mGDm-0 simple merge - the other way
  1041   o    27 mGDm-0 simple merge - the other way
   723   |\
  1042   |\
   724   +---o  26 mDGm-0 simple merge - one way
  1043   +---o  26 mDGm-0 simple merge - one way
   725   | |/
  1044   | |/
   726   | o  25 g-1: update d
  1045   | o  25 g-1: update d
   727   | |
  1046   | |
   825 | In this case, the merge get conflicting information since on one side we have
  1144 | In this case, the merge get conflicting information since on one side we have
   826 | "a -> c -> d". and one the other one we have "h -> i -> d".
  1145 | "a -> c -> d". and one the other one we have "h -> i -> d".
   827 |
  1146 |
   828 | The current code arbitrarily pick one side
  1147 | The current code arbitrarily pick one side
   829 
  1148 
   830   $ hg up 'desc("f-2")'
       
   831   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   832   $ hg merge 'desc("g-1")' --tool :union
       
   833   merging d
       
   834   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   835   (branch merge, don't forget to commit)
       
   836   $ hg ci -m 'mFGm-0 simple merge - one way'
       
   837   created new head
       
   838   $ hg up 'desc("g-1")'
       
   839   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   840   $ hg merge 'desc("f-2")' --tool :union
       
   841   merging d
       
   842   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   843   (branch merge, don't forget to commit)
       
   844   $ hg ci -m 'mGFm-0 simple merge - the other way'
       
   845   created new head
       
   846   $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
  1149   $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
   847   @    29 mGFm-0 simple merge - the other way
  1150   o    29 mGFm-0 simple merge - the other way
   848   |\
  1151   |\
   849   +---o  28 mFGm-0 simple merge - one way
  1152   +---o  28 mFGm-0 simple merge - one way
   850   | |/
  1153   | |/
   851   | o  25 g-1: update d
  1154   | o  25 g-1: update d
   852   | |
  1155   | |
   921   ~
  1224   ~
   922 #endif
  1225 #endif
   923 
  1226 
   924 #if no-changeset
  1227 #if no-changeset
   925   $ hg log -Gfr 'desc("mGFm-0")' d
  1228   $ hg log -Gfr 'desc("mGFm-0")' d
   926   @    29 mGFm-0 simple merge - the other way
  1229   o    29 mGFm-0 simple merge - the other way
   927   |\
  1230   |\
   928   | o  25 g-1: update d
  1231   | o  25 g-1: update d
   929   | |
  1232   | |
   930   o |  22 f-2: rename i -> d
  1233   o |  22 f-2: rename i -> d
   931   | |
  1234   | |
   937   |
  1240   |
   938   o  0 i-0 initial commit: a b h
  1241   o  0 i-0 initial commit: a b h
   939   
  1242   
   940 #else
  1243 #else
   941   $ hg log -Gfr 'desc("mGFm-0")' d
  1244   $ hg log -Gfr 'desc("mGFm-0")' d
   942   @    29 mGFm-0 simple merge - the other way
  1245   o    29 mGFm-0 simple merge - the other way
   943   |\
  1246   |\
   944   | o  25 g-1: update d
  1247   | o  25 g-1: update d
   945   | |
  1248   | |
   946   o |  22 f-2: rename i -> d
  1249   o |  22 f-2: rename i -> d
   947   |/
  1250   |/
   960 - the merge keep the modified version of the file (canceling the delete)
  1263 - the merge keep the modified version of the file (canceling the delete)
   961 
  1264 
   962 In this case, the file keep on living after the merge. So we should not drop its
  1265 In this case, the file keep on living after the merge. So we should not drop its
   963 copy tracing chain.
  1266 copy tracing chain.
   964 
  1267 
   965   $ hg up 'desc("c-1")'
       
   966   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   967   $ hg merge 'desc("g-1")'
       
   968   file 'd' was deleted in local [working copy] but was modified in other [merge rev].
       
   969   You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
       
   970   What do you want to do? u
       
   971   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   972   use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
       
   973   [1]
       
   974   $ hg resolve -t :other d
       
   975   (no more unresolved files)
       
   976   $ hg ci -m "mCGm-0"
       
   977   created new head
       
   978 
       
   979   $ hg up 'desc("g-1")'
       
   980   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   981   $ hg merge 'desc("c-1")'
       
   982   file 'd' was deleted in other [merge rev] but was modified in local [working copy].
       
   983   You can use (c)hanged version, (d)elete, or leave (u)nresolved.
       
   984   What do you want to do? u
       
   985   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   986   use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
       
   987   [1]
       
   988   $ hg resolve -t :local d
       
   989   (no more unresolved files)
       
   990   $ hg ci -m "mGCm-0"
       
   991   created new head
       
   992 
       
   993   $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
  1268   $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
   994   @    31 mGCm-0
  1269   o    31 mGCm-0
   995   |\
  1270   |\
   996   +---o  30 mCGm-0
  1271   +---o  30 mCGm-0
   997   | |/
  1272   | |/
   998   | o  25 g-1: update d
  1273   | o  25 g-1: update d
   999   | |
  1274   | |
  1033 - the merge actively restore the file to the same content.
  1308 - the merge actively restore the file to the same content.
  1034 
  1309 
  1035 In this case, the file keep on living after the merge. So we should not drop its
  1310 In this case, the file keep on living after the merge. So we should not drop its
  1036 copy tracing chain.
  1311 copy tracing chain.
  1037 
  1312 
  1038   $ hg up 'desc("c-1")'
       
  1039   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
  1040   $ hg merge 'desc("b-1")'
       
  1041   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
  1042   (branch merge, don't forget to commit)
       
  1043   $ hg revert --rev 'desc("b-1")' d
       
  1044   $ hg ci -m "mCB-revert-m-0"
       
  1045   created new head
       
  1046 
       
  1047   $ hg up 'desc("b-1")'
       
  1048   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
  1049   $ hg merge 'desc("c-1")'
       
  1050   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
  1051   (branch merge, don't forget to commit)
       
  1052   $ hg revert --rev 'desc("b-1")' d
       
  1053   $ hg ci -m "mBC-revert-m-0"
       
  1054   created new head
       
  1055 
       
  1056   $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
  1313   $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
  1057   @    33 mBC-revert-m-0
  1314   o    33 mBC-revert-m-0
  1058   |\
  1315   |\
  1059   +---o  32 mCB-revert-m-0
  1316   +---o  32 mCB-revert-m-0
  1060   | |/
  1317   | |/
  1061   | o  6 c-1 delete d
  1318   | o  6 c-1 delete d
  1062   | |
  1319   | |