# HG changeset patch # User Pierre-Yves David # Date 2021-09-30 16:00:39 # Node ID d4e715d2be0b33bf7e66a0860bd67f2e0585290a # Parent dcd97b082b3b7259c0f9153c14e7a1029646e108 dirstate: remove a update_file's special case for tracked file with p2 data This case was fishy and can be dealt with by passing more accurate data a higher level. This clarify the API and prepare for a larger rework of the data we feeds to the dirstate. diff --git a/mercurial/dirstatemap.py b/mercurial/dirstatemap.py --- a/mercurial/dirstatemap.py +++ b/mercurial/dirstatemap.py @@ -226,16 +226,7 @@ class dirstatemap(object): elif (p1_tracked or p2_tracked) and not wc_tracked: pass elif clean_p2 and wc_tracked: - if p1_tracked or self.get(filename) is not None: - # XXX the `self.get` call is catching some case in - # `test-merge-remove.t` where the file is tracked in p1, the - # p1_tracked argument is False. - # - # In addition, this seems to be a case where the file is marked - # as merged without actually being the result of a merge - # action. So thing are not ideal here. - merged = True - clean_p2 = False + pass elif not p1_tracked and p2_tracked and wc_tracked: clean_p2 = True elif possibly_dirty: diff --git a/mercurial/mergestate.py b/mercurial/mergestate.py --- a/mercurial/mergestate.py +++ b/mercurial/mergestate.py @@ -796,12 +796,15 @@ def recordupdates(repo, actions, branchm for f, args, msg in actions.get(ACTION_GET, []): if branchmerge: # tracked in p1 can be True also but update_file should not care + old_entry = repo.dirstate.get_entry(f) + p1_tracked = old_entry.any_tracked and not old_entry.added repo.dirstate.update_file( f, - p1_tracked=False, + p1_tracked=p1_tracked, p2_tracked=True, wc_tracked=True, - clean_p2=True, + clean_p2=not p1_tracked, + merged=p1_tracked, ) else: parentfiledata = getfiledata[f] if getfiledata else None