Show More
@@ -1723,17 +1723,18 b' def perfrevlogrevision(ui, repo, file_, ' | |||||
1723 | inline = r._inline |
|
1723 | inline = r._inline | |
1724 | iosize = r._io.size |
|
1724 | iosize = r._io.size | |
1725 | buffer = util.buffer |
|
1725 | buffer = util.buffer | |
1726 | offset = start(chain[0]) |
|
|||
1727 |
|
1726 | |||
1728 | chunks = [] |
|
1727 | chunks = [] | |
1729 | ladd = chunks.append |
|
1728 | ladd = chunks.append | |
1730 |
|
1729 | for idx, item in enumerate(chain): | ||
1731 | for rev in chain: |
|
1730 | offset = start(item[0]) | |
1732 | chunkstart = start(rev) |
|
1731 | bits = data[idx] | |
1733 |
|
|
1732 | for rev in item: | |
1734 |
chunkstart |
|
1733 | chunkstart = start(rev) | |
1735 | chunklength = length(rev) |
|
1734 | if inline: | |
1736 | ladd(buffer(data, chunkstart - offset, chunklength)) |
|
1735 | chunkstart += (rev + 1) * iosize | |
|
1736 | chunklength = length(rev) | |||
|
1737 | ladd(buffer(bits, chunkstart - offset, chunklength)) | |||
1737 |
|
1738 | |||
1738 | return chunks |
|
1739 | return chunks | |
1739 |
|
1740 | |||
@@ -1745,7 +1746,8 b' def perfrevlogrevision(ui, repo, file_, ' | |||||
1745 | def doread(chain): |
|
1746 | def doread(chain): | |
1746 | if not cache: |
|
1747 | if not cache: | |
1747 | r.clearcaches() |
|
1748 | r.clearcaches() | |
1748 | segmentforrevs(chain[0], chain[-1]) |
|
1749 | for item in slicedchain: | |
|
1750 | segmentforrevs(item[0], item[-1]) | |||
1749 |
|
1751 | |||
1750 | def dorawchunks(data, chain): |
|
1752 | def dorawchunks(data, chain): | |
1751 | if not cache: |
|
1753 | if not cache: | |
@@ -1772,9 +1774,19 b' def perfrevlogrevision(ui, repo, file_, ' | |||||
1772 | r.clearcaches() |
|
1774 | r.clearcaches() | |
1773 | r.revision(node) |
|
1775 | r.revision(node) | |
1774 |
|
1776 | |||
|
1777 | try: | |||
|
1778 | from mercurial.revlogutils.deltas import slicechunk | |||
|
1779 | except ImportError: | |||
|
1780 | slicechunk = getattr(revlog, '_slicechunk', None) | |||
|
1781 | ||||
|
1782 | size = r.length(rev) | |||
1775 | chain = r._deltachain(rev)[0] |
|
1783 | chain = r._deltachain(rev)[0] | |
1776 | data = segmentforrevs(chain[0], chain[-1])[1] |
|
1784 | if not getattr(r, '_withsparseread', False): | |
1777 | rawchunks = getrawchunks(data, chain) |
|
1785 | slicedchain = (chain,) | |
|
1786 | else: | |||
|
1787 | slicedchain = tuple(slicechunk(r, chain, targetsize=size)) | |||
|
1788 | data = [segmentforrevs(seg[0], seg[-1])[1] for seg in slicedchain] | |||
|
1789 | rawchunks = getrawchunks(data, slicedchain) | |||
1778 | bins = r._chunks(chain) |
|
1790 | bins = r._chunks(chain) | |
1779 | text = bytes(bins[0]) |
|
1791 | text = bytes(bins[0]) | |
1780 | bins = bins[1:] |
|
1792 | bins = bins[1:] | |
@@ -1784,7 +1796,7 b' def perfrevlogrevision(ui, repo, file_, ' | |||||
1784 | (lambda: dorevision(), b'full'), |
|
1796 | (lambda: dorevision(), b'full'), | |
1785 | (lambda: dodeltachain(rev), b'deltachain'), |
|
1797 | (lambda: dodeltachain(rev), b'deltachain'), | |
1786 | (lambda: doread(chain), b'read'), |
|
1798 | (lambda: doread(chain), b'read'), | |
1787 | (lambda: dorawchunks(data, chain), b'rawchunks'), |
|
1799 | (lambda: dorawchunks(data, slicedchain), b'rawchunks'), | |
1788 | (lambda: dodecompress(rawchunks), b'decompress'), |
|
1800 | (lambda: dodecompress(rawchunks), b'decompress'), | |
1789 | (lambda: dopatch(text, bins), b'patch'), |
|
1801 | (lambda: dopatch(text, bins), b'patch'), | |
1790 | (lambda: dohash(text), b'hash'), |
|
1802 | (lambda: dohash(text), b'hash'), |
General Comments 0
You need to be logged in to leave comments.
Login now