diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1701,12 +1701,8 @@ % uipath(f) ) rejected.append(f) - elif ds[f] in b'amn': + elif not ds.set_tracked(f): ui.warn(_(b"%s already tracked!\n") % uipath(f)) - elif ds[f] == b'r': - ds.normallookup(f) - else: - ds.add(f) return rejected def forget(self, files, prefix=b""): diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -85,7 +85,7 @@ def requires_no_parents_change(func): def wrap(self, *args, **kwargs): - if not self.pendingparentchange(): + if self.pendingparentchange(): msg = 'calling `%s` inside of a parentchange context' msg %= func.__name__ raise error.ProgrammingError(msg)