copies: properly copies parent dictionary before updating it
This enforces the copy on write logic. Otherwise independant unrelated branches
could affected each other.
More testing of these case are coming, but I need that code landed to unlock
other performance work in parallel.
Differential Revision: https://phab.mercurial-scm.org/D9419
--- a/mercurial/copies.py Mon Nov 30 14:07:23 2020 +0100
+++ b/mercurial/copies.py Fri Nov 20 10:51:07 2020 +0100
@@ -380,9 +380,14 @@
# changeset based copies. It was made without regards with
# potential filelog related behavior.
if parent == 1:
+ if newcopies is copies:
+ newcopies = copies.copy()
minor, major = othercopies, newcopies
else:
- minor, major = newcopies, othercopies
+ # we do not know if the other dict is a copy or not, so we
+ # need to blindly copy it. Future change should make this
+ # unnecessary.
+ minor, major = newcopies, othercopies.copy()
copies = _merge_copies_dict(minor, major, isancestor, changes)
all_copies[c] = copies