sapling/remotefilelog/metadatastore.py

82 lines
2.1 KiB
Python
Raw Normal View History

import os
import basestore, ioutil
from mercurial import util
from mercurial.node import hex
class unionmetadatastore(object):
def __init__(self, local, shared):
self._local = local
self._shared = shared
def getparents(self, name, node):
"""Returns the immediate parents of the node."""
pass
def getancestors(self, name, node):
"""Returns as many ancestors as we're aware of.
return value: {
node: (p1, p2, linknode),
...
}
"""
try:
return self._shared.getancestors(name, node)
except KeyError:
pass
try:
return self._local.getancestors(name, node)
except KeyError:
pass
self._shared.triggerfetches([(name, node)])
try:
return self._shared.getancestors(name, node)
except KeyError:
pass
raise error.LookupError(node, name, _('no valid file history'))
def getlinknode(self, name, node):
ancestors = self.getancestors(name, node)
return ancestors[node][3]
def add(self, name, node, data):
raise Exception("cannot add content only to remotefilelog "
"contentstore")
def contains(self, keys):
missing = self._local.contains(keys)
if missing:
missing = self._shared.contains(missing)
return missing
def addfetcher(self, fetchfunc):
self._shared.addfetcher(fetchfunc)
def triggerfetches(self, keys):
self._shared.triggerfetches(keys)
class remotefilelogmetadatastore(basestore.basestore):
def getparents(self, name, node):
"""Returns the immediate parents of the node."""
pass
def getancestors(self, name, node):
"""Returns as many ancestors as we're aware of.
return value: {
node: (p1, p2, linknode),
...
}
"""
pass
def getlinknode(self, name, node):
pass
def add(self, name, node, parents, linknode):
raise Exception("cannot add metadata only to remotefilelog "
"metadatastore")