Merge lp:~jelmer/brz/chk-inventory-iter into lp:brz
- chk-inventory-iter
- Merge into trunk
Proposed by
Jelmer Vernooij
Status: | Merged |
---|---|
Approved by: | Jelmer Vernooij |
Approved revision: | no longer in the source branch. |
Merge reported by: | The Breezy Bot |
Merged at revision: | not available |
Proposed branch: | lp:~jelmer/brz/chk-inventory-iter |
Merge into: | lp:brz |
Diff against target: |
293 lines (+43/-37) 7 files modified
breezy/bzr/groupcompress.py (+1/-1) breezy/bzr/inventory_delta.py (+10/-8) breezy/bzr/remote.py (+1/-1) breezy/bzr/versionedfile.py (+1/-1) breezy/bzr/vf_repository.py (+1/-1) breezy/git/annotate.py (+1/-1) breezy/tests/test_inventory_delta.py (+28/-24) |
To merge this branch: | bzr merge lp:~jelmer/brz/chk-inventory-iter |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jelmer Vernooij | Approve | ||
Review via email: mp+378772@code.launchpad.net |
Commit message
parse_text_bytes now takes a list of lines.
Description of the change
parse_text_bytes now takes a list of lines.
To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'breezy/bzr/groupcompress.py' |
2 | --- breezy/bzr/groupcompress.py 2020-01-31 19:21:09 +0000 |
3 | +++ breezy/bzr/groupcompress.py 2020-02-09 01:38:14 +0000 |
4 | @@ -499,7 +499,7 @@ |
5 | if storage_kind == 'chunked': |
6 | return iter([self._bytes]) |
7 | elif storage_kind == 'lines': |
8 | - return osutils.split_lines(self._bytes) |
9 | + return iter(osutils.split_lines(self._bytes)) |
10 | raise errors.UnavailableRepresentation(self.key, storage_kind, |
11 | self.storage_kind) |
12 | |
13 | |
14 | === modified file 'breezy/bzr/inventory_delta.py' |
15 | --- breezy/bzr/inventory_delta.py 2019-02-02 15:13:30 +0000 |
16 | +++ breezy/bzr/inventory_delta.py 2020-02-09 01:38:14 +0000 |
17 | @@ -277,23 +277,25 @@ |
18 | else: |
19 | raise InventoryDeltaError("value %(val)r is not a bool", val=value) |
20 | |
21 | - def parse_text_bytes(self, bytes): |
22 | + def parse_text_bytes(self, lines): |
23 | """Parse the text bytes of a serialized inventory delta. |
24 | |
25 | If versioned_root and/or tree_references flags were set via |
26 | require_flags, then the parsed flags must match or a BzrError will be |
27 | raised. |
28 | |
29 | - :param bytes: The bytes to parse. This can be obtained by calling |
30 | - delta_to_lines and then doing ''.join(delta_lines). |
31 | + :param lines: The lines to parse. This can be obtained by calling |
32 | + delta_to_lines. |
33 | :return: (parent_id, new_id, versioned_root, tree_references, |
34 | inventory_delta) |
35 | """ |
36 | - if not bytes.endswith(b'\n'): |
37 | - last_line = bytes.rsplit(b'\n', 1)[-1] |
38 | - raise InventoryDeltaError( |
39 | - 'last line not empty: %(line)r', line=last_line) |
40 | - lines = bytes.split(b'\n')[:-1] # discard the last empty line |
41 | + if not lines: |
42 | + raise InventoryDeltaError( |
43 | + 'inventory delta is empty') |
44 | + if not lines[-1].endswith(b'\n'): |
45 | + raise InventoryDeltaError( |
46 | + 'last line not empty: %(line)r', line=lines[-1]) |
47 | + lines = [line.rstrip(b'\n') for line in lines] # discard the last empty line |
48 | if not lines or lines[0] != b'format: %s' % FORMAT_1: |
49 | raise InventoryDeltaError( |
50 | 'unknown format %(line)r', line=lines[0:1]) |
51 | |
52 | === modified file 'breezy/bzr/remote.py' |
53 | --- breezy/bzr/remote.py 2020-01-31 10:39:02 +0000 |
54 | +++ breezy/bzr/remote.py 2020-02-09 01:38:14 +0000 |
55 | @@ -2048,7 +2048,7 @@ |
56 | "Unexpected stream %r received" % substream_kind) |
57 | for record in substream: |
58 | (parent_id, new_id, versioned_root, tree_references, invdelta) = ( |
59 | - deserializer.parse_text_bytes(record.get_bytes_as("fulltext"))) |
60 | + deserializer.parse_text_bytes(record.get_bytes_as("lines"))) |
61 | if parent_id != prev_inv.revision_id: |
62 | raise AssertionError("invalid base %r != %r" % (parent_id, |
63 | prev_inv.revision_id)) |
64 | |
65 | === modified file 'breezy/bzr/versionedfile.py' |
66 | --- breezy/bzr/versionedfile.py 2020-01-30 18:07:32 +0000 |
67 | +++ breezy/bzr/versionedfile.py 2020-02-09 01:38:14 +0000 |
68 | @@ -143,7 +143,7 @@ |
69 | elif storage_kind == 'lines': |
70 | if self._chunks_are_lines: |
71 | return iter(self._chunks) |
72 | - return osutils.chunks_to_lines(self._chunks) |
73 | + return iter(osutils.chunks_to_lines(self._chunks)) |
74 | raise errors.UnavailableRepresentation(self.key, storage_kind, |
75 | self.storage_kind) |
76 | |
77 | |
78 | === modified file 'breezy/bzr/vf_repository.py' |
79 | --- breezy/bzr/vf_repository.py 2020-01-31 10:39:02 +0000 |
80 | +++ breezy/bzr/vf_repository.py 2020-02-09 01:38:14 +0000 |
81 | @@ -1937,7 +1937,7 @@ |
82 | target_tree_refs = self.target_repo._format.supports_tree_reference |
83 | for record in substream: |
84 | # Insert the delta directly |
85 | - inventory_delta_bytes = record.get_bytes_as('fulltext') |
86 | + inventory_delta_bytes = record.get_bytes_as('lines') |
87 | deserialiser = inventory_delta.InventoryDeltaDeserializer() |
88 | try: |
89 | parse_result = deserialiser.parse_text_bytes( |
90 | |
91 | === modified file 'breezy/git/annotate.py' |
92 | --- breezy/git/annotate.py 2020-01-30 18:07:32 +0000 |
93 | +++ breezy/git/annotate.py 2020-02-09 01:38:14 +0000 |
94 | @@ -70,7 +70,7 @@ |
95 | |
96 | def iter_bytes_as(self, storage_kind): |
97 | if storage_kind == 'lines': |
98 | - return osutils.chunks_to_lines(self.store[self.blob_id].as_raw_chunks()) |
99 | + return iter(osutils.chunks_to_lines(self.store[self.blob_id].as_raw_chunks())) |
100 | elif storage_kind == 'chunked': |
101 | return iter(self.store[self.blob_id].as_raw_chunks()) |
102 | raise UnavailableRepresentation(self.key, storage_kind, |
103 | |
104 | === modified file 'breezy/tests/test_inventory_delta.py' |
105 | --- breezy/tests/test_inventory_delta.py 2018-11-11 04:08:32 +0000 |
106 | +++ breezy/tests/test_inventory_delta.py 2020-02-09 01:38:14 +0000 |
107 | @@ -19,6 +19,7 @@ |
108 | See doc/developer/inventory.txt for more information. |
109 | """ |
110 | |
111 | +from .. import osutils |
112 | from ..bzr import ( |
113 | inventory, |
114 | inventory_delta, |
115 | @@ -96,28 +97,28 @@ |
116 | def test_parse_no_bytes(self): |
117 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
118 | err = self.assertRaises( |
119 | - InventoryDeltaError, deserializer.parse_text_bytes, b'') |
120 | - self.assertContainsRe(str(err), 'last line not empty') |
121 | + InventoryDeltaError, deserializer.parse_text_bytes, []) |
122 | + self.assertContainsRe(str(err), 'inventory delta is empty') |
123 | |
124 | def test_parse_bad_format(self): |
125 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
126 | err = self.assertRaises(InventoryDeltaError, |
127 | - deserializer.parse_text_bytes, b'format: foo\n') |
128 | + deserializer.parse_text_bytes, [b'format: foo\n']) |
129 | self.assertContainsRe(str(err), 'unknown format') |
130 | |
131 | def test_parse_no_parent(self): |
132 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
133 | err = self.assertRaises(InventoryDeltaError, |
134 | deserializer.parse_text_bytes, |
135 | - b'format: bzr inventory delta v1 (bzr 1.14)\n') |
136 | + [b'format: bzr inventory delta v1 (bzr 1.14)\n']) |
137 | self.assertContainsRe(str(err), 'missing parent: marker') |
138 | |
139 | def test_parse_no_version(self): |
140 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
141 | err = self.assertRaises(InventoryDeltaError, |
142 | deserializer.parse_text_bytes, |
143 | - b'format: bzr inventory delta v1 (bzr 1.14)\n' |
144 | - b'parent: null:\n') |
145 | + [b'format: bzr inventory delta v1 (bzr 1.14)\n', |
146 | + b'parent: null:\n']) |
147 | self.assertContainsRe(str(err), 'missing version: marker') |
148 | |
149 | def test_parse_duplicate_key_errors(self): |
150 | @@ -132,12 +133,12 @@ |
151 | None\x00/\x00an-id\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00 |
152 | """ |
153 | err = self.assertRaises(InventoryDeltaError, |
154 | - deserializer.parse_text_bytes, double_root_lines) |
155 | + deserializer.parse_text_bytes, osutils.split_lines(double_root_lines)) |
156 | self.assertContainsRe(str(err), 'duplicate file id') |
157 | |
158 | def test_parse_versioned_root_only(self): |
159 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
160 | - parse_result = deserializer.parse_text_bytes(root_only_lines) |
161 | + parse_result = deserializer.parse_text_bytes(osutils.split_lines(root_only_lines)) |
162 | expected_entry = inventory.make_entry( |
163 | 'directory', u'', None, b'an-id') |
164 | expected_entry.revision = b'a@e\xc3\xa5ample.com--2004' |
165 | @@ -155,8 +156,9 @@ |
166 | tree_references: true |
167 | None\x00/\x00TREE_ROOT\x00\x00null:\x00dir\x00\x00 |
168 | """ |
169 | - err = self.assertRaises(InventoryDeltaError, |
170 | - deserializer.parse_text_bytes, root_only_lines) |
171 | + err = self.assertRaises( |
172 | + InventoryDeltaError, deserializer.parse_text_bytes, |
173 | + osutils.split_lines(root_only_lines)) |
174 | self.assertContainsRe(str(err), 'special revisionid found') |
175 | |
176 | def test_parse_versioned_root_versioned_disabled(self): |
177 | @@ -168,8 +170,9 @@ |
178 | tree_references: true |
179 | None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00 |
180 | """ |
181 | - err = self.assertRaises(InventoryDeltaError, |
182 | - deserializer.parse_text_bytes, root_only_lines) |
183 | + err = self.assertRaises( |
184 | + InventoryDeltaError, deserializer.parse_text_bytes, |
185 | + osutils.split_lines(root_only_lines)) |
186 | self.assertContainsRe(str(err), 'Versioned root found') |
187 | |
188 | def test_parse_unique_root_id_root_versioned_disabled(self): |
189 | @@ -182,12 +185,13 @@ |
190 | None\x00/\x00an-id\x00\x00parent-id\x00dir\x00\x00 |
191 | """ |
192 | err = self.assertRaises(InventoryDeltaError, |
193 | - deserializer.parse_text_bytes, root_only_lines) |
194 | + deserializer.parse_text_bytes, osutils.split_lines(root_only_lines)) |
195 | self.assertContainsRe(str(err), 'Versioned root found') |
196 | |
197 | def test_parse_unversioned_root_versioning_enabled(self): |
198 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
199 | - parse_result = deserializer.parse_text_bytes(root_only_unversioned) |
200 | + parse_result = deserializer.parse_text_bytes( |
201 | + osutils.split_lines(root_only_unversioned)) |
202 | expected_entry = inventory.make_entry( |
203 | 'directory', u'', None, b'TREE_ROOT') |
204 | expected_entry.revision = b'entry-version' |
205 | @@ -200,14 +204,14 @@ |
206 | deserializer = inventory_delta.InventoryDeltaDeserializer( |
207 | allow_versioned_root=False) |
208 | err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta, |
209 | - deserializer.parse_text_bytes, root_only_lines) |
210 | + deserializer.parse_text_bytes, osutils.split_lines(root_only_lines)) |
211 | self.assertEqual("versioned_root not allowed", str(err)) |
212 | |
213 | def test_parse_tree_when_disabled(self): |
214 | deserializer = inventory_delta.InventoryDeltaDeserializer( |
215 | allow_tree_references=False) |
216 | err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta, |
217 | - deserializer.parse_text_bytes, reference_lines) |
218 | + deserializer.parse_text_bytes, osutils.split_lines(reference_lines)) |
219 | self.assertEqual("Tree reference not allowed", str(err)) |
220 | |
221 | def test_parse_tree_when_header_disallows(self): |
222 | @@ -223,7 +227,7 @@ |
223 | None\x00/foo\x00id\x00TREE_ROOT\x00changed\x00tree\x00subtree-version |
224 | """ |
225 | err = self.assertRaises(InventoryDeltaError, |
226 | - deserializer.parse_text_bytes, lines) |
227 | + deserializer.parse_text_bytes, osutils.split_lines(lines)) |
228 | self.assertContainsRe(str(err), 'Tree reference found') |
229 | |
230 | def test_parse_versioned_root_when_header_disallows(self): |
231 | @@ -239,7 +243,7 @@ |
232 | None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir |
233 | """ |
234 | err = self.assertRaises(InventoryDeltaError, |
235 | - deserializer.parse_text_bytes, lines) |
236 | + deserializer.parse_text_bytes, osutils.split_lines(lines)) |
237 | self.assertContainsRe(str(err), 'Versioned root found') |
238 | |
239 | def test_parse_last_line_not_empty(self): |
240 | @@ -248,7 +252,7 @@ |
241 | lines = root_only_lines[:-1] |
242 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
243 | err = self.assertRaises(InventoryDeltaError, |
244 | - deserializer.parse_text_bytes, lines) |
245 | + deserializer.parse_text_bytes, osutils.split_lines(lines)) |
246 | self.assertContainsRe(str(err), 'last line not empty') |
247 | |
248 | def test_parse_invalid_newpath(self): |
249 | @@ -257,7 +261,7 @@ |
250 | lines += b"None\x00bad\x00TREE_ROOT\x00\x00version\x00dir\n" |
251 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
252 | err = self.assertRaises(InventoryDeltaError, |
253 | - deserializer.parse_text_bytes, lines) |
254 | + deserializer.parse_text_bytes, osutils.split_lines(lines)) |
255 | self.assertContainsRe(str(err), 'newpath invalid') |
256 | |
257 | def test_parse_invalid_oldpath(self): |
258 | @@ -266,7 +270,7 @@ |
259 | lines += b"bad\x00/new\x00file-id\x00\x00version\x00dir\n" |
260 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
261 | err = self.assertRaises(InventoryDeltaError, |
262 | - deserializer.parse_text_bytes, lines) |
263 | + deserializer.parse_text_bytes, osutils.split_lines(lines)) |
264 | self.assertContainsRe(str(err), 'oldpath invalid') |
265 | |
266 | def test_parse_new_file(self): |
267 | @@ -277,7 +281,7 @@ |
268 | b"None\x00/new\x00file-id\x00an-id\x00version\x00file\x00123\x00" + |
269 | b"\x00" + fake_sha + b"\n") |
270 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
271 | - parse_result = deserializer.parse_text_bytes(lines) |
272 | + parse_result = deserializer.parse_text_bytes(osutils.split_lines(lines)) |
273 | expected_entry = inventory.make_entry( |
274 | 'file', u'new', b'an-id', b'file-id') |
275 | expected_entry.revision = b'version' |
276 | @@ -292,7 +296,7 @@ |
277 | lines += ( |
278 | b"/old-file\x00None\x00deleted-id\x00\x00null:\x00deleted\x00\x00\n") |
279 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
280 | - parse_result = deserializer.parse_text_bytes(lines) |
281 | + parse_result = deserializer.parse_text_bytes(osutils.split_lines(lines)) |
282 | delta = parse_result[4] |
283 | self.assertEqual( |
284 | (u'old-file', None, b'deleted-id', None), delta[-1]) |
285 | @@ -339,7 +343,7 @@ |
286 | deserializer = inventory_delta.InventoryDeltaDeserializer() |
287 | self.assertEqual( |
288 | (NULL_REVISION, b'entry-version', False, False, delta), |
289 | - deserializer.parse_text_bytes(b''.join(serialized_lines))) |
290 | + deserializer.parse_text_bytes(serialized_lines)) |
291 | |
292 | def test_unversioned_non_root_errors(self): |
293 | old_inv = Inventory(None) |