D1242: overlayworkingctx: add ``tomemctx()`` and ``commit()``
phillco (Phil Cohen)
phabricator at mercurial-scm.org
Thu Dec 7 21:23:22 UTC 2017
phillco updated this revision to Diff 4188.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D1242?vs=3115&id=4188
REVISION DETAIL
https://phab.mercurial-scm.org/D1242
AFFECTED FILES
mercurial/context.py
CHANGE DETAILS
diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -2213,6 +2213,52 @@
self._path)
return self._wrappedctx[path].size()
+ def tomemctx(self, text, branch=None, extra=None, date=None, parents=None, user=None, editor=None):
+ """Converts this ``overlayworkingctx`` into a ``memctx`` ready to be
+ committed."""
+ if parents == None:
+ parents = self._wrappedctx.parents()
+ if len(parents) == 1:
+ parents = [parents[0], None]
+
+ # Covert parents to ``commitctxs``.
+ if parents[1] is None:
+ parents = (self._repo[parents[0]], None)
+ else:
+ parents = (self._repo[parents[0]], self._repo[parents[1]])
+
+ files = self._cache.keys()
+ def getfile(repo, memctx, path):
+ if self._cache[path]['exists']:
+ return memfilectx(repo, path,
+ self._cache[path]['data'],
+ 'l' in self._cache[path]['flags'],
+ 'x' in self._cache[path]['flags'],
+ self._cache[path]['copied'],
+ memctx)
+ else:
+ # Returning None, but including the path in `files`, is
+ # necessary for memctx to register a deletion.
+ return None
+ return memctx(self._repo, parents, text, files, getfile, date=date,
+ extra=extra, user=user, branch=branch, editor=editor)
+
+ def commit(self, text, parents=None, date=None, extra=None, editor=None,
+ user=None, branch=None):
+ allowemptycommit = (len(self._cache) or
+ self._repo.ui.configbool('ui', 'allowemptycommit'))
+ if not allowemptycommit:
+ return None
+
+ # By convention, ``extra['branch']`` clobbers ``branch`` (used when
+ # passing ``--keepbranches``).
+ if 'branch' in extra:
+ branch = extra['branch']
+
+ memctx = self.tomemctx(text, parents=parents, date=date, extra=extra,
+ user=user, branch=branch, editor=editor)
+ return self._repo.commitctx(memctx)
+
def isdirty(self, path):
return path in self._cache
To: phillco, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list