diff options
author | Ori Bernstein <ori@eigenstate.org> | 2021-06-14 00:00:37 +0000 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2021-06-14 00:00:37 +0000 |
commit | a73a964e51247ed169d322c725a3a18859f109a3 (patch) | |
tree | 3f752d117274d444bda44e85609aeac1acf313f3 /sys/lib/python/mercurial/pure/mpatch.py | |
parent | e64efe273fcb921a61bf27d33b230c4e64fcd425 (diff) |
python, hg: tow outside the environment.
they've served us well, and can ride off into the sunset.
Diffstat (limited to 'sys/lib/python/mercurial/pure/mpatch.py')
-rw-r--r-- | sys/lib/python/mercurial/pure/mpatch.py | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/sys/lib/python/mercurial/pure/mpatch.py b/sys/lib/python/mercurial/pure/mpatch.py deleted file mode 100644 index dd2d84098..000000000 --- a/sys/lib/python/mercurial/pure/mpatch.py +++ /dev/null @@ -1,116 +0,0 @@ -# mpatch.py - Python implementation of mpatch.c -# -# Copyright 2009 Matt Mackall <mpm@selenic.com> and others -# -# This software may be used and distributed according to the terms of the -# GNU General Public License version 2, incorporated herein by reference. - -import struct -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO - -# This attempts to apply a series of patches in time proportional to -# the total size of the patches, rather than patches * len(text). This -# means rather than shuffling strings around, we shuffle around -# pointers to fragments with fragment lists. -# -# When the fragment lists get too long, we collapse them. To do this -# efficiently, we do all our operations inside a buffer created by -# mmap and simply use memmove. This avoids creating a bunch of large -# temporary string buffers. - -def patches(a, bins): - if not bins: return a - - plens = [len(x) for x in bins] - pl = sum(plens) - bl = len(a) + pl - tl = bl + bl + pl # enough for the patches and two working texts - b1, b2 = 0, bl - - if not tl: return a - - m = StringIO() - def move(dest, src, count): - """move count bytes from src to dest - - The file pointer is left at the end of dest. - """ - m.seek(src) - buf = m.read(count) - m.seek(dest) - m.write(buf) - - # load our original text - m.write(a) - frags = [(len(a), b1)] - - # copy all the patches into our segment so we can memmove from them - pos = b2 + bl - m.seek(pos) - for p in bins: m.write(p) - - def pull(dst, src, l): # pull l bytes from src - while l: - f = src.pop(0) - if f[0] > l: # do we need to split? - src.insert(0, (f[0] - l, f[1] + l)) - dst.append((l, f[1])) - return - dst.append(f) - l -= f[0] - - def collect(buf, list): - start = buf - for l, p in list: - move(buf, p, l) - buf += l - return (buf - start, start) - - for plen in plens: - # if our list gets too long, execute it - if len(frags) > 128: - b2, b1 = b1, b2 - frags = [collect(b1, frags)] - - new = [] - end = pos + plen - last = 0 - while pos < end: - m.seek(pos) - p1, p2, l = struct.unpack(">lll", m.read(12)) - pull(new, frags, p1 - last) # what didn't change - pull([], frags, p2 - p1) # what got deleted - new.append((l, pos + 12)) # what got added - pos += l + 12 - last = p2 - frags = new + frags # what was left at the end - - t = collect(b2, frags) - - m.seek(t[1]) - return m.read(t[0]) - -def patchedsize(orig, delta): - outlen, last, bin = 0, 0, 0 - binend = len(delta) - data = 12 - - while data <= binend: - decode = delta[bin:bin + 12] - start, end, length = struct.unpack(">lll", decode) - if start > end: - break - bin = data + length - data = bin + 12 - outlen += start - last - last = end - outlen += length - - if bin != binend: - raise Exception("patch cannot be decoded") - - outlen += orig - last - return outlen |