##// END OF EJS Templates
changelog: load pending file directly...
Gregory Szorc -
r32292:0ad0d26f default
parent child Browse files
Show More
@@ -258,9 +258,23 b' class changelogrevision(object):'
258 258 return encoding.tolocal(self._text[self._offsets[3] + 2:])
259 259
260 260 class changelog(revlog.revlog):
261 def __init__(self, opener):
262 revlog.revlog.__init__(self, opener, "00changelog.i",
263 checkambig=True)
261 def __init__(self, opener, trypending=False):
262 """Load a changelog revlog using an opener.
263
264 If ``trypending`` is true, we attempt to load the index from a
265 ``00changelog.i.a`` file instead of the default ``00changelog.i``.
266 The ``00changelog.i.a`` file contains index (and possibly inline
267 revision) data for a transaction that hasn't been finalized yet.
268 It exists in a separate file to facilitate readers (such as
269 hooks processes) accessing data before a transaction is finalized.
270 """
271 if trypending and opener.exists('00changelog.i.a'):
272 indexfile = '00changelog.i.a'
273 else:
274 indexfile = '00changelog.i'
275
276 revlog.revlog.__init__(self, opener, indexfile, checkambig=True)
277
264 278 if self._initempty:
265 279 # changelogs don't benefit from generaldelta
266 280 self.version &= ~revlog.REVLOGGENERALDELTA
@@ -401,27 +415,6 b' class changelog(revlog.revlog):'
401 415 # split when we're done
402 416 self.checkinlinesize(tr)
403 417
404 def readpending(self, file):
405 """read index data from a "pending" file
406
407 During a transaction, the actual changeset data is already stored in the
408 main file, but not yet finalized in the on-disk index. Instead, a
409 "pending" index is written by the transaction logic. If this function
410 is running, we are likely in a subprocess invoked in a hook. The
411 subprocess is informed that it is within a transaction and needs to
412 access its content.
413
414 This function will read all the index data out of the pending file and
415 overwrite the main index."""
416
417 if not self.opener.exists(file):
418 return # no pending data for changelog
419 r = revlog.revlog(self.opener, file)
420 self.index = r.index
421 self.nodemap = r.nodemap
422 self._nodecache = r._nodecache
423 self._chunkcache = r._chunkcache
424
425 418 def _writepending(self, tr):
426 419 "create a file containing the unfinalized state for pretxnchangegroup"
427 420 if self._delaybuf:
@@ -528,10 +528,8 b' class localrepository(object):'
528 528
529 529 @storecache('00changelog.i')
530 530 def changelog(self):
531 c = changelog.changelog(self.svfs)
532 if txnutil.mayhavepending(self.root):
533 c.readpending('00changelog.i.a')
534 return c
531 return changelog.changelog(self.svfs,
532 trypending=txnutil.mayhavepending(self.root))
535 533
536 534 def _constructmanifest(self):
537 535 # This is a temporary function while we migrate from manifest to
General Comments 0
You need to be logged in to leave comments. Login now