HomePhabricator

merge: make applyupdates() not mutate mresult argument

Authored by martinvonz.

Description

merge: make applyupdates() not mutate mresult argument

We have an extension at work that overrides merge.applyupdates() to
make it skip some writes and instead instruct the virtual filesystem
we use to get a different version. That override doesn't work
correctly when doing hg co -m and there's a modified file in the
dirstate that's deleted in the destination. That's because
applyupdates() mutates its mresult argument and our extension had
passed in a modified copied of mresult to the overridden function,
which resulted in the mutation not having any effect. This patch fixes
that by letting the caller (i.e. merge._update()) update mresult
with the extra actions instead. Besides fixing our internal extension,
that seems cleaner to me anyway (better to not mutate mresult only
in some cases and we can skip some of the logic if we're not going to
update the dirstate anyway).

Differential Revision: https://phab.mercurial-scm.org/D10830