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: |