# HG changeset patch # User David Schleimer # Date 2013-02-08 13:36:08 # Node ID 4fb92f14a97a69d88f1081cacab0f0ca846417cd # Parent 7e6946ed57565dd01124eedc978f092e9c9c2b83 commit: factor out post-commit cleanup into workingctx This pulls some of the logic for the cleanup that needs to happen after a commit has been made otu of localrepo.commit and into workingctx. This is part of a larger refactoring effort that will eventually allow us to perform some types of merges in-memory. diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1138,6 +1138,22 @@ class workingctx(changectx): finally: wlock.release() + def markcommitted(self, node): + """Perform post-commit cleanup necessary after commiting this workingctx + + Specifically, this updates backing stores this working context + wraps to reflect the fact that the changes reflected by this + workingctx have been committed. For example, it marks + modified and added files as normal in the dirstate. + + """ + + for f in self.modified() + self.added(): + self._repo.dirstate.normal(f) + for f in self.removed(): + self._repo.dirstate.drop(f) + self._repo.dirstate.setparents(node) + def dirs(self): return set(self._repo.dirstate.dirs()) diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1279,11 +1279,7 @@ class localrepository(object): # update bookmarks, dirstate and mergestate bookmarks.update(self, [p1, p2], ret) - for f in changes[0] + changes[1]: - self.dirstate.normal(f) - for f in changes[2]: - self.dirstate.drop(f) - self.dirstate.setparents(ret) + cctx.markcommitted(ret) ms.reset() finally: wlock.release()