Show More
@@ -22,6 +22,16 b' StringIO = cStringIO.StringIO' | |||
|
22 | 22 | # mmap and simply use memmove. This avoids creating a bunch of large |
|
23 | 23 | # temporary string buffers. |
|
24 | 24 | |
|
25 | def _pull(dst, src, l): # pull l bytes from src | |
|
26 | while l: | |
|
27 | f = src.pop() | |
|
28 | if f[0] > l: # do we need to split? | |
|
29 | src.append((f[0] - l, f[1] + l)) | |
|
30 | dst.append((l, f[1])) | |
|
31 | return | |
|
32 | dst.append(f) | |
|
33 | l -= f[0] | |
|
34 | ||
|
25 | 35 | def patches(a, bins): |
|
26 | 36 | if not bins: |
|
27 | 37 | return a |
@@ -55,16 +65,6 b' def patches(a, bins):' | |||
|
55 | 65 | m.seek(pos) |
|
56 | 66 | for p in bins: m.write(p) |
|
57 | 67 | |
|
58 | def pull(dst, src, l): # pull l bytes from src | |
|
59 | while l: | |
|
60 | f = src.pop() | |
|
61 | if f[0] > l: # do we need to split? | |
|
62 | src.append((f[0] - l, f[1] + l)) | |
|
63 | dst.append((l, f[1])) | |
|
64 | return | |
|
65 | dst.append(f) | |
|
66 | l -= f[0] | |
|
67 | ||
|
68 | 68 | def collect(buf, list): |
|
69 | 69 | start = buf |
|
70 | 70 | for l, p in reversed(list): |
@@ -84,8 +84,8 b' def patches(a, bins):' | |||
|
84 | 84 | while pos < end: |
|
85 | 85 | m.seek(pos) |
|
86 | 86 | p1, p2, l = struct.unpack(">lll", m.read(12)) |
|
87 | pull(new, frags, p1 - last) # what didn't change | |
|
88 | pull([], frags, p2 - p1) # what got deleted | |
|
87 | _pull(new, frags, p1 - last) # what didn't change | |
|
88 | _pull([], frags, p2 - p1) # what got deleted | |
|
89 | 89 | new.append((l, pos + 12)) # what got added |
|
90 | 90 | pos += l + 12 |
|
91 | 91 | last = p2 |
General Comments 0
You need to be logged in to leave comments.
Login now