256 @property |
256 @property |
257 def description(self): |
257 def description(self): |
258 return encoding.tolocal(self._text[self._offsets[3] + 2:]) |
258 return encoding.tolocal(self._text[self._offsets[3] + 2:]) |
259 |
259 |
260 class changelog(revlog.revlog): |
260 class changelog(revlog.revlog): |
261 def __init__(self, opener): |
261 def __init__(self, opener, trypending=False): |
262 revlog.revlog.__init__(self, opener, "00changelog.i", |
262 """Load a changelog revlog using an opener. |
263 checkambig=True) |
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 if self._initempty: |
278 if self._initempty: |
265 # changelogs don't benefit from generaldelta |
279 # changelogs don't benefit from generaldelta |
266 self.version &= ~revlog.REVLOGGENERALDELTA |
280 self.version &= ~revlog.REVLOGGENERALDELTA |
267 self._generaldelta = False |
281 self._generaldelta = False |
268 |
282 |
399 self._delaybuf = None |
413 self._delaybuf = None |
400 self._divert = False |
414 self._divert = False |
401 # split when we're done |
415 # split when we're done |
402 self.checkinlinesize(tr) |
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 def _writepending(self, tr): |
418 def _writepending(self, tr): |
426 "create a file containing the unfinalized state for pretxnchangegroup" |
419 "create a file containing the unfinalized state for pretxnchangegroup" |
427 if self._delaybuf: |
420 if self._delaybuf: |
428 # make a temporary copy of the index |
421 # make a temporary copy of the index |
429 fp1 = self._realopener(self.indexfile) |
422 fp1 = self._realopener(self.indexfile) |