tests/test-copies-chain-merge.t
changeset 46554 664bee002d1a
parent 46553 3aef76c3fd38
child 46555 46205a478a08
equal deleted inserted replaced
46553:3aef76c3fd38 46554:664bee002d1a
  1017   | o  g-1: update d
  1017   | o  g-1: update d
  1018   | |
  1018   | |
  1019   o |  f-2: rename i -> d
  1019   o |  f-2: rename i -> d
  1020   | |
  1020   | |
  1021   o |  f-1: rename h -> i
  1021   o |  f-1: rename h -> i
       
  1022   |/
       
  1023   o  i-2: c -move-> d
       
  1024   |
       
  1025   o  i-1: a -move-> c
       
  1026   |
       
  1027   o  i-0 initial commit: a b h
       
  1028   
       
  1029 
       
  1030 Subcase: chaining conflicting rename resolution, with extra change during the merge
       
  1031 ```````````````````````````````````````````````````````````````````````````````````
       
  1032 
       
  1033 The "mEA-change-m-0" and "mAE-change-m-0" case create a rename tracking conflict on file 'f'. We
       
  1034 add more change on the respective branch and merge again. These second merge
       
  1035 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
       
  1036 about that file should stay unchanged.
       
  1037 
       
  1038   $ case_desc="chained merges (conflict+change -> simple) - same content on both branch in the initial merge"
       
  1039 
       
  1040 
       
  1041 (merge variant 1)
       
  1042 
       
  1043   $ hg up 'desc("mAE-change-m")'
       
  1044   2 files updated, 0 files merged, 3 files removed, 0 files unresolved
       
  1045   $ hg merge 'desc("k-1")'
       
  1046   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
  1047   (branch merge, don't forget to commit)
       
  1048   $ hg ci -m "mAE-change,Km: $case_desc"
       
  1049 
       
  1050 (merge variant 2)
       
  1051 
       
  1052   $ hg up 'desc("k-1")'
       
  1053   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
  1054 
       
  1055   $ hg merge 'desc("mAE-change-m")'
       
  1056   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
  1057   (branch merge, don't forget to commit)
       
  1058   $ hg ci -m "mK,AE-change-m: $case_desc"
       
  1059   created new head
       
  1060 
       
  1061 (merge variant 3)
       
  1062 
       
  1063   $ hg up 'desc("mEA-change-m")'
       
  1064   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
  1065   $ hg merge 'desc("j-1")'
       
  1066   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
  1067   (branch merge, don't forget to commit)
       
  1068   $ hg ci -m "mEA-change,Jm: $case_desc"
       
  1069 
       
  1070 (merge variant 4)
       
  1071 
       
  1072   $ hg up 'desc("j-1")'
       
  1073   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
  1074   $ hg merge 'desc("mEA-change-m")'
       
  1075   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
  1076   (branch merge, don't forget to commit)
       
  1077   $ hg ci -m "mJ,EA-change-m: $case_desc"
       
  1078   created new head
       
  1079 
       
  1080 
       
  1081   $ hg log -G --rev '::(desc("mAE-change,Km") + desc("mK,AE-change-m") + desc("mEA-change,Jm") + desc("mJ,EA-change-m"))'
       
  1082   @    mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
       
  1083   |\
       
  1084   +---o  mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
       
  1085   | |/
       
  1086   | | o    mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
       
  1087   | | |\
       
  1088   | | +---o  mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
       
  1089   | | | |/
       
  1090   | | | o  k-1: unrelated changes (based on "e" changes)
       
  1091   | | | |
       
  1092   | o | |  j-1: unrelated changes (based on the "a" series of changes)
       
  1093   | | | |
       
  1094   o-----+  mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
       
  1095   |/ / /
       
  1096   | o /  mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
       
  1097   |/|/
       
  1098   | o  e-2 g -move-> f
       
  1099   | |
       
  1100   | o  e-1 b -move-> g
       
  1101   | |
       
  1102   o |  a-2: e -move-> f
       
  1103   | |
       
  1104   o |  a-1: d -move-> e
  1022   |/
  1105   |/
  1023   o  i-2: c -move-> d
  1106   o  i-2: c -move-> d
  1024   |
  1107   |
  1025   o  i-1: a -move-> c
  1108   o  i-1: a -move-> c
  1026   |
  1109   |
  1053   j-1: unrelated changes (based on the "a" series of changes)
  1136   j-1: unrelated changes (based on the "a" series of changes)
  1054   k-1: unrelated changes (based on "e" changes)
  1137   k-1: unrelated changes (based on "e" changes)
  1055   l-1: unrelated changes (based on "c" changes)
  1138   l-1: unrelated changes (based on "c" changes)
  1056   mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
  1139   mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
  1057   mAE,Km: chained merges (conflict -> simple) - same content everywhere
  1140   mAE,Km: chained merges (conflict -> simple) - same content everywhere
       
  1141   mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
  1058   mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
  1142   mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
  1059   mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
  1143   mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
  1060   mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
  1144   mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
  1061   mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
  1145   mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
  1062   mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
  1146   mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
  1071   mCGm-0 merge updated/deleted - revive the file (updated content) - one way
  1155   mCGm-0 merge updated/deleted - revive the file (updated content) - one way
  1072   mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
  1156   mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
  1073   mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
  1157   mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
  1074   mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
  1158   mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
  1075   mEA,Jm: chained merges (conflict -> simple) - same content everywhere
  1159   mEA,Jm: chained merges (conflict -> simple) - same content everywhere
       
  1160   mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
  1076   mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
  1161   mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
  1077   mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
  1162   mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
  1078   mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
  1163   mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
  1079   mFG,Om: chained merges (copy-overwrite -> simple) - same content
  1164   mFG,Om: chained merges (copy-overwrite -> simple) - same content
  1080   mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
  1165   mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
  1081   mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
  1166   mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
  1082   mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
  1167   mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
  1083   mGF,Nm: chained merges (copy-overwrite -> simple) - same content
  1168   mGF,Nm: chained merges (copy-overwrite -> simple) - same content
  1084   mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
  1169   mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
  1085   mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
  1170   mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
       
  1171   mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
  1086   mJ,EAm: chained merges (conflict -> simple) - same content everywhere
  1172   mJ,EAm: chained merges (conflict -> simple) - same content everywhere
       
  1173   mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
  1087   mK,AEm: chained merges (conflict -> simple) - same content everywhere
  1174   mK,AEm: chained merges (conflict -> simple) - same content everywhere
  1088   mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
  1175   mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
  1089   mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
  1176   mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
  1090   mN,GFm: chained merges (copy-overwrite -> simple) - same content
  1177   mN,GFm: chained merges (copy-overwrite -> simple) - same content
  1091   mO,FGm: chained merges (copy-overwrite -> simple) - same content
  1178   mO,FGm: chained merges (copy-overwrite -> simple) - same content
  1412   ##### revision "mGF,Nm" #####
  1499   ##### revision "mGF,Nm" #####
  1413   1 sidedata entries
  1500   1 sidedata entries
  1414    entry-0014 size 4
  1501    entry-0014 size 4
  1415     '\x00\x00\x00\x00'
  1502     '\x00\x00\x00\x00'
  1416   ##### revision "mN,GFm" #####
  1503   ##### revision "mN,GFm" #####
       
  1504   1 sidedata entries
       
  1505    entry-0014 size 4
       
  1506     '\x00\x00\x00\x00'
       
  1507   ##### revision "mAE-change,Km" #####
       
  1508   1 sidedata entries
       
  1509    entry-0014 size 4
       
  1510     '\x00\x00\x00\x00'
       
  1511   ##### revision "mK,AE-change-m" #####
       
  1512   1 sidedata entries
       
  1513    entry-0014 size 4
       
  1514     '\x00\x00\x00\x00'
       
  1515   ##### revision "mEA-change,Jm" #####
       
  1516   1 sidedata entries
       
  1517    entry-0014 size 4
       
  1518     '\x00\x00\x00\x00'
       
  1519   ##### revision "mJ,EA-change-m" #####
  1417   1 sidedata entries
  1520   1 sidedata entries
  1418    entry-0014 size 4
  1521    entry-0014 size 4
  1419     '\x00\x00\x00\x00'
  1522     '\x00\x00\x00\x00'
  1420 
  1523 
  1421 #endif
  1524 #endif
  2551     a (filelog !)
  2654     a (filelog !)
  2552     a (missing-correct-output sidedata !)
  2655     a (missing-correct-output sidedata !)
  2553     a (missing-correct-output upgraded !)
  2656     a (missing-correct-output upgraded !)
  2554     h (known-bad-output sidedata !)
  2657     h (known-bad-output sidedata !)
  2555     h (known-bad-output upgraded !)
  2658     h (known-bad-output upgraded !)
       
  2659 
       
  2660 
       
  2661 Subcase: chaining conflicting rename resolution, with extra change during the merge
       
  2662 ```````````````````````````````````````````````````````````````````````````````````
       
  2663 
       
  2664 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
       
  2665 add more change on the respective branch and merge again. These second merge
       
  2666 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
       
  2667 about that file should stay unchanged.
       
  2668 
       
  2669 The result from mAEm is the same for the subsequent merge:
       
  2670 
       
  2671   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m")' f
       
  2672   A f
       
  2673     a (filelog !)
       
  2674     a (sidedata !)
       
  2675     a (upgraded !)
       
  2676 
       
  2677   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
       
  2678   A f
       
  2679     a (filelog !)
       
  2680     a (sidedata !)
       
  2681     a (upgraded !)
       
  2682 
       
  2683   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
       
  2684   A f
       
  2685     a (filelog !)
       
  2686     a (missing-correct-output sidedata !)
       
  2687     a (missing-correct-output upgraded !)
       
  2688     b (known-bad-output sidedata !)
       
  2689     b (known-bad-output upgraded !)
       
  2690 
       
  2691 
       
  2692 The result from mEAm is the same for the subsequent merge:
       
  2693 
       
  2694   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m")' f
       
  2695   A f
       
  2696     a (filelog !)
       
  2697     b (sidedata !)
       
  2698     b (upgraded !)
       
  2699 
       
  2700   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
       
  2701   A f
       
  2702     a (filelog !)
       
  2703     b (sidedata !)
       
  2704     b (upgraded !)
       
  2705 
       
  2706   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
       
  2707   A f
       
  2708     a (filelog !)
       
  2709     b (missing-correct-output sidedata !)
       
  2710     b (missing-correct-output upgraded !)
       
  2711     a (known-bad-output sidedata !)
       
  2712     a (known-bad-output upgraded !)