Merge lp:~jelmer/brz/chk-inventory-iter into lp:brz

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
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)

Subscribers

People subscribed via source and target branches