Mercurial > hg
changeset 42519:907cef396635
copies: simplify merging of copy dicts on merge commits
After we removed some filtering in 35d674a3d5db (copies: don't filter
out copy targets created on other side of merge commit, 2019-04-18),
we will always include all entries from "copies1", so we can simplify
the code based on that.
Differential Revision: https://phab.mercurial-scm.org/D6561
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 20 Jun 2019 10:58:14 -0700 |
parents | c7104896ec42 |
children | 898b36f74f75 |
files | mercurial/copies.py |
diffstat | 1 files changed, 4 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/copies.py Thu Jun 20 10:42:16 2019 -0700 +++ b/mercurial/copies.py Thu Jun 20 10:58:14 2019 -0700 @@ -272,25 +272,19 @@ heapq.heapify(work) alwaysmatch = match.always() while work: - r, i1, copies1 = heapq.heappop(work) + r, i1, copies = heapq.heappop(work) if work and work[0][0] == r: # We are tracing copies from both parents r, i2, copies2 = heapq.heappop(work) - copies = {} - allcopies = set(copies1) | set(copies2) - for dst in allcopies: + for dst, src in copies2.items(): # Unlike when copies are stored in the filelog, we consider # it a copy even if the destination already existed on the # other branch. It's simply too expensive to check if the # file existed in the manifest. - if dst in copies1: - # If it was copied on the p1 side, mark it as copied from + if dst not in copies: + # If it was copied on the p1 side, leave it as copied from # that side, even if it was also copied on the p2 side. - copies[dst] = copies1[dst] - else: copies[dst] = copies2[dst] - else: - copies = copies1 if r == b.rev(): _filter(a, b, copies) return copies