> 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. _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel