hgext/remotefilelog/contentstore.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 43089 c59eb1560c44
equal deleted inserted replaced
43076:2372284d9457 43077:687b865b95ad
   134 
   134 
   135         raise KeyError((name, hex(node)))
   135         raise KeyError((name, hex(node)))
   136 
   136 
   137     def add(self, name, node, data):
   137     def add(self, name, node, data):
   138         raise RuntimeError(
   138         raise RuntimeError(
   139             "cannot add content only to remotefilelog " "contentstore"
   139             b"cannot add content only to remotefilelog " b"contentstore"
   140         )
   140         )
   141 
   141 
   142     def getmissing(self, keys):
   142     def getmissing(self, keys):
   143         missing = keys
   143         missing = keys
   144         for store in self.stores:
   144         for store in self.stores:
   148 
   148 
   149     def addremotefilelognode(self, name, node, data):
   149     def addremotefilelognode(self, name, node, data):
   150         if self.writestore:
   150         if self.writestore:
   151             self.writestore.addremotefilelognode(name, node, data)
   151             self.writestore.addremotefilelognode(name, node, data)
   152         else:
   152         else:
   153             raise RuntimeError("no writable store configured")
   153             raise RuntimeError(b"no writable store configured")
   154 
   154 
   155     def markledger(self, ledger, options=None):
   155     def markledger(self, ledger, options=None):
   156         for store in self.stores:
   156         for store in self.stores:
   157             store.markledger(ledger, options)
   157             store.markledger(ledger, options)
   158 
   158 
   206             self._updatemetacache(node, size, flags)
   206             self._updatemetacache(node, size, flags)
   207         return self._threaddata.metacache[1]
   207         return self._threaddata.metacache[1]
   208 
   208 
   209     def add(self, name, node, data):
   209     def add(self, name, node, data):
   210         raise RuntimeError(
   210         raise RuntimeError(
   211             "cannot add content only to remotefilelog " "contentstore"
   211             b"cannot add content only to remotefilelog " b"contentstore"
   212         )
   212         )
   213 
   213 
   214     def _sanitizemetacache(self):
   214     def _sanitizemetacache(self):
   215         metacache = getattr(self._threaddata, 'metacache', None)
   215         metacache = getattr(self._threaddata, 'metacache', None)
   216         if metacache is None:
   216         if metacache is None:
   253             [(name, hex(node))], force=True, fetchdata=True
   253             [(name, hex(node))], force=True, fetchdata=True
   254         )
   254         )
   255         return self._shared.getmeta(name, node)
   255         return self._shared.getmeta(name, node)
   256 
   256 
   257     def add(self, name, node, data):
   257     def add(self, name, node, data):
   258         raise RuntimeError("cannot add to a remote store")
   258         raise RuntimeError(b"cannot add to a remote store")
   259 
   259 
   260     def getmissing(self, keys):
   260     def getmissing(self, keys):
   261         return keys
   261         return keys
   262 
   262 
   263     def markledger(self, ledger, options=None):
   263     def markledger(self, ledger, options=None):
   267 class manifestrevlogstore(object):
   267 class manifestrevlogstore(object):
   268     def __init__(self, repo):
   268     def __init__(self, repo):
   269         self._store = repo.store
   269         self._store = repo.store
   270         self._svfs = repo.svfs
   270         self._svfs = repo.svfs
   271         self._revlogs = dict()
   271         self._revlogs = dict()
   272         self._cl = revlog.revlog(self._svfs, '00changelog.i')
   272         self._cl = revlog.revlog(self._svfs, b'00changelog.i')
   273         self._repackstartlinkrev = 0
   273         self._repackstartlinkrev = 0
   274 
   274 
   275     def get(self, name, node):
   275     def get(self, name, node):
   276         return self._revlog(name).rawdata(node)
   276         return self._revlog(name).rawdata(node)
   277 
   277 
   309                 missing.add(p1)
   309                 missing.add(p1)
   310             if p2 != nullid and p2 not in known:
   310             if p2 != nullid and p2 not in known:
   311                 missing.add(p2)
   311                 missing.add(p2)
   312 
   312 
   313             linknode = self._cl.node(rl.linkrev(ancrev))
   313             linknode = self._cl.node(rl.linkrev(ancrev))
   314             ancestors[rl.node(ancrev)] = (p1, p2, linknode, '')
   314             ancestors[rl.node(ancrev)] = (p1, p2, linknode, b'')
   315             if not missing:
   315             if not missing:
   316                 break
   316                 break
   317         return ancestors
   317         return ancestors
   318 
   318 
   319     def getnodeinfo(self, name, node):
   319     def getnodeinfo(self, name, node):
   322         parents = rl.parents(node)
   322         parents = rl.parents(node)
   323         linkrev = rl.linkrev(rl.rev(node))
   323         linkrev = rl.linkrev(rl.rev(node))
   324         return (parents[0], parents[1], cl.node(linkrev), None)
   324         return (parents[0], parents[1], cl.node(linkrev), None)
   325 
   325 
   326     def add(self, *args):
   326     def add(self, *args):
   327         raise RuntimeError("cannot add to a revlog store")
   327         raise RuntimeError(b"cannot add to a revlog store")
   328 
   328 
   329     def _revlog(self, name):
   329     def _revlog(self, name):
   330         rl = self._revlogs.get(name)
   330         rl = self._revlogs.get(name)
   331         if rl is None:
   331         if rl is None:
   332             revlogname = '00manifesttree.i'
   332             revlogname = b'00manifesttree.i'
   333             if name != '':
   333             if name != b'':
   334                 revlogname = 'meta/%s/00manifest.i' % name
   334                 revlogname = b'meta/%s/00manifest.i' % name
   335             rl = revlog.revlog(self._svfs, revlogname)
   335             rl = revlog.revlog(self._svfs, revlogname)
   336             self._revlogs[name] = rl
   336             self._revlogs[name] = rl
   337         return rl
   337         return rl
   338 
   338 
   339     def getmissing(self, keys):
   339     def getmissing(self, keys):
   350         self._repackendlinkrev = endrev
   350         self._repackendlinkrev = endrev
   351 
   351 
   352     def markledger(self, ledger, options=None):
   352     def markledger(self, ledger, options=None):
   353         if options and options.get(constants.OPTION_PACKSONLY):
   353         if options and options.get(constants.OPTION_PACKSONLY):
   354             return
   354             return
   355         treename = ''
   355         treename = b''
   356         rl = revlog.revlog(self._svfs, '00manifesttree.i')
   356         rl = revlog.revlog(self._svfs, b'00manifesttree.i')
   357         startlinkrev = self._repackstartlinkrev
   357         startlinkrev = self._repackstartlinkrev
   358         endlinkrev = self._repackendlinkrev
   358         endlinkrev = self._repackendlinkrev
   359         for rev in pycompat.xrange(len(rl) - 1, -1, -1):
   359         for rev in pycompat.xrange(len(rl) - 1, -1, -1):
   360             linkrev = rl.linkrev(rev)
   360             linkrev = rl.linkrev(rev)
   361             if linkrev < startlinkrev:
   361             if linkrev < startlinkrev:
   365             node = rl.node(rev)
   365             node = rl.node(rev)
   366             ledger.markdataentry(self, treename, node)
   366             ledger.markdataentry(self, treename, node)
   367             ledger.markhistoryentry(self, treename, node)
   367             ledger.markhistoryentry(self, treename, node)
   368 
   368 
   369         for path, encoded, size in self._store.datafiles():
   369         for path, encoded, size in self._store.datafiles():
   370             if path[:5] != 'meta/' or path[-2:] != '.i':
   370             if path[:5] != b'meta/' or path[-2:] != b'.i':
   371                 continue
   371                 continue
   372 
   372 
   373             treename = path[5 : -len('/00manifest.i')]
   373             treename = path[5 : -len(b'/00manifest.i')]
   374 
   374 
   375             rl = revlog.revlog(self._svfs, path)
   375             rl = revlog.revlog(self._svfs, path)
   376             for rev in pycompat.xrange(len(rl) - 1, -1, -1):
   376             for rev in pycompat.xrange(len(rl) - 1, -1, -1):
   377                 linkrev = rl.linkrev(rev)
   377                 linkrev = rl.linkrev(rev)
   378                 if linkrev < startlinkrev:
   378                 if linkrev < startlinkrev: