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
=== modified file 'breezy/bzr/groupcompress.py'
--- breezy/bzr/groupcompress.py 2020-01-31 19:21:09 +0000
+++ breezy/bzr/groupcompress.py 2020-02-09 01:38:14 +0000
@@ -499,7 +499,7 @@
499 if storage_kind == 'chunked':499 if storage_kind == 'chunked':
500 return iter([self._bytes])500 return iter([self._bytes])
501 elif storage_kind == 'lines':501 elif storage_kind == 'lines':
502 return osutils.split_lines(self._bytes)502 return iter(osutils.split_lines(self._bytes))
503 raise errors.UnavailableRepresentation(self.key, storage_kind,503 raise errors.UnavailableRepresentation(self.key, storage_kind,
504 self.storage_kind)504 self.storage_kind)
505505
506506
=== modified file 'breezy/bzr/inventory_delta.py'
--- breezy/bzr/inventory_delta.py 2019-02-02 15:13:30 +0000
+++ breezy/bzr/inventory_delta.py 2020-02-09 01:38:14 +0000
@@ -277,23 +277,25 @@
277 else:277 else:
278 raise InventoryDeltaError("value %(val)r is not a bool", val=value)278 raise InventoryDeltaError("value %(val)r is not a bool", val=value)
279279
280 def parse_text_bytes(self, bytes):280 def parse_text_bytes(self, lines):
281 """Parse the text bytes of a serialized inventory delta.281 """Parse the text bytes of a serialized inventory delta.
282282
283 If versioned_root and/or tree_references flags were set via283 If versioned_root and/or tree_references flags were set via
284 require_flags, then the parsed flags must match or a BzrError will be284 require_flags, then the parsed flags must match or a BzrError will be
285 raised.285 raised.
286286
287 :param bytes: The bytes to parse. This can be obtained by calling287 :param lines: The lines to parse. This can be obtained by calling
288 delta_to_lines and then doing ''.join(delta_lines).288 delta_to_lines.
289 :return: (parent_id, new_id, versioned_root, tree_references,289 :return: (parent_id, new_id, versioned_root, tree_references,
290 inventory_delta)290 inventory_delta)
291 """291 """
292 if not bytes.endswith(b'\n'):292 if not lines:
293 last_line = bytes.rsplit(b'\n', 1)[-1]293 raise InventoryDeltaError(
294 raise InventoryDeltaError(294 'inventory delta is empty')
295 'last line not empty: %(line)r', line=last_line)295 if not lines[-1].endswith(b'\n'):
296 lines = bytes.split(b'\n')[:-1] # discard the last empty line296 raise InventoryDeltaError(
297 'last line not empty: %(line)r', line=lines[-1])
298 lines = [line.rstrip(b'\n') for line in lines] # discard the last empty line
297 if not lines or lines[0] != b'format: %s' % FORMAT_1:299 if not lines or lines[0] != b'format: %s' % FORMAT_1:
298 raise InventoryDeltaError(300 raise InventoryDeltaError(
299 'unknown format %(line)r', line=lines[0:1])301 'unknown format %(line)r', line=lines[0:1])
300302
=== modified file 'breezy/bzr/remote.py'
--- breezy/bzr/remote.py 2020-01-31 10:39:02 +0000
+++ breezy/bzr/remote.py 2020-02-09 01:38:14 +0000
@@ -2048,7 +2048,7 @@
2048 "Unexpected stream %r received" % substream_kind)2048 "Unexpected stream %r received" % substream_kind)
2049 for record in substream:2049 for record in substream:
2050 (parent_id, new_id, versioned_root, tree_references, invdelta) = (2050 (parent_id, new_id, versioned_root, tree_references, invdelta) = (
2051 deserializer.parse_text_bytes(record.get_bytes_as("fulltext")))2051 deserializer.parse_text_bytes(record.get_bytes_as("lines")))
2052 if parent_id != prev_inv.revision_id:2052 if parent_id != prev_inv.revision_id:
2053 raise AssertionError("invalid base %r != %r" % (parent_id,2053 raise AssertionError("invalid base %r != %r" % (parent_id,
2054 prev_inv.revision_id))2054 prev_inv.revision_id))
20552055
=== modified file 'breezy/bzr/versionedfile.py'
--- breezy/bzr/versionedfile.py 2020-01-30 18:07:32 +0000
+++ breezy/bzr/versionedfile.py 2020-02-09 01:38:14 +0000
@@ -143,7 +143,7 @@
143 elif storage_kind == 'lines':143 elif storage_kind == 'lines':
144 if self._chunks_are_lines:144 if self._chunks_are_lines:
145 return iter(self._chunks)145 return iter(self._chunks)
146 return osutils.chunks_to_lines(self._chunks)146 return iter(osutils.chunks_to_lines(self._chunks))
147 raise errors.UnavailableRepresentation(self.key, storage_kind,147 raise errors.UnavailableRepresentation(self.key, storage_kind,
148 self.storage_kind)148 self.storage_kind)
149149
150150
=== modified file 'breezy/bzr/vf_repository.py'
--- breezy/bzr/vf_repository.py 2020-01-31 10:39:02 +0000
+++ breezy/bzr/vf_repository.py 2020-02-09 01:38:14 +0000
@@ -1937,7 +1937,7 @@
1937 target_tree_refs = self.target_repo._format.supports_tree_reference1937 target_tree_refs = self.target_repo._format.supports_tree_reference
1938 for record in substream:1938 for record in substream:
1939 # Insert the delta directly1939 # Insert the delta directly
1940 inventory_delta_bytes = record.get_bytes_as('fulltext')1940 inventory_delta_bytes = record.get_bytes_as('lines')
1941 deserialiser = inventory_delta.InventoryDeltaDeserializer()1941 deserialiser = inventory_delta.InventoryDeltaDeserializer()
1942 try:1942 try:
1943 parse_result = deserialiser.parse_text_bytes(1943 parse_result = deserialiser.parse_text_bytes(
19441944
=== modified file 'breezy/git/annotate.py'
--- breezy/git/annotate.py 2020-01-30 18:07:32 +0000
+++ breezy/git/annotate.py 2020-02-09 01:38:14 +0000
@@ -70,7 +70,7 @@
7070
71 def iter_bytes_as(self, storage_kind):71 def iter_bytes_as(self, storage_kind):
72 if storage_kind == 'lines':72 if storage_kind == 'lines':
73 return osutils.chunks_to_lines(self.store[self.blob_id].as_raw_chunks())73 return iter(osutils.chunks_to_lines(self.store[self.blob_id].as_raw_chunks()))
74 elif storage_kind == 'chunked':74 elif storage_kind == 'chunked':
75 return iter(self.store[self.blob_id].as_raw_chunks())75 return iter(self.store[self.blob_id].as_raw_chunks())
76 raise UnavailableRepresentation(self.key, storage_kind,76 raise UnavailableRepresentation(self.key, storage_kind,
7777
=== modified file 'breezy/tests/test_inventory_delta.py'
--- breezy/tests/test_inventory_delta.py 2018-11-11 04:08:32 +0000
+++ breezy/tests/test_inventory_delta.py 2020-02-09 01:38:14 +0000
@@ -19,6 +19,7 @@
19See doc/developer/inventory.txt for more information.19See doc/developer/inventory.txt for more information.
20"""20"""
2121
22from .. import osutils
22from ..bzr import (23from ..bzr import (
23 inventory,24 inventory,
24 inventory_delta,25 inventory_delta,
@@ -96,28 +97,28 @@
96 def test_parse_no_bytes(self):97 def test_parse_no_bytes(self):
97 deserializer = inventory_delta.InventoryDeltaDeserializer()98 deserializer = inventory_delta.InventoryDeltaDeserializer()
98 err = self.assertRaises(99 err = self.assertRaises(
99 InventoryDeltaError, deserializer.parse_text_bytes, b'')100 InventoryDeltaError, deserializer.parse_text_bytes, [])
100 self.assertContainsRe(str(err), 'last line not empty')101 self.assertContainsRe(str(err), 'inventory delta is empty')
101102
102 def test_parse_bad_format(self):103 def test_parse_bad_format(self):
103 deserializer = inventory_delta.InventoryDeltaDeserializer()104 deserializer = inventory_delta.InventoryDeltaDeserializer()
104 err = self.assertRaises(InventoryDeltaError,105 err = self.assertRaises(InventoryDeltaError,
105 deserializer.parse_text_bytes, b'format: foo\n')106 deserializer.parse_text_bytes, [b'format: foo\n'])
106 self.assertContainsRe(str(err), 'unknown format')107 self.assertContainsRe(str(err), 'unknown format')
107108
108 def test_parse_no_parent(self):109 def test_parse_no_parent(self):
109 deserializer = inventory_delta.InventoryDeltaDeserializer()110 deserializer = inventory_delta.InventoryDeltaDeserializer()
110 err = self.assertRaises(InventoryDeltaError,111 err = self.assertRaises(InventoryDeltaError,
111 deserializer.parse_text_bytes,112 deserializer.parse_text_bytes,
112 b'format: bzr inventory delta v1 (bzr 1.14)\n')113 [b'format: bzr inventory delta v1 (bzr 1.14)\n'])
113 self.assertContainsRe(str(err), 'missing parent: marker')114 self.assertContainsRe(str(err), 'missing parent: marker')
114115
115 def test_parse_no_version(self):116 def test_parse_no_version(self):
116 deserializer = inventory_delta.InventoryDeltaDeserializer()117 deserializer = inventory_delta.InventoryDeltaDeserializer()
117 err = self.assertRaises(InventoryDeltaError,118 err = self.assertRaises(InventoryDeltaError,
118 deserializer.parse_text_bytes,119 deserializer.parse_text_bytes,
119 b'format: bzr inventory delta v1 (bzr 1.14)\n'120 [b'format: bzr inventory delta v1 (bzr 1.14)\n',
120 b'parent: null:\n')121 b'parent: null:\n'])
121 self.assertContainsRe(str(err), 'missing version: marker')122 self.assertContainsRe(str(err), 'missing version: marker')
122123
123 def test_parse_duplicate_key_errors(self):124 def test_parse_duplicate_key_errors(self):
@@ -132,12 +133,12 @@
132None\x00/\x00an-id\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00133None\x00/\x00an-id\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00
133"""134"""
134 err = self.assertRaises(InventoryDeltaError,135 err = self.assertRaises(InventoryDeltaError,
135 deserializer.parse_text_bytes, double_root_lines)136 deserializer.parse_text_bytes, osutils.split_lines(double_root_lines))
136 self.assertContainsRe(str(err), 'duplicate file id')137 self.assertContainsRe(str(err), 'duplicate file id')
137138
138 def test_parse_versioned_root_only(self):139 def test_parse_versioned_root_only(self):
139 deserializer = inventory_delta.InventoryDeltaDeserializer()140 deserializer = inventory_delta.InventoryDeltaDeserializer()
140 parse_result = deserializer.parse_text_bytes(root_only_lines)141 parse_result = deserializer.parse_text_bytes(osutils.split_lines(root_only_lines))
141 expected_entry = inventory.make_entry(142 expected_entry = inventory.make_entry(
142 'directory', u'', None, b'an-id')143 'directory', u'', None, b'an-id')
143 expected_entry.revision = b'a@e\xc3\xa5ample.com--2004'144 expected_entry.revision = b'a@e\xc3\xa5ample.com--2004'
@@ -155,8 +156,9 @@
155tree_references: true156tree_references: true
156None\x00/\x00TREE_ROOT\x00\x00null:\x00dir\x00\x00157None\x00/\x00TREE_ROOT\x00\x00null:\x00dir\x00\x00
157"""158"""
158 err = self.assertRaises(InventoryDeltaError,159 err = self.assertRaises(
159 deserializer.parse_text_bytes, root_only_lines)160 InventoryDeltaError, deserializer.parse_text_bytes,
161 osutils.split_lines(root_only_lines))
160 self.assertContainsRe(str(err), 'special revisionid found')162 self.assertContainsRe(str(err), 'special revisionid found')
161163
162 def test_parse_versioned_root_versioned_disabled(self):164 def test_parse_versioned_root_versioned_disabled(self):
@@ -168,8 +170,9 @@
168tree_references: true170tree_references: true
169None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00171None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00
170"""172"""
171 err = self.assertRaises(InventoryDeltaError,173 err = self.assertRaises(
172 deserializer.parse_text_bytes, root_only_lines)174 InventoryDeltaError, deserializer.parse_text_bytes,
175 osutils.split_lines(root_only_lines))
173 self.assertContainsRe(str(err), 'Versioned root found')176 self.assertContainsRe(str(err), 'Versioned root found')
174177
175 def test_parse_unique_root_id_root_versioned_disabled(self):178 def test_parse_unique_root_id_root_versioned_disabled(self):
@@ -182,12 +185,13 @@
182None\x00/\x00an-id\x00\x00parent-id\x00dir\x00\x00185None\x00/\x00an-id\x00\x00parent-id\x00dir\x00\x00
183"""186"""
184 err = self.assertRaises(InventoryDeltaError,187 err = self.assertRaises(InventoryDeltaError,
185 deserializer.parse_text_bytes, root_only_lines)188 deserializer.parse_text_bytes, osutils.split_lines(root_only_lines))
186 self.assertContainsRe(str(err), 'Versioned root found')189 self.assertContainsRe(str(err), 'Versioned root found')
187190
188 def test_parse_unversioned_root_versioning_enabled(self):191 def test_parse_unversioned_root_versioning_enabled(self):
189 deserializer = inventory_delta.InventoryDeltaDeserializer()192 deserializer = inventory_delta.InventoryDeltaDeserializer()
190 parse_result = deserializer.parse_text_bytes(root_only_unversioned)193 parse_result = deserializer.parse_text_bytes(
194 osutils.split_lines(root_only_unversioned))
191 expected_entry = inventory.make_entry(195 expected_entry = inventory.make_entry(
192 'directory', u'', None, b'TREE_ROOT')196 'directory', u'', None, b'TREE_ROOT')
193 expected_entry.revision = b'entry-version'197 expected_entry.revision = b'entry-version'
@@ -200,14 +204,14 @@
200 deserializer = inventory_delta.InventoryDeltaDeserializer(204 deserializer = inventory_delta.InventoryDeltaDeserializer(
201 allow_versioned_root=False)205 allow_versioned_root=False)
202 err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta,206 err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta,
203 deserializer.parse_text_bytes, root_only_lines)207 deserializer.parse_text_bytes, osutils.split_lines(root_only_lines))
204 self.assertEqual("versioned_root not allowed", str(err))208 self.assertEqual("versioned_root not allowed", str(err))
205209
206 def test_parse_tree_when_disabled(self):210 def test_parse_tree_when_disabled(self):
207 deserializer = inventory_delta.InventoryDeltaDeserializer(211 deserializer = inventory_delta.InventoryDeltaDeserializer(
208 allow_tree_references=False)212 allow_tree_references=False)
209 err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta,213 err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta,
210 deserializer.parse_text_bytes, reference_lines)214 deserializer.parse_text_bytes, osutils.split_lines(reference_lines))
211 self.assertEqual("Tree reference not allowed", str(err))215 self.assertEqual("Tree reference not allowed", str(err))
212216
213 def test_parse_tree_when_header_disallows(self):217 def test_parse_tree_when_header_disallows(self):
@@ -223,7 +227,7 @@
223None\x00/foo\x00id\x00TREE_ROOT\x00changed\x00tree\x00subtree-version227None\x00/foo\x00id\x00TREE_ROOT\x00changed\x00tree\x00subtree-version
224"""228"""
225 err = self.assertRaises(InventoryDeltaError,229 err = self.assertRaises(InventoryDeltaError,
226 deserializer.parse_text_bytes, lines)230 deserializer.parse_text_bytes, osutils.split_lines(lines))
227 self.assertContainsRe(str(err), 'Tree reference found')231 self.assertContainsRe(str(err), 'Tree reference found')
228232
229 def test_parse_versioned_root_when_header_disallows(self):233 def test_parse_versioned_root_when_header_disallows(self):
@@ -239,7 +243,7 @@
239None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir243None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir
240"""244"""
241 err = self.assertRaises(InventoryDeltaError,245 err = self.assertRaises(InventoryDeltaError,
242 deserializer.parse_text_bytes, lines)246 deserializer.parse_text_bytes, osutils.split_lines(lines))
243 self.assertContainsRe(str(err), 'Versioned root found')247 self.assertContainsRe(str(err), 'Versioned root found')
244248
245 def test_parse_last_line_not_empty(self):249 def test_parse_last_line_not_empty(self):
@@ -248,7 +252,7 @@
248 lines = root_only_lines[:-1]252 lines = root_only_lines[:-1]
249 deserializer = inventory_delta.InventoryDeltaDeserializer()253 deserializer = inventory_delta.InventoryDeltaDeserializer()
250 err = self.assertRaises(InventoryDeltaError,254 err = self.assertRaises(InventoryDeltaError,
251 deserializer.parse_text_bytes, lines)255 deserializer.parse_text_bytes, osutils.split_lines(lines))
252 self.assertContainsRe(str(err), 'last line not empty')256 self.assertContainsRe(str(err), 'last line not empty')
253257
254 def test_parse_invalid_newpath(self):258 def test_parse_invalid_newpath(self):
@@ -257,7 +261,7 @@
257 lines += b"None\x00bad\x00TREE_ROOT\x00\x00version\x00dir\n"261 lines += b"None\x00bad\x00TREE_ROOT\x00\x00version\x00dir\n"
258 deserializer = inventory_delta.InventoryDeltaDeserializer()262 deserializer = inventory_delta.InventoryDeltaDeserializer()
259 err = self.assertRaises(InventoryDeltaError,263 err = self.assertRaises(InventoryDeltaError,
260 deserializer.parse_text_bytes, lines)264 deserializer.parse_text_bytes, osutils.split_lines(lines))
261 self.assertContainsRe(str(err), 'newpath invalid')265 self.assertContainsRe(str(err), 'newpath invalid')
262266
263 def test_parse_invalid_oldpath(self):267 def test_parse_invalid_oldpath(self):
@@ -266,7 +270,7 @@
266 lines += b"bad\x00/new\x00file-id\x00\x00version\x00dir\n"270 lines += b"bad\x00/new\x00file-id\x00\x00version\x00dir\n"
267 deserializer = inventory_delta.InventoryDeltaDeserializer()271 deserializer = inventory_delta.InventoryDeltaDeserializer()
268 err = self.assertRaises(InventoryDeltaError,272 err = self.assertRaises(InventoryDeltaError,
269 deserializer.parse_text_bytes, lines)273 deserializer.parse_text_bytes, osutils.split_lines(lines))
270 self.assertContainsRe(str(err), 'oldpath invalid')274 self.assertContainsRe(str(err), 'oldpath invalid')
271275
272 def test_parse_new_file(self):276 def test_parse_new_file(self):
@@ -277,7 +281,7 @@
277 b"None\x00/new\x00file-id\x00an-id\x00version\x00file\x00123\x00" +281 b"None\x00/new\x00file-id\x00an-id\x00version\x00file\x00123\x00" +
278 b"\x00" + fake_sha + b"\n")282 b"\x00" + fake_sha + b"\n")
279 deserializer = inventory_delta.InventoryDeltaDeserializer()283 deserializer = inventory_delta.InventoryDeltaDeserializer()
280 parse_result = deserializer.parse_text_bytes(lines)284 parse_result = deserializer.parse_text_bytes(osutils.split_lines(lines))
281 expected_entry = inventory.make_entry(285 expected_entry = inventory.make_entry(
282 'file', u'new', b'an-id', b'file-id')286 'file', u'new', b'an-id', b'file-id')
283 expected_entry.revision = b'version'287 expected_entry.revision = b'version'
@@ -292,7 +296,7 @@
292 lines += (296 lines += (
293 b"/old-file\x00None\x00deleted-id\x00\x00null:\x00deleted\x00\x00\n")297 b"/old-file\x00None\x00deleted-id\x00\x00null:\x00deleted\x00\x00\n")
294 deserializer = inventory_delta.InventoryDeltaDeserializer()298 deserializer = inventory_delta.InventoryDeltaDeserializer()
295 parse_result = deserializer.parse_text_bytes(lines)299 parse_result = deserializer.parse_text_bytes(osutils.split_lines(lines))
296 delta = parse_result[4]300 delta = parse_result[4]
297 self.assertEqual(301 self.assertEqual(
298 (u'old-file', None, b'deleted-id', None), delta[-1])302 (u'old-file', None, b'deleted-id', None), delta[-1])
@@ -339,7 +343,7 @@
339 deserializer = inventory_delta.InventoryDeltaDeserializer()343 deserializer = inventory_delta.InventoryDeltaDeserializer()
340 self.assertEqual(344 self.assertEqual(
341 (NULL_REVISION, b'entry-version', False, False, delta),345 (NULL_REVISION, b'entry-version', False, False, delta),
342 deserializer.parse_text_bytes(b''.join(serialized_lines)))346 deserializer.parse_text_bytes(serialized_lines))
343347
344 def test_unversioned_non_root_errors(self):348 def test_unversioned_non_root_errors(self):
345 old_inv = Inventory(None)349 old_inv = Inventory(None)

Subscribers

People subscribed via source and target branches