Skip to content
Snippets Groups Projects
Commit c8c236a3173d authored by Pierre-Yves David's avatar Pierre-Yves David :octopus:
Browse files

copies: stop attempt to avoid extra dict copies around branching

In the python code, we attempt to avoid unnecessary dict copies when gathering
copy information. However that logic is wobbly and I keep running into case
where independent branches affects each others.

With the current code we can't ensure we are the only "user" of dict when
dealing with merge.

This caused havoc in the next series on tests I am about to introduce.

So for now I am disabling the faulty optimisation. I believe we will need a
dedicated overlay to deal with the "copy on write logic" to have something
correct. I am also hoping to find time to build dedicated test case for this
category of problem instead of relying on side effect in other tests. However
for now I am focussing on another issue.

Differential Revision: https://phab.mercurial-scm.org/D9608
parent 8f7f3558b571
No related branches found
No related tags found
No related merge requests found
......@@ -383,9 +383,11 @@
if copies is None:
# this is a root
copies = {}
newcopies = copies
newcopies = copies = {}
elif remaining_children:
newcopies = copies.copy()
else:
newcopies = copies
# chain the data in the edge with the existing data
if changes is not None:
childcopies = {}
......@@ -403,8 +405,6 @@
newcopies[dest] = (current_rev, source)
assert newcopies is not copies
if changes.removed:
if newcopies is copies:
newcopies = copies.copy()
for f in changes.removed:
if f in newcopies:
if newcopies is copies:
......@@ -417,9 +417,6 @@
# that child). See comment below for details.
if current_copies is None:
current_copies = newcopies
elif current_copies is newcopies:
# nothing to merge:
pass
else:
# we are the second parent to work on c, we need to merge our
# work with the other.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment