D6561: copies: simplify merging of copy dicts on merge commits
Yuya Nishihara
yuya at tcha.org
Tue Jun 25 19:25:48 EDT 2019
> 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]
Are we sure there's no `copies` alias held by later `work`?
I'm just asking because we've optimized some `copies.copy()`s away at
5ceb91136ebe. I don't know if it's safe or not to mutate `copies` at this
point.
More information about the Mercurial-devel
mailing list