diff --git a/mercurial/metadata.py b/mercurial/metadata.py --- a/mercurial/metadata.py +++ b/mercurial/metadata.py @@ -321,12 +321,12 @@ β”‚ (Some, None) β”‚ OR β”‚πŸ„» Deleted β”‚ ΓΈ β”‚ ΓΈ β”‚ β”‚ β”‚πŸ„· Deleted[1] β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ - β”‚ β”‚πŸ„Έ No Changes β”‚ β”‚ β”‚ β”‚ - β”‚ (None, Some) β”‚ OR β”‚ ΓΈ β”‚πŸ„Ό Added β”‚πŸ„½ Merged β”‚ + β”‚ β”‚πŸ„Έ No Changes β”‚ β”‚ β”‚ πŸ„½ Touched β”‚ + β”‚ (None, Some) β”‚ OR β”‚ ΓΈ β”‚πŸ„Ό Added β”‚OR πŸ…€ Salvaged β”‚ β”‚ β”‚πŸ„Ή Salvaged[2]β”‚ β”‚ (copied?) β”‚ (copied?) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ - β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ - β”‚ (Some, Some) β”‚πŸ„Ί No Changes β”‚ ΓΈ β”‚πŸ„Ύ Merged β”‚πŸ„Ώ Merged β”‚ + β”‚ β”‚ β”‚ β”‚ πŸ„Ύ Touched β”‚ β”‚ + β”‚ (Some, Some) β”‚πŸ„Ί No Changes β”‚ ΓΈ β”‚OR πŸ… Salvaged β”‚πŸ„Ώ Merged β”‚ β”‚ β”‚ [3] β”‚ β”‚ (copied?) β”‚ (copied?) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ @@ -453,8 +453,16 @@ # case πŸ„» β€” both deleted the file. md.mark_removed(filename) elif d1[1][0] is not None and d2[1][0] is not None: - # case πŸ„½ πŸ„Ύ πŸ„Ώ - md.mark_merged(filename) + if d1[0][0] is None or d2[0][0] is None: + if any(_find(ma, filename) is not None for ma in mas): + # case πŸ…€ or πŸ… + md.mark_salvaged(filename) + else: + # case πŸ„½ πŸ„Ύ : touched + md.mark_touched(filename) + else: + # case πŸ„Ώ : merged + md.mark_merged(filename) copy_candidates.append(filename) else: # Impossible case, the post-merge file status cannot be None on diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t --- a/tests/test-copies-chain-merge.t +++ b/tests/test-copies-chain-merge.t @@ -1985,29 +1985,13 @@ ##### revision "mCB-change-m-0 merge explicitely revive deleted file - B side" ##### 1 sidedata entries entry-0014 size 14 - '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' (no-upgraded no-upgraded-parallel !) - salvaged : d, ; (no-upgraded no-upgraded-parallel !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded known-bad-output !) - merged : d, ; (upgraded known-bad-output !) - '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded missing-correct-output !) - salvaged : d, ; (upgraded missing-correct-output !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded-parallel known-bad-output !) - merged : d, ; (upgraded-parallel known-bad-output !) - '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded-parallel missing-correct-output !) - salvaged : d, ; (upgraded-parallel missing-correct-output !) + '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' + salvaged : d, ; ##### revision "mBC-change-m-0 merge explicitely revive deleted file - B side" ##### 1 sidedata entries entry-0014 size 14 - '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' (no-upgraded no-upgraded-parallel !) - salvaged : d, ; (no-upgraded no-upgraded-parallel !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded known-bad-output !) - merged : d, ; (upgraded known-bad-output !) - '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded missing-correct-output !) - salvaged : d, ; (upgraded missing-correct-output !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded-parallel known-bad-output !) - merged : d, ; (upgraded-parallel known-bad-output !) - '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' (upgraded-parallel missing-correct-output !) - salvaged : d, ; (upgraded-parallel missing-correct-output !) + '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d' + salvaged : d, ; ##### revision "j-1" ##### 1 sidedata entries entry-0014 size 24 @@ -2029,21 +2013,13 @@ ##### revision "mEA,Jm" ##### 1 sidedata entries entry-0014 size 24 - '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' (no-upgraded no-upgraded-parallel !) - touched : unrelated-j, ; (no-upgraded no-upgraded-parallel !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' (upgraded known-bad-output !) - merged : unrelated-j, ; (upgraded known-bad-output !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' (upgraded-parallel known-bad-output !) - merged : unrelated-j, ; (upgraded-parallel known-bad-output !) + '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' + touched : unrelated-j, ; ##### revision "mJ,EAm" ##### 1 sidedata entries entry-0014 size 24 - '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' (no-upgraded no-upgraded-parallel !) - touched : unrelated-j, ; (no-upgraded no-upgraded-parallel !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' (upgraded known-bad-output !) - merged : unrelated-j, ; (upgraded known-bad-output !) - '\x00\x00\x00\x01\x08\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' (upgraded-parallel known-bad-output !) - merged : unrelated-j, ; (upgraded-parallel known-bad-output !) + '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j' + touched : unrelated-j, ; ##### revision "s-1" ##### 1 sidedata entries entry-0014 size 24 @@ -3558,9 +3534,7 @@ $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-change-m-0")' M b A d - a (no-compatibility no-changeset no-upgraded no-upgraded-parallel !) - a (upgraded missing-correct-output !) - a (upgraded-parallel missing-correct-output !) + a (no-compatibility no-changeset !) A t p R a