diff --git a/hgext/sqlitestore.py b/hgext/sqlitestore.py --- a/hgext/sqlitestore.py +++ b/hgext/sqlitestore.py @@ -615,7 +615,12 @@ self._revisioncache[node] = revisiondata return node - def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None): + def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None, + maybemissingparents=False): + if maybemissingparents: + raise error.Abort(_('SQLite storage does not support missing ' + 'parents write mode')) + nodes = [] for node, p1, p2, linknode, deltabase, delta, wireflags in deltas: diff --git a/mercurial/filelog.py b/mercurial/filelog.py --- a/mercurial/filelog.py +++ b/mercurial/filelog.py @@ -7,6 +7,7 @@ from __future__ import absolute_import +from .i18n import _ from .node import ( nullid, nullrev, @@ -104,9 +105,14 @@ p1, p2, node=node, flags=flags, cachedelta=cachedelta) - def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None): + def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None, + maybemissingparents=False): + if maybemissingparents: + raise error.Abort(_('revlog storage does not support missing ' + 'parents write mode')) + return self._revlog.addgroup(deltas, linkmapper, transaction, - addrevisioncb=addrevisioncb) + addrevisioncb=addrevisioncb) def getstrippoint(self, minlink): return self._revlog.getstrippoint(minlink) diff --git a/mercurial/repository.py b/mercurial/repository.py --- a/mercurial/repository.py +++ b/mercurial/repository.py @@ -693,7 +693,8 @@ applying raw data from a peer repo. """ - def addgroup(deltas, linkmapper, transaction, addrevisioncb=None): + def addgroup(deltas, linkmapper, transaction, addrevisioncb=None, + maybemissingparents=False): """Process a series of deltas for storage. ``deltas`` is an iterable of 7-tuples of @@ -707,6 +708,11 @@ ``addrevisioncb`` should be called for each node as it is committed. + ``maybemissingparents`` is a bool indicating whether the incoming + data may reference parents/ancestor revisions that aren't present. + This flag is set when receiving data into a "shallow" store that + doesn't hold all history. + Returns a list of nodes that were processed. A node will be in the list even if it existed in the store previously. """ diff --git a/tests/simplestorerepo.py b/tests/simplestorerepo.py --- a/tests/simplestorerepo.py +++ b/tests/simplestorerepo.py @@ -459,7 +459,12 @@ self._refreshindex() self._svfs.write(self._indexpath, cbor.dumps(self._indexdata)) - def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None): + def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None, + maybemissingparents=False): + if maybemissingparents: + raise error.Abort(_('simple store does not support missing parents ' + 'write mode')) + nodes = [] transaction.addbackup(self._indexpath)