Show More
@@ -2337,7 +2337,7 b' class revlog(object):' | |||||
2337 | DELTAREUSEALL = {'always', 'samerevs', 'never', 'fulladd'} |
|
2337 | DELTAREUSEALL = {'always', 'samerevs', 'never', 'fulladd'} | |
2338 |
|
2338 | |||
2339 | def clone(self, tr, destrevlog, addrevisioncb=None, |
|
2339 | def clone(self, tr, destrevlog, addrevisioncb=None, | |
2340 |
|
|
2340 | deltareuse=DELTAREUSESAMEREVS, forcedeltabothparents=None): | |
2341 | """Copy this revlog to another, possibly with format changes. |
|
2341 | """Copy this revlog to another, possibly with format changes. | |
2342 |
|
2342 | |||
2343 | The destination revlog will contain the same revisions and nodes. |
|
2343 | The destination revlog will contain the same revisions and nodes. | |
@@ -2405,60 +2405,66 b' class revlog(object):' | |||||
2405 |
|
2405 | |||
2406 | destrevlog._deltabothparents = forcedeltabothparents or oldamd |
|
2406 | destrevlog._deltabothparents = forcedeltabothparents or oldamd | |
2407 |
|
2407 | |||
2408 | deltacomputer = deltautil.deltacomputer(destrevlog) |
|
2408 | self._clone(tr, destrevlog, addrevisioncb, deltareuse, | |
2409 | index = self.index |
|
2409 | forcedeltabothparents) | |
2410 | for rev in self: |
|
2410 | ||
2411 | entry = index[rev] |
|
|||
2412 |
|
||||
2413 | # Some classes override linkrev to take filtered revs into |
|
|||
2414 | # account. Use raw entry from index. |
|
|||
2415 | flags = entry[0] & 0xffff |
|
|||
2416 | linkrev = entry[4] |
|
|||
2417 | p1 = index[entry[5]][7] |
|
|||
2418 | p2 = index[entry[6]][7] |
|
|||
2419 | node = entry[7] |
|
|||
2420 |
|
||||
2421 | # (Possibly) reuse the delta from the revlog if allowed and |
|
|||
2422 | # the revlog chunk is a delta. |
|
|||
2423 | cachedelta = None |
|
|||
2424 | rawtext = None |
|
|||
2425 | if (deltareuse != self.DELTAREUSEFULLADD |
|
|||
2426 | and destrevlog._lazydelta): |
|
|||
2427 | dp = self.deltaparent(rev) |
|
|||
2428 | if dp != nullrev: |
|
|||
2429 | cachedelta = (dp, bytes(self._chunk(rev))) |
|
|||
2430 |
|
||||
2431 | if not cachedelta: |
|
|||
2432 | rawtext = self.rawdata(rev) |
|
|||
2433 |
|
||||
2434 |
|
||||
2435 | if deltareuse == self.DELTAREUSEFULLADD: |
|
|||
2436 | destrevlog.addrevision(rawtext, tr, linkrev, p1, p2, |
|
|||
2437 | cachedelta=cachedelta, |
|
|||
2438 | node=node, flags=flags, |
|
|||
2439 | deltacomputer=deltacomputer) |
|
|||
2440 | else: |
|
|||
2441 | ifh = destrevlog.opener(destrevlog.indexfile, 'a+', |
|
|||
2442 | checkambig=False) |
|
|||
2443 | dfh = None |
|
|||
2444 | if not destrevlog._inline: |
|
|||
2445 | dfh = destrevlog.opener(destrevlog.datafile, 'a+') |
|
|||
2446 | try: |
|
|||
2447 | destrevlog._addrevision(node, rawtext, tr, linkrev, p1, |
|
|||
2448 | p2, flags, cachedelta, ifh, dfh, |
|
|||
2449 | deltacomputer=deltacomputer) |
|
|||
2450 | finally: |
|
|||
2451 | if dfh: |
|
|||
2452 | dfh.close() |
|
|||
2453 | ifh.close() |
|
|||
2454 |
|
||||
2455 | if addrevisioncb: |
|
|||
2456 | addrevisioncb(self, rev, node) |
|
|||
2457 | finally: |
|
2411 | finally: | |
2458 | destrevlog._lazydelta = oldlazydelta |
|
2412 | destrevlog._lazydelta = oldlazydelta | |
2459 | destrevlog._lazydeltabase = oldlazydeltabase |
|
2413 | destrevlog._lazydeltabase = oldlazydeltabase | |
2460 | destrevlog._deltabothparents = oldamd |
|
2414 | destrevlog._deltabothparents = oldamd | |
2461 |
|
2415 | |||
|
2416 | def _clone(self, tr, destrevlog, addrevisioncb, deltareuse, | |||
|
2417 | forcedeltabothparents): | |||
|
2418 | """perform the core duty of `revlog.clone` after parameter processing""" | |||
|
2419 | deltacomputer = deltautil.deltacomputer(destrevlog) | |||
|
2420 | index = self.index | |||
|
2421 | for rev in self: | |||
|
2422 | entry = index[rev] | |||
|
2423 | ||||
|
2424 | # Some classes override linkrev to take filtered revs into | |||
|
2425 | # account. Use raw entry from index. | |||
|
2426 | flags = entry[0] & 0xffff | |||
|
2427 | linkrev = entry[4] | |||
|
2428 | p1 = index[entry[5]][7] | |||
|
2429 | p2 = index[entry[6]][7] | |||
|
2430 | node = entry[7] | |||
|
2431 | ||||
|
2432 | # (Possibly) reuse the delta from the revlog if allowed and | |||
|
2433 | # the revlog chunk is a delta. | |||
|
2434 | cachedelta = None | |||
|
2435 | rawtext = None | |||
|
2436 | if (deltareuse != self.DELTAREUSEFULLADD and destrevlog._lazydelta): | |||
|
2437 | dp = self.deltaparent(rev) | |||
|
2438 | if dp != nullrev: | |||
|
2439 | cachedelta = (dp, bytes(self._chunk(rev))) | |||
|
2440 | ||||
|
2441 | if not cachedelta: | |||
|
2442 | rawtext = self.rawdata(rev) | |||
|
2443 | ||||
|
2444 | ||||
|
2445 | if deltareuse == self.DELTAREUSEFULLADD: | |||
|
2446 | destrevlog.addrevision(rawtext, tr, linkrev, p1, p2, | |||
|
2447 | cachedelta=cachedelta, | |||
|
2448 | node=node, flags=flags, | |||
|
2449 | deltacomputer=deltacomputer) | |||
|
2450 | else: | |||
|
2451 | ifh = destrevlog.opener(destrevlog.indexfile, 'a+', | |||
|
2452 | checkambig=False) | |||
|
2453 | dfh = None | |||
|
2454 | if not destrevlog._inline: | |||
|
2455 | dfh = destrevlog.opener(destrevlog.datafile, 'a+') | |||
|
2456 | try: | |||
|
2457 | destrevlog._addrevision(node, rawtext, tr, linkrev, p1, | |||
|
2458 | p2, flags, cachedelta, ifh, dfh, | |||
|
2459 | deltacomputer=deltacomputer) | |||
|
2460 | finally: | |||
|
2461 | if dfh: | |||
|
2462 | dfh.close() | |||
|
2463 | ifh.close() | |||
|
2464 | ||||
|
2465 | if addrevisioncb: | |||
|
2466 | addrevisioncb(self, rev, node) | |||
|
2467 | ||||
2462 | def censorrevision(self, tr, censornode, tombstone=b''): |
|
2468 | def censorrevision(self, tr, censornode, tombstone=b''): | |
2463 | if (self.version & 0xFFFF) == REVLOGV0: |
|
2469 | if (self.version & 0xFFFF) == REVLOGV0: | |
2464 | raise error.RevlogError(_('cannot censor with version %d revlogs') % |
|
2470 | raise error.RevlogError(_('cannot censor with version %d revlogs') % |
General Comments 0
You need to be logged in to leave comments.
Login now