diff --git a/treemanifest/__init__.py b/treemanifest/__init__.py --- a/treemanifest/__init__.py +++ b/treemanifest/__init__.py @@ -1584,7 +1584,11 @@ yield wirepack.closepart() -class remotetreedatastore(object): +class generatingdatastore(object): + """Abstract base class representing stores which generate trees on the + fly and write them to the shared store. Thereafter, the stores replay the + lookup operation on the shared store expecting it to succeed.""" + def __init__(self, repo): self._repo = repo self._shared = None @@ -1593,6 +1597,30 @@ self._shared = shared def _gettrees(self, name, node): + raise NotImplemented() + + def get(self, name, node): + self._gettrees(name, node) + return self._shared.get(name, node) + + def getdeltachain(self, name, node): + self._gettrees(name, node) + return self._shared.getdeltachain(name, node) + + def add(self, name, node, data): + raise RuntimeError("cannot add to a generating store") + + def getmissing(self, keys): + return keys + + def markledger(self, ledger, options=None): + pass + + def getmetrics(self): + return {} + +class remotetreedatastore(generatingdatastore): + def _gettrees(self, name, node): # Only look at the server if not root or is public basemfnodes = [] if name == '': @@ -1612,26 +1640,6 @@ prefetchtrees(self._repo, name, [node], basemfnodes, []) self._shared.markforrefresh() - def get(self, name, node): - self._gettrees(name, node) - return self._shared.get(name, node) - - def getdeltachain(self, name, node): - self._gettrees(name, node) - return self._shared.getdeltachain(name, node) - - def add(self, name, node, data): - raise RuntimeError("cannot add to a remote store") - - def getmissing(self, keys): - return keys - - def markledger(self, ledger, options=None): - pass - - def getmetrics(self): - return {} - def serverrepack(repo, incremental=False, options=None): packpath = repo.vfs.join('cache/packs/%s' % PACK_CATEGORY)