Merge lp:~jelmer/brz/python3-xml into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merged at revision: 6982
Proposed branch: lp:~jelmer/brz/python3-xml
Merge into: lp:brz
Prerequisite: lp:~jelmer/brz/python3-b
Diff against target: 400 lines (+100/-49)
4 files modified
breezy/bzr/xml8.py (+4/-8)
breezy/bzr/xml_serializer.py (+12/-12)
breezy/tests/test_xml.py (+30/-29)
python3.passing (+54/-0)
To merge this branch: bzr merge lp:~jelmer/brz/python3-xml
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+346434@code.launchpad.net

Commit message

Port breezy.bzr.xml* to Python3.

Description of the change

Port breezy.bzr.xml* to Python3.

To post a comment you must log in.
Revision history for this message
Martin Packman (gz) wrote :

I'm not sure on some of the bare encode() calls here, but it's probably on the caller if they pass non-ascii values?

review: Approve
Revision history for this message
Jelmer Vernooij (jelmer) wrote :

> I'm not sure on some of the bare encode() calls here, but it's probably on the
> caller if they pass non-ascii values?
Yeah; this should be ascii only. At some point perhaps we can all just make them regular strings.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'breezy/bzr/xml8.py'
--- breezy/bzr/xml8.py 2018-05-13 02:18:13 +0000
+++ breezy/bzr/xml8.py 2018-05-22 02:02:43 +0000
@@ -187,17 +187,15 @@
187 # them.187 # them.
188 decode_utf8 = cache_utf8.decode188 decode_utf8 = cache_utf8.decode
189 revision_id = rev.revision_id189 revision_id = rev.revision_id
190 if isinstance(revision_id, str):
191 revision_id = decode_utf8(revision_id)
192 format_num = self.format_num190 format_num = self.format_num
193 if self.revision_format_num is not None:191 if self.revision_format_num is not None:
194 format_num = self.revision_format_num192 format_num = self.revision_format_num
195 root = Element('revision',193 root = Element('revision',
196 committer = rev.committer,194 committer = rev.committer,
197 timestamp = '%.3f' % rev.timestamp,195 timestamp = '%.3f' % rev.timestamp,
198 revision_id = revision_id,196 revision_id = decode_utf8(revision_id),
199 inventory_sha1 = rev.inventory_sha1,197 inventory_sha1 = rev.inventory_sha1,
200 format=format_num,198 format=format_num.decode(),
201 )199 )
202 if rev.timezone is not None:200 if rev.timezone is not None:
203 root.set('timezone', str(rev.timezone))201 root.set('timezone', str(rev.timezone))
@@ -212,9 +210,7 @@
212 _mod_revision.check_not_reserved_id(parent_id)210 _mod_revision.check_not_reserved_id(parent_id)
213 p = SubElement(pelts, 'revision_ref')211 p = SubElement(pelts, 'revision_ref')
214 p.tail = '\n'212 p.tail = '\n'
215 if isinstance(parent_id, str):213 p.set('revision_id', decode_utf8(parent_id))
216 parent_id = decode_utf8(parent_id)
217 p.set('revision_id', parent_id)
218 if rev.properties:214 if rev.properties:
219 self._pack_revision_properties(rev, root)215 self._pack_revision_properties(rev, root)
220 return root216 return root
@@ -248,7 +244,7 @@
248 if self.revision_format_num is not None:244 if self.revision_format_num is not None:
249 format_num = self.revision_format_num245 format_num = self.revision_format_num
250 if format is not None:246 if format is not None:
251 if format != format_num:247 if format.encode() != format_num:
252 raise BzrError("invalid format version %r on revision"248 raise BzrError("invalid format version %r on revision"
253 % format)249 % format)
254 get_cached = get_utf8_or_ascii250 get_cached = get_utf8_or_ascii
255251
=== modified file 'breezy/bzr/xml_serializer.py'
--- breezy/bzr/xml_serializer.py 2018-02-18 15:21:06 +0000
+++ breezy/bzr/xml_serializer.py 2018-05-22 02:02:43 +0000
@@ -100,7 +100,7 @@
100 self._write_element(self._pack_revision(rev), f)100 self._write_element(self._pack_revision(rev), f)
101101
102 def write_revision_to_string(self, rev):102 def write_revision_to_string(self, rev):
103 return tostring(self._pack_revision(rev)) + '\n'103 return tostring(self._pack_revision(rev)) + b'\n'
104104
105 def read_revision(self, f):105 def read_revision(self, f):
106 return self._unpack_revision(self._read_element(f))106 return self._unpack_revision(self._read_element(f))
@@ -110,7 +110,7 @@
110110
111 def _write_element(self, elt, f):111 def _write_element(self, elt, f):
112 ElementTree(elt).write(f, 'utf-8')112 ElementTree(elt).write(f, 'utf-8')
113 f.write('\n')113 f.write(b'\n')
114114
115 def _read_element(self, f):115 def _read_element(self, f):
116 return ElementTree().parse(f)116 return ElementTree().parse(f)
@@ -195,9 +195,9 @@
195 decode back into Unicode, and then use the XML escape code.195 decode back into Unicode, and then use the XML escape code.
196 """196 """
197 try:197 try:
198 return _map[match.group()]198 return _map[match.group().decode('ascii', 'replace')].encode()
199 except KeyError:199 except KeyError:
200 return ''.join('&#%d;' % ord(uni_chr)200 return b''.join(b'&#%d;' % ord(uni_chr)
201 for uni_chr in match.group().decode('utf8'))201 for uni_chr in match.group().decode('utf8'))
202202
203203
@@ -209,7 +209,7 @@
209 # to check if None, rather than try/KeyError209 # to check if None, rather than try/KeyError
210 text = _map.get(unicode_or_utf8_str)210 text = _map.get(unicode_or_utf8_str)
211 if text is None:211 if text is None:
212 if unicode_or_utf8_str.__class__ is text_type:212 if isinstance(unicode_or_utf8_str, text_type):
213 # The alternative policy is to do a regular UTF8 encoding213 # The alternative policy is to do a regular UTF8 encoding
214 # and then escape only XML meta characters.214 # and then escape only XML meta characters.
215 # Performance is equivalent once you use cache_utf8. *However*215 # Performance is equivalent once you use cache_utf8. *However*
@@ -217,7 +217,7 @@
217 # of bzr. So no net gain. (Perhaps the read code would handle utf8217 # of bzr. So no net gain. (Perhaps the read code would handle utf8
218 # better than entity escapes, but cElementTree seems to do just fine218 # better than entity escapes, but cElementTree seems to do just fine
219 # either way)219 # either way)
220 text = bytes(_unicode_re.sub(_unicode_escape_replace, unicode_or_utf8_str)) + b'"'220 text = _unicode_re.sub(_unicode_escape_replace, unicode_or_utf8_str).encode() + b'"'
221 else:221 else:
222 # Plain strings are considered to already be in utf-8 so we do a222 # Plain strings are considered to already be in utf-8 so we do a
223 # slightly different method for escaping.223 # slightly different method for escaping.
@@ -312,11 +312,11 @@
312 parent_id)312 parent_id)
313 ie.symlink_target = elt_get('symlink_target')313 ie.symlink_target = elt_get('symlink_target')
314 elif kind == 'tree-reference':314 elif kind == 'tree-reference':
315 file_id = elt.attrib['file_id']315 file_id = get_utf8_or_ascii(elt.attrib['file_id'])
316 name = elt.attrib['name']316 name = elt.attrib['name']
317 parent_id = elt.attrib['parent_id']317 parent_id = get_utf8_or_ascii(elt.attrib['parent_id'])
318 revision = elt.get('revision')318 revision = get_utf8_or_ascii(elt.get('revision'))
319 reference_revision = elt.get('reference_revision')319 reference_revision = get_utf8_or_ascii(elt.get('reference_revision'))
320 ie = inventory.TreeReference(file_id, name, parent_id, revision,320 ie = inventory.TreeReference(file_id, name, parent_id, revision,
321 reference_revision)321 reference_revision)
322 else:322 else:
@@ -346,7 +346,7 @@
346 if elt.tag != 'inventory':346 if elt.tag != 'inventory':
347 raise errors.UnexpectedInventoryFormat('Root tag is %r' % elt.tag)347 raise errors.UnexpectedInventoryFormat('Root tag is %r' % elt.tag)
348 format = elt.get('format')348 format = elt.get('format')
349 if format != format_num:349 if format.encode() != format_num:
350 raise errors.UnexpectedInventoryFormat('Invalid format version %r'350 raise errors.UnexpectedInventoryFormat('Invalid format version %r'
351 % format)351 % format)
352 revision_id = elt.get('revision_id')352 revision_id = elt.get('revision_id')
@@ -387,7 +387,7 @@
387 b'text_sha1="%s" text_size="%d" />\n' % (387 b'text_sha1="%s" text_size="%d" />\n' % (
388 executable, encode_and_escape(ie.file_id),388 executable, encode_and_escape(ie.file_id),
389 encode_and_escape(ie.name), parent_str, parent_id,389 encode_and_escape(ie.name), parent_str, parent_id,
390 encode_and_escape(ie.revision), ie.text_sha1,390 encode_and_escape(ie.revision), ie.text_sha1.encode(),
391 ie.text_size))391 ie.text_size))
392 else:392 else:
393 append(b'<file%s file_id="%s name="%s%s%s />\n' % (393 append(b'<file%s file_id="%s name="%s%s%s />\n' % (
394394
=== modified file 'breezy/tests/test_xml.py'
--- breezy/tests/test_xml.py 2018-03-25 11:39:36 +0000
+++ breezy/tests/test_xml.py 2018-05-22 02:02:43 +0000
@@ -27,6 +27,7 @@
27 )27 )
28from ..sixish import (28from ..sixish import (
29 BytesIO,29 BytesIO,
30 text_type,
30 )31 )
31from ..bzr.inventory import Inventory32from ..bzr.inventory import Inventory
32from . import TestCase33from . import TestCase
@@ -208,7 +209,7 @@
208 eq(len(rev.parent_ids), 1)209 eq(len(rev.parent_ids), 1)
209 eq(rev.timezone, 36000)210 eq(rev.timezone, 36000)
210 eq(rev.parent_ids[0],211 eq(rev.parent_ids[0],
211 "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")212 b"mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
212213
213 def test_unpack_revision_5_utc(self):214 def test_unpack_revision_5_utc(self):
214 inp = BytesIO(_revision_v5_utc)215 inp = BytesIO(_revision_v5_utc)
@@ -219,7 +220,7 @@
219 eq(len(rev.parent_ids), 1)220 eq(len(rev.parent_ids), 1)
220 eq(rev.timezone, 0)221 eq(rev.timezone, 0)
221 eq(rev.parent_ids[0],222 eq(rev.parent_ids[0],
222 "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")223 b"mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
223224
224 def test_unpack_inventory_5(self):225 def test_unpack_inventory_5(self):
225 """Unpack canned new-style inventory"""226 """Unpack canned new-style inventory"""
@@ -227,9 +228,9 @@
227 inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)228 inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)
228 eq = self.assertEqual229 eq = self.assertEqual
229 eq(len(inv), 4)230 eq(len(inv), 4)
230 ie = inv.get_entry('bar-20050824000535-6bc48cfad47ed134')231 ie = inv.get_entry(b'bar-20050824000535-6bc48cfad47ed134')
231 eq(ie.kind, 'file')232 eq(ie.kind, 'file')
232 eq(ie.revision, 'mbp@foo-00')233 eq(ie.revision, b'mbp@foo-00')
233 eq(ie.name, 'bar')234 eq(ie.name, 'bar')
234 eq(inv.get_entry(ie.parent_id).kind, 'directory')235 eq(inv.get_entry(ie.parent_id).kind, 'directory')
235236
@@ -239,17 +240,17 @@
239 inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)240 inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)
240 eq = self.assertEqual241 eq = self.assertEqual
241 eq(len(inv), 4)242 eq(len(inv), 4)
242 eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')243 eq(inv.revision_id, b'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
243 ie = inv.get_entry('bar-20050824000535-6bc48cfad47ed134')244 ie = inv.get_entry(b'bar-20050824000535-6bc48cfad47ed134')
244 eq(ie.kind, 'file')245 eq(ie.kind, 'file')
245 eq(ie.revision, 'mbp@foo-00')246 eq(ie.revision, b'mbp@foo-00')
246 eq(ie.name, 'bar')247 eq(ie.name, 'bar')
247 eq(inv.get_entry(ie.parent_id).kind, 'directory')248 eq(inv.get_entry(ie.parent_id).kind, 'directory')
248249
249 def test_unpack_inventory_5a(self):250 def test_unpack_inventory_5a(self):
250 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(251 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
251 _inventory_v5a, revision_id='test-rev-id')252 _inventory_v5a, revision_id=b'test-rev-id')
252 self.assertEqual('test-rev-id', inv.root.revision)253 self.assertEqual(b'test-rev-id', inv.root.revision)
253254
254 def test_unpack_inventory_5a_cache_and_copy(self):255 def test_unpack_inventory_5a_cache_and_copy(self):
255 # Passing an entry_cache should get populated with the objects256 # Passing an entry_cache should get populated with the objects
@@ -257,7 +258,7 @@
257 # False258 # False
258 entry_cache = fifo_cache.FIFOCache()259 entry_cache = fifo_cache.FIFOCache()
259 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(260 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
260 _inventory_v5a, revision_id='test-rev-id',261 _inventory_v5a, revision_id=b'test-rev-id',
261 entry_cache=entry_cache, return_from_cache=False)262 entry_cache=entry_cache, return_from_cache=False)
262 for entry in inv.iter_just_entries():263 for entry in inv.iter_just_entries():
263 key = (entry.file_id, entry.revision)264 key = (entry.file_id, entry.revision)
@@ -273,7 +274,7 @@
273 # True274 # True
274 entry_cache = fifo_cache.FIFOCache()275 entry_cache = fifo_cache.FIFOCache()
275 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(276 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
276 _inventory_v5a, revision_id='test-rev-id',277 _inventory_v5a, revision_id=b'test-rev-id',
277 entry_cache=entry_cache, return_from_cache=True)278 entry_cache=entry_cache, return_from_cache=True)
278 for entry in inv.iter_just_entries():279 for entry in inv.iter_just_entries():
279 key = (entry.file_id, entry.revision)280 key = (entry.file_id, entry.revision)
@@ -285,8 +286,8 @@
285286
286 def test_unpack_inventory_5b(self):287 def test_unpack_inventory_5b(self):
287 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(288 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
288 _inventory_v5b, revision_id='test-rev-id')289 _inventory_v5b, revision_id=b'test-rev-id')
289 self.assertEqual('a-rev-id', inv.root.revision)290 self.assertEqual(b'a-rev-id', inv.root.revision)
290291
291 def test_repack_inventory_5(self):292 def test_repack_inventory_5(self):
292 inp = BytesIO(_committed_inv_v5)293 inp = BytesIO(_committed_inv_v5)
@@ -336,7 +337,7 @@
336 outp = BytesIO()337 outp = BytesIO()
337 breezy.bzr.xml5.serializer_v5.write_revision(rev, outp)338 breezy.bzr.xml5.serializer_v5.write_revision(rev, outp)
338 outfile_contents = outp.getvalue()339 outfile_contents = outp.getvalue()
339 self.assertEqual(outfile_contents[-1], '\n')340 self.assertEqual(outfile_contents[-1:], b'\n')
340 self.assertEqualDiff(outfile_contents, breezy.bzr.xml5.serializer_v5.write_revision_to_string(rev))341 self.assertEqualDiff(outfile_contents, breezy.bzr.xml5.serializer_v5.write_revision_to_string(rev))
341 self.assertEqualDiff(outfile_contents, _expected_rev_v5)342 self.assertEqualDiff(outfile_contents, _expected_rev_v5)
342343
@@ -459,13 +460,13 @@
459 """Parsed revision_ids should all be utf-8 strings, not unicode."""460 """Parsed revision_ids should all be utf-8 strings, not unicode."""
460 s_v5 = breezy.bzr.xml5.serializer_v5461 s_v5 = breezy.bzr.xml5.serializer_v5
461 rev = s_v5.read_revision_from_string(_revision_utf8_v5)462 rev = s_v5.read_revision_from_string(_revision_utf8_v5)
462 self.assertEqual('erik@b\xc3\xa5gfors-02', rev.revision_id)463 self.assertEqual(b'erik@b\xc3\xa5gfors-02', rev.revision_id)
463 self.assertIsInstance(rev.revision_id, str)464 self.assertIsInstance(rev.revision_id, bytes)
464 self.assertEqual(['erik@b\xc3\xa5gfors-01'], rev.parent_ids)465 self.assertEqual([b'erik@b\xc3\xa5gfors-01'], rev.parent_ids)
465 for parent_id in rev.parent_ids:466 for parent_id in rev.parent_ids:
466 self.assertIsInstance(parent_id, str)467 self.assertIsInstance(parent_id, bytes)
467 self.assertEqual(u'Include \xb5nicode characters\n', rev.message)468 self.assertEqual(u'Include \xb5nicode characters\n', rev.message)
468 self.assertIsInstance(rev.message, unicode)469 self.assertIsInstance(rev.message, text_type)
469470
470 # ie.revision should either be None or a utf-8 revision id471 # ie.revision should either be None or a utf-8 revision id
471 inv = s_v5.read_inventory_from_string(_inventory_utf8_v5)472 inv = s_v5.read_inventory_from_string(_inventory_utf8_v5)
@@ -481,21 +482,21 @@
481 (u's\xb5bdir/b\xe5r', fid_bar2, fid_sub, rev_id_2),482 (u's\xb5bdir/b\xe5r', fid_bar2, fid_sub, rev_id_2),
482 ]483 ]
483 self.assertEqual(rev_id_2, inv.revision_id)484 self.assertEqual(rev_id_2, inv.revision_id)
484 self.assertIsInstance(inv.revision_id, str)485 self.assertIsInstance(inv.revision_id, bytes)
485486
486 actual = list(inv.iter_entries_by_dir())487 actual = list(inv.iter_entries_by_dir())
487 for ((exp_path, exp_file_id, exp_parent_id, exp_rev_id),488 for ((exp_path, exp_file_id, exp_parent_id, exp_rev_id),
488 (act_path, act_ie)) in zip(expected, actual):489 (act_path, act_ie)) in zip(expected, actual):
489 self.assertEqual(exp_path, act_path)490 self.assertEqual(exp_path, act_path)
490 self.assertIsInstance(act_path, unicode)491 self.assertIsInstance(act_path, text_type)
491 self.assertEqual(exp_file_id, act_ie.file_id)492 self.assertEqual(exp_file_id, act_ie.file_id)
492 self.assertIsInstance(act_ie.file_id, str)493 self.assertIsInstance(act_ie.file_id, bytes)
493 self.assertEqual(exp_parent_id, act_ie.parent_id)494 self.assertEqual(exp_parent_id, act_ie.parent_id)
494 if exp_parent_id is not None:495 if exp_parent_id is not None:
495 self.assertIsInstance(act_ie.parent_id, str)496 self.assertIsInstance(act_ie.parent_id, bytes)
496 self.assertEqual(exp_rev_id, act_ie.revision)497 self.assertEqual(exp_rev_id, act_ie.revision)
497 if exp_rev_id is not None:498 if exp_rev_id is not None:
498 self.assertIsInstance(act_ie.revision, str)499 self.assertIsInstance(act_ie.revision, bytes)
499500
500 self.assertEqual(len(expected), len(actual))501 self.assertEqual(len(expected), len(actual))
501502
@@ -514,24 +515,24 @@
514 # are being used in xml attributes, and by returning it now, we have to515 # are being used in xml attributes, and by returning it now, we have to
515 # do fewer string operations later.516 # do fewer string operations later.
516 val = breezy.bzr.xml_serializer.encode_and_escape('foo bar')517 val = breezy.bzr.xml_serializer.encode_and_escape('foo bar')
517 self.assertEqual('foo bar"', val)518 self.assertEqual(b'foo bar"', val)
518 # The second time should be cached519 # The second time should be cached
519 val2 = breezy.bzr.xml_serializer.encode_and_escape('foo bar')520 val2 = breezy.bzr.xml_serializer.encode_and_escape('foo bar')
520 self.assertIs(val2, val)521 self.assertIs(val2, val)
521522
522 def test_ascii_with_xml(self):523 def test_ascii_with_xml(self):
523 self.assertEqual('&amp;&apos;&quot;&lt;&gt;"',524 self.assertEqual(b'&amp;&apos;&quot;&lt;&gt;"',
524 breezy.bzr.xml_serializer.encode_and_escape('&\'"<>'))525 breezy.bzr.xml_serializer.encode_and_escape('&\'"<>'))
525526
526 def test_utf8_with_xml(self):527 def test_utf8_with_xml(self):
527 # u'\xb5\xe5&\u062c'528 # u'\xb5\xe5&\u062c'
528 utf8_str = '\xc2\xb5\xc3\xa5&\xd8\xac'529 utf8_str = b'\xc2\xb5\xc3\xa5&\xd8\xac'
529 self.assertEqual('&#181;&#229;&amp;&#1580;"',530 self.assertEqual(b'&#181;&#229;&amp;&#1580;"',
530 breezy.bzr.xml_serializer.encode_and_escape(utf8_str))531 breezy.bzr.xml_serializer.encode_and_escape(utf8_str))
531532
532 def test_unicode(self):533 def test_unicode(self):
533 uni_str = u'\xb5\xe5&\u062c'534 uni_str = u'\xb5\xe5&\u062c'
534 self.assertEqual('&#181;&#229;&amp;&#1580;"',535 self.assertEqual(b'&#181;&#229;&amp;&#1580;"',
535 breezy.bzr.xml_serializer.encode_and_escape(uni_str))536 breezy.bzr.xml_serializer.encode_and_escape(uni_str))
536537
537538
538539
=== modified file 'python3.passing'
--- python3.passing 2018-05-19 14:54:22 +0000
+++ python3.passing 2018-05-22 02:02:43 +0000
@@ -56,11 +56,35 @@
56breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(BranchReferenceFormat)56breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(BranchReferenceFormat)
57breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(BzrBranchFormat7)57breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(BzrBranchFormat7)
58breezy.plugins.weave_fmt.test_bzrdir.TestBranchFormat4.test_no_metadir_support58breezy.plugins.weave_fmt.test_bzrdir.TestBranchFormat4.test_no_metadir_support
59breezy.plugins.weave_fmt.test_bzrdir.TestBranchFormat4.test_supports_bzrdir_6
60breezy.plugins.weave_fmt.test_bzrdir.TestFormat5.test_can_convert
61breezy.plugins.weave_fmt.test_bzrdir.TestFormat5.test_needs_conversion
62breezy.plugins.weave_fmt.test_bzrdir.TestFormat5.test_same_lockfiles_between_tree_repo_branch
63breezy.plugins.weave_fmt.test_bzrdir.TestFormat6.test_can_convert
64breezy.plugins.weave_fmt.test_bzrdir.TestFormat6.test_needs_conversion
65breezy.plugins.weave_fmt.test_bzrdir.TestFormat6.test_same_lockfiles_between_tree_repo_branch
66breezy.plugins.weave_fmt.test_bzrdir.V4WeaveBundleTester.test_crlf_bundle
67breezy.plugins.weave_fmt.test_bzrdir.V4WeaveBundleTester.test_malformed
68breezy.plugins.weave_fmt.test_bzrdir.V4WeaveBundleTester.test_non_bundle
69breezy.plugins.weave_fmt.test_repository.TestFormat6.test_attribute__fetch_order
70breezy.plugins.weave_fmt.test_repository.TestFormat6.test_attribute__fetch_reconcile
71breezy.plugins.weave_fmt.test_repository.TestFormat6.test_attribute__fetch_uses_deltas
72breezy.plugins.weave_fmt.test_repository.TestFormat6.test_no_ancestry_weave
73breezy.plugins.weave_fmt.test_repository.TestFormat6.test_supports_external_lookups
74breezy.plugins.weave_fmt.test_repository.TestFormat7.test_attribute__fetch_order
75breezy.plugins.weave_fmt.test_repository.TestFormat7.test_attribute__fetch_reconcile
76breezy.plugins.weave_fmt.test_repository.TestFormat7.test_attribute__fetch_uses_deltas
77breezy.plugins.weave_fmt.test_repository.TestFormat7.test_creates_lockdir
78breezy.plugins.weave_fmt.test_repository.TestFormat7.test_supports_external_lookups
79breezy.plugins.weave_fmt.test_repository.TestFormat7.test_uses_lockdir
59breezy.plugins.weave_fmt.test_repository.TestInterWeaveRepo.test_is_compatible_and_registered80breezy.plugins.weave_fmt.test_repository.TestInterWeaveRepo.test_is_compatible_and_registered
81breezy.plugins.weave_fmt.test_repository.TestSerializer.test_canned_inventory
60breezy.plugins.weave_fmt.test_repository.TestSerializer.test_registry82breezy.plugins.weave_fmt.test_repository.TestSerializer.test_registry
83breezy.plugins.weave_fmt.test_repository.TestSerializer.test_unpack_revision
61breezy.plugins.weave_fmt.test_store.TestCompressedTextStore.test_multiple_add84breezy.plugins.weave_fmt.test_store.TestCompressedTextStore.test_multiple_add
62breezy.plugins.weave_fmt.test_store.TestCompressedTextStore.test_total_size85breezy.plugins.weave_fmt.test_store.TestCompressedTextStore.test_total_size
63breezy.plugins.weave_fmt.test_store.TestInstrumentedTransportStore.test__add_records86breezy.plugins.weave_fmt.test_store.TestInstrumentedTransportStore.test__add_records
87breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_add_and_retrieve
64breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_adding_fails_when_present88breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_adding_fails_when_present
65breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_missing_is_absent89breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_missing_is_absent
66breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_total_size90breezy.plugins.weave_fmt.test_store.TestMemoryStore.test_total_size
@@ -79,6 +103,8 @@
79breezy.plugins.weave_fmt.test_store.TestTransportStore.test__relpath_simple103breezy.plugins.weave_fmt.test_store.TestTransportStore.test__relpath_simple
80breezy.plugins.weave_fmt.test_store.TestTransportStore.test__relpath_simple_suffixed104breezy.plugins.weave_fmt.test_store.TestTransportStore.test__relpath_simple_suffixed
81breezy.plugins.weave_fmt.test_store.TestTransportStore.test__relpath_unregister_suffixes105breezy.plugins.weave_fmt.test_store.TestTransportStore.test__relpath_unregister_suffixes
106breezy.plugins.weave_fmt.test_store.TestVersionFileStore.test_get_weave_readonly_cant_write
107breezy.plugins.weave_fmt.test_store.TestVersionFileStore.test_get_weave_registers_dirty_in_write
82breezy.pyutils.get_named_object108breezy.pyutils.get_named_object
83breezy.symbol_versioning.deprecated_in109breezy.symbol_versioning.deprecated_in
84breezy.tests.commands.test_checkout.TestCheckout.test_checkout110breezy.tests.commands.test_checkout.TestCheckout.test_checkout
@@ -10513,6 +10539,7 @@
10513breezy.tests.test_ui.TestUIFactoryTests.test_test_ui_factory_progress10539breezy.tests.test_ui.TestUIFactoryTests.test_test_ui_factory_progress
10514breezy.tests.test_ui.UITests.test_progress_construction10540breezy.tests.test_ui.UITests.test_progress_construction
10515breezy.tests.test_ui.UITests.test_text_ui_non_terminal10541breezy.tests.test_ui.UITests.test_text_ui_non_terminal
10542breezy.tests.test_upgrade.TestUpgrade.test_convert_knit_dirstate_content
10516breezy.tests.test_upstream_import.TestImport.test_common_directory10543breezy.tests.test_upstream_import.TestImport.test_common_directory
10517breezy.tests.test_upstream_import.TestImport.test_get_archive_type10544breezy.tests.test_upstream_import.TestImport.test_get_archive_type
10518breezy.tests.test_upstream_import.TestImport.test_top_path10545breezy.tests.test_upstream_import.TestImport.test_top_path
@@ -10670,7 +10697,34 @@
10670breezy.tests.test_wsgi.TestWSGI.test_relpath_setter10697breezy.tests.test_wsgi.TestWSGI.test_relpath_setter
10671breezy.tests.test_wsgi.TestWSGI.test_relpath_setter_bad_path_prefix10698breezy.tests.test_wsgi.TestWSGI.test_relpath_setter_bad_path_prefix
10672breezy.tests.test_wsgi.TestWSGI.test_relpath_setter_bad_path_suffix10699breezy.tests.test_wsgi.TestWSGI.test_relpath_setter_bad_path_suffix
10700breezy.tests.test_xml.TestEncodeAndEscape.test_ascii_with_xml
10701breezy.tests.test_xml.TestEncodeAndEscape.test_simple_ascii
10702breezy.tests.test_xml.TestEncodeAndEscape.test_unicode
10703breezy.tests.test_xml.TestEncodeAndEscape.test_utf8_with_xml
10673breezy.tests.test_xml.TestMisc.test_unescape_xml10704breezy.tests.test_xml.TestMisc.test_unescape_xml
10705breezy.tests.test_xml.TestSerializer.test_empty_property_value
10706breezy.tests.test_xml.TestSerializer.test_inventory_text_v8
10707breezy.tests.test_xml.TestSerializer.test_pack_revision_5
10708breezy.tests.test_xml.TestSerializer.test_repack_inventory_5
10709breezy.tests.test_xml.TestSerializer.test_repack_revision_5
10710breezy.tests.test_xml.TestSerializer.test_repack_revision_5_utc
10711breezy.tests.test_xml.TestSerializer.test_revision_ids_are_utf8
10712breezy.tests.test_xml.TestSerializer.test_revision_text_v6
10713breezy.tests.test_xml.TestSerializer.test_revision_text_v7
10714breezy.tests.test_xml.TestSerializer.test_revision_text_v8
10715breezy.tests.test_xml.TestSerializer.test_roundtrip_inventory_v6
10716breezy.tests.test_xml.TestSerializer.test_roundtrip_inventory_v7
10717breezy.tests.test_xml.TestSerializer.test_roundtrip_inventory_v8
10718breezy.tests.test_xml.TestSerializer.tests_serialize_inventory_v5_with_root
10719breezy.tests.test_xml.TestSerializer.test_tree_reference
10720breezy.tests.test_xml.TestSerializer.test_unpack_basis_inventory_5
10721breezy.tests.test_xml.TestSerializer.test_unpack_inventory_5
10722breezy.tests.test_xml.TestSerializer.test_unpack_inventory_5a
10723breezy.tests.test_xml.TestSerializer.test_unpack_inventory_5a_cache_and_copy
10724breezy.tests.test_xml.TestSerializer.test_unpack_inventory_5a_cache_no_copy
10725breezy.tests.test_xml.TestSerializer.test_unpack_inventory_5b
10726breezy.tests.test_xml.TestSerializer.test_unpack_revision_5
10727breezy.tests.test_xml.TestSerializer.test_unpack_revision_5_utc
10674breezy.tests.test_xml.TestSerializer.test_wrong_format_v710728breezy.tests.test_xml.TestSerializer.test_wrong_format_v7
10675breezy.timestamp.format_highres_date10729breezy.timestamp.format_highres_date
10676breezy.transport.http.unhtml_roughly10730breezy.transport.http.unhtml_roughly

Subscribers

People subscribed via source and target branches