Mercurial > hg-stable
comparison mercurial/copies.py @ 44788:d452acc8cce8 stable
flags: account for flag change when tracking rename relevant to merge
There are some logic filtering rename to the one relevant to the merge. That
logic was oblivious of flag change, leading to exec flag being dropped when
merged with a renamed.
There are two others bugs affecting this scenario. This patch fix the was where
there is not modification involved except for the flag change. Fixes for the
other bug are coming in later changesets.
Differential Revision: https://phab.mercurial-scm.org/D8531
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 16 May 2020 20:37:56 +0200 |
parents | 30862e226339 |
children | 61719b9658b1 |
comparison
equal
deleted
inserted
replaced
44787:9438c84d1dce | 44788:d452acc8cce8 |
---|---|
532 elif src not in mb: | 532 elif src not in mb: |
533 # Work around the "short-circuit to avoid issues with merge states" | 533 # Work around the "short-circuit to avoid issues with merge states" |
534 # thing in pathcopies(): pathcopies(x, y) can return a copy where the | 534 # thing in pathcopies(): pathcopies(x, y) can return a copy where the |
535 # destination doesn't exist in y. | 535 # destination doesn't exist in y. |
536 pass | 536 pass |
537 elif m2[src] != mb[src]: | 537 elif mb[src] != m2[src] and not _related(c2[src], base[src]): |
538 if not _related(c2[src], base[src]): | 538 return |
539 return | 539 elif mb[src] != m2[src] or mb.flags(src) != m2.flags(src): |
540 # modified on side 2 | 540 # modified on side 2 |
541 for dst in dsts1: | 541 for dst in dsts1: |
542 copy[dst] = src | 542 copy[dst] = src |
543 | 543 |
544 | 544 |