Mercurial > hg
comparison mercurial/pure/mpatch.py @ 28782:f736f98e16ca
mpatch: unify mpatchError (issue5182)
The pure version was mpatch was throwing struct.error or ValueError
for errors, whereas the C version was throwing an "mpatch.mpatchError".
Introducing an mpatch.mpatchError into pure and using it consistently
is fairly easy, but the actual form for it is mercurial.mpatch.mpatchError,
so with this commit, we change the C implementation to match the naming
convention too.
author | timeless <timeless@mozdev.org> |
---|---|
date | Thu, 31 Mar 2016 02:05:28 +0000 |
parents | c4c7be9f0554 |
children | 86db5cb55d46 |
comparison
equal
deleted
inserted
replaced
28781:c042b98a6ff8 | 28782:f736f98e16ca |
---|---|
9 | 9 |
10 import cStringIO | 10 import cStringIO |
11 import struct | 11 import struct |
12 | 12 |
13 StringIO = cStringIO.StringIO | 13 StringIO = cStringIO.StringIO |
14 | |
15 class mpatchError(Exception): | |
16 """error raised when a delta cannot be decoded | |
17 """ | |
14 | 18 |
15 # This attempts to apply a series of patches in time proportional to | 19 # This attempts to apply a series of patches in time proportional to |
16 # the total size of the patches, rather than patches * len(text). This | 20 # the total size of the patches, rather than patches * len(text). This |
17 # means rather than shuffling strings around, we shuffle around | 21 # means rather than shuffling strings around, we shuffle around |
18 # pointers to fragments with fragment lists. | 22 # pointers to fragments with fragment lists. |
82 new = [] | 86 new = [] |
83 end = pos + plen | 87 end = pos + plen |
84 last = 0 | 88 last = 0 |
85 while pos < end: | 89 while pos < end: |
86 m.seek(pos) | 90 m.seek(pos) |
87 p1, p2, l = struct.unpack(">lll", m.read(12)) | 91 try: |
92 p1, p2, l = struct.unpack(">lll", m.read(12)) | |
93 except struct.error: | |
94 raise mpatchError("patch cannot be decoded") | |
88 _pull(new, frags, p1 - last) # what didn't change | 95 _pull(new, frags, p1 - last) # what didn't change |
89 _pull([], frags, p2 - p1) # what got deleted | 96 _pull([], frags, p2 - p1) # what got deleted |
90 new.append((l, pos + 12)) # what got added | 97 new.append((l, pos + 12)) # what got added |
91 pos += l + 12 | 98 pos += l + 12 |
92 last = p2 | 99 last = p2 |
112 outlen += start - last | 119 outlen += start - last |
113 last = end | 120 last = end |
114 outlen += length | 121 outlen += length |
115 | 122 |
116 if bin != binend: | 123 if bin != binend: |
117 raise ValueError("patch cannot be decoded") | 124 raise mpatchError("patch cannot be decoded") |
118 | 125 |
119 outlen += orig - last | 126 outlen += orig - last |
120 return outlen | 127 return outlen |