D6578: copies: document how 'copies' dict instances are reused
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Jun 26 12:20:16 UTC 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
We avoid copying these instances as much as we can, so it's not
obvious what's safe to do with them. This patch tries to explain what
is safe and what is not.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D6578
AFFECTED FILES
mercurial/copies.py
CHANGE DETAILS
diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -268,6 +268,10 @@
# 'work' contains 3-tuples of a (revision number, parent number, copies).
# The parent number is only used for knowing which parent the copies dict
# came from.
+ # NOTE: To reduce costly copying the 'copies' dicts, we reuse the same
+ # instance for *one* of the child nodes (the last one). Once an instance
+ # has been put on the queue, it is thus no longer safe to modify it.
+ # Conversely, it *is* safe to modify an instance popped off the queue.
work = [(r, 1, {}) for r in roots]
heapq.heapify(work)
alwaysmatch = match.always()
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list