Merge lp:~jelmer/brz/python3-x 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/python3-x
Merge into: lp:brz
Diff against target: 1884 lines (+377/-209)
42 files modified
breezy/bzr/btree_index.py (+1/-2)
breezy/bzr/remote.py (+1/-1)
breezy/bzr/workingtree_4.py (+1/-1)
breezy/bzr/xml_serializer.py (+1/-1)
breezy/generate_ids.py (+11/-8)
breezy/i18n.py (+3/-2)
breezy/log.py (+1/-1)
breezy/merge.py (+8/-17)
breezy/plugins/weave_fmt/test_bzrdir.py (+1/-1)
breezy/status.py (+1/-1)
breezy/tests/per_intertree/test_compare.py (+2/-2)
breezy/tests/per_repository/test_repository.py (+1/-1)
breezy/tests/per_workingtree/test_paths2ids.py (+2/-2)
breezy/tests/per_workingtree/test_workingtree.py (+2/-2)
breezy/tests/test_bzrdir.py (+4/-4)
breezy/tests/test_chk_map.py (+10/-10)
breezy/tests/test_commit.py (+9/-9)
breezy/tests/test_config.py (+3/-3)
breezy/tests/test_conflicts.py (+12/-12)
breezy/tests/test_email_message.py (+7/-7)
breezy/tests/test_foreign.py (+2/-2)
breezy/tests/test_generate_ids.py (+8/-8)
breezy/tests/test_http.py (+1/-1)
breezy/tests/test_i18n.py (+31/-12)
breezy/tests/test_merge.py (+1/-1)
breezy/tests/test_options.py (+1/-1)
breezy/tests/test_reconfigure.py (+1/-1)
breezy/tests/test_remote.py (+5/-5)
breezy/tests/test_rename_map.py (+4/-4)
breezy/tests/test_repository.py (+8/-6)
breezy/tests/test_revert.py (+2/-1)
breezy/tests/test_selftest.py (+23/-11)
breezy/tests/test_transform.py (+7/-2)
breezy/tests/test_upstream_import.py (+3/-7)
breezy/tests/test_urlutils.py (+10/-3)
breezy/tests/test_version.py (+2/-2)
breezy/tests/test_vf_search.py (+50/-50)
breezy/transform.py (+5/-1)
breezy/transport/http/response.py (+1/-1)
breezy/upstream_import.py (+2/-2)
breezy/urlutils.py (+1/-1)
python3.passing (+128/-0)
To merge this branch: bzr merge lp:~jelmer/brz/python3-x
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+352226@code.launchpad.net

Commit message

Fix another round of tests on Python 3.

Description of the change

Fix another 58 tests on Python 3.

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

Thanks! There are quite a few stream checking changes that really just need to be unicode always using an abstraction that decodes for python 2, but that can get cleaned up later. Couple of other inline notes.

review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Running landing tests failed
https://ci.breezy-vcs.org/job/land-brz/376/

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Running landing tests failed
https://ci.breezy-vcs.org/job/land-brz/379/

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/bzr/btree_index.py'
2--- breezy/bzr/btree_index.py 2018-06-25 20:47:38 +0000
3+++ breezy/bzr/btree_index.py 2018-08-07 21:08:25 +0000
4@@ -708,8 +708,7 @@
5
6 def __lt__(self, other):
7 if isinstance(other, type(self)):
8- return ((self._transport, self._name, self._size) <
9- (other._transport, other._name, other._size))
10+ return ((self._name, self._size) < (other._name, other._size))
11 # Always sort existing indexes before ones that are still being built.
12 if isinstance(other, BTreeBuilder):
13 return True
14
15=== modified file 'breezy/bzr/remote.py'
16--- breezy/bzr/remote.py 2018-07-24 19:02:16 +0000
17+++ breezy/bzr/remote.py 2018-08-07 21:08:25 +0000
18@@ -2767,7 +2767,7 @@
19 self.refresh_data()
20 if response[0] != b'ok':
21 raise errors.UnexpectedSmartServerResponse(response)
22- self._write_group_tokens = response[1:]
23+ self._write_group_tokens = [token.decode('utf-8') for token in response[1:]]
24
25 def has_signature_for_revision_id(self, revision_id):
26 path = self.controldir._path_for_remote_call(self._client)
27
28=== modified file 'breezy/bzr/workingtree_4.py'
29--- breezy/bzr/workingtree_4.py 2018-07-26 22:37:49 +0000
30+++ breezy/bzr/workingtree_4.py 2018-08-07 21:08:25 +0000
31@@ -2088,7 +2088,7 @@
32 # push the user specified dirs from dirblock
33 for dir in reversed(dirblock):
34 if dir[2] == _directory:
35- pending.append((dir[0].decode('utf-8'), dir[4]))
36+ pending.append((dir[0], dir[4]))
37
38
39 class InterDirStateTree(InterTree):
40
41=== modified file 'breezy/bzr/xml_serializer.py'
42--- breezy/bzr/xml_serializer.py 2018-06-17 20:17:39 +0000
43+++ breezy/bzr/xml_serializer.py 2018-08-07 21:08:25 +0000
44@@ -129,7 +129,7 @@
45 # aren't listed in the XML specification
46 # (http://www.w3.org/TR/REC-xml/#NT-Char).
47 return re.subn(u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD]+',
48- lambda match: match.group(0).encode('unicode_escape'),
49+ lambda match: match.group(0).encode('unicode_escape').decode('ascii'),
50 message)
51
52
53
54=== modified file 'breezy/generate_ids.py'
55--- breezy/generate_ids.py 2018-06-22 02:22:23 +0000
56+++ breezy/generate_ids.py 2018-08-07 21:08:25 +0000
57@@ -32,11 +32,12 @@
58 errors,
59 lazy_regex,
60 )
61+from .sixish import text_type
62
63 # the regex removes any weird characters; we don't escape them
64 # but rather just pull them out
65-_file_id_chars_re = lazy_regex.lazy_compile('[^\\w.]')
66-_rev_id_chars_re = lazy_regex.lazy_compile('[^-\\w.+@]')
67+_file_id_chars_re = lazy_regex.lazy_compile(b'[^\\w.]')
68+_rev_id_chars_re = lazy_regex.lazy_compile(b'[^-\\w.+@]')
69 _gen_file_id_suffix = None
70 _gen_file_id_serial = 0
71
72@@ -71,6 +72,8 @@
73
74 The uniqueness is supplied from _next_id_suffix.
75 """
76+ if isinstance(name, text_type):
77+ name = name.encode('ascii', 'replace')
78 # The real randomness is in the _next_id_suffix, the
79 # rest of the identifier is just to be nice.
80 # So we:
81@@ -82,7 +85,7 @@
82 # filesystems
83 # 4) Removing starting '.' characters to prevent the file ids from
84 # being considered hidden.
85- ascii_word_only = _file_id_chars_re.sub('', name.lower()).encode('ascii', 'replace')
86+ ascii_word_only = _file_id_chars_re.sub(b'', name.lower())
87 short_no_dots = ascii_word_only.lstrip(b'.')[:20]
88 return short_no_dots + _next_id_suffix()
89
90@@ -108,15 +111,15 @@
91
92 user_or_email = user_or_email.lower()
93 user_or_email = user_or_email.replace(' ', '_')
94- user_or_email = _rev_id_chars_re.sub('', user_or_email)
95+ user_or_email = _rev_id_chars_re.sub(b'', user_or_email.encode('utf-8'))
96
97 # This gives 36^16 ~= 2^82.7 ~= 83 bits of entropy
98- unique_chunk = osutils.rand_chars(16)
99+ unique_chunk = osutils.rand_chars(16).encode('utf-8')
100
101 if timestamp is None:
102 timestamp = time.time()
103
104- rev_id = u'-'.join((user_or_email,
105- osutils.compact_date(timestamp),
106+ rev_id = b'-'.join((user_or_email,
107+ osutils.compact_date(timestamp).encode('utf-8'),
108 unique_chunk))
109- return rev_id.encode('utf8')
110+ return rev_id
111
112=== modified file 'breezy/i18n.py'
113--- breezy/i18n.py 2017-11-12 13:53:51 +0000
114+++ breezy/i18n.py 2018-08-07 21:08:25 +0000
115@@ -28,6 +28,8 @@
116 import os
117 import sys
118
119+from .sixish import text_type
120+
121
122 _translations = None
123
124@@ -208,8 +210,7 @@
125
126 :param domain: Gettext domain name (usually 'brz-PLUGINNAME')
127 """
128- locale_base = os.path.dirname(
129- unicode(__file__, sys.getfilesystemencoding()))
130+ locale_base = os.path.dirname(__file__)
131 translation = install_translations(domain=domain,
132 locale_base=locale_base)
133 add_fallback(translation)
134
135=== modified file 'breezy/log.py'
136--- breezy/log.py 2018-07-25 21:22:37 +0000
137+++ breezy/log.py 2018-08-07 21:08:25 +0000
138@@ -464,7 +464,7 @@
139 for revs in revision_iterator:
140 for (rev_id, revno, merge_depth), rev, delta in revs:
141 # 0 levels means show everything; merge_depth counts from 0
142- if levels != 0 and merge_depth >= levels:
143+ if levels != 0 and merge_depth is not None and merge_depth >= levels:
144 continue
145 if omit_merges and len(rev.parent_ids) > 1:
146 continue
147
148=== modified file 'breezy/merge.py'
149--- breezy/merge.py 2018-07-15 18:45:17 +0000
150+++ breezy/merge.py 2018-08-07 21:08:25 +0000
151@@ -58,12 +58,10 @@
152
153
154 def transform_tree(from_tree, to_tree, interesting_files=None):
155- from_tree.lock_tree_write()
156- operation = cleanup.OperationWithCleanups(merge_inner)
157- operation.add_cleanup(from_tree.unlock)
158- operation.run_simple(from_tree.branch, to_tree, from_tree,
159- ignore_zero=True, this_tree=from_tree,
160- interesting_files=interesting_files)
161+ with from_tree.lock_tree_write():
162+ merge_inner(from_tree.branch, to_tree, from_tree,
163+ ignore_zero=True, this_tree=from_tree,
164+ interesting_files=interesting_files)
165
166
167 class MergeHooks(hooks.Hooks):
168@@ -788,17 +786,10 @@
169 pass
170
171 def make_preview_transform(self):
172- operation = cleanup.OperationWithCleanups(self._make_preview_transform)
173- self.base_tree.lock_read()
174- operation.add_cleanup(self.base_tree.unlock)
175- self.other_tree.lock_read()
176- operation.add_cleanup(self.other_tree.unlock)
177- return operation.run_simple()
178-
179- def _make_preview_transform(self):
180- self.tt = transform.TransformPreview(self.working_tree)
181- self._compute_transform()
182- return self.tt
183+ with self.base_tree.lock_read(), self.other_tree.lock_read():
184+ self.tt = transform.TransformPreview(self.working_tree)
185+ self._compute_transform()
186+ return self.tt
187
188 def _compute_transform(self):
189 if self._lca_trees is None:
190
191=== modified file 'breezy/plugins/weave_fmt/test_bzrdir.py'
192--- breezy/plugins/weave_fmt/test_bzrdir.py 2018-07-24 21:21:21 +0000
193+++ breezy/plugins/weave_fmt/test_bzrdir.py 2018-08-07 21:08:25 +0000
194@@ -402,7 +402,7 @@
195 self.addCleanup(repo.unlock)
196 text_keys = repo.texts.keys()
197 dir_keys = [key for key in text_keys if key[0] ==
198- 'dir-20051005095101-da1441ea3fa6917a']
199+ b'dir-20051005095101-da1441ea3fa6917a']
200 self.assertNotEqual([], dir_keys)
201
202 def test_upgrade_to_meta_sets_workingtree_last_revision(self):
203
204=== modified file 'breezy/status.py'
205--- breezy/status.py 2018-07-22 17:06:14 +0000
206+++ breezy/status.py 2018-08-07 21:08:25 +0000
207@@ -316,7 +316,7 @@
208 for num, sub_merge, depth, eom in rev_id_iterator:
209 rev = revisions[sub_merge]
210 if rev is None:
211- to_file.write(sub_prefix + '(ghost) ' + sub_merge + '\n')
212+ to_file.write(sub_prefix + '(ghost) ' + sub_merge.decode('utf-8') + '\n')
213 continue
214 show_log_message(revisions[sub_merge], sub_prefix)
215
216
217=== modified file 'breezy/tests/per_intertree/test_compare.py'
218--- breezy/tests/per_intertree/test_compare.py 2018-07-19 22:55:15 +0000
219+++ breezy/tests/per_intertree/test_compare.py 2018-08-07 21:08:25 +0000
220@@ -1427,7 +1427,7 @@
221 expected = [
222 self.unchanged(tree1, tree1.path2id('')),
223 self.added(tree2, b'added'),
224- self.content_changed(tree2, 'changed'),
225+ self.content_changed(tree2, b'changed'),
226 self.kind_changed(tree1, tree2, b'fromdir'),
227 self.kind_changed(tree1, tree2, b'fromfile'),
228 self.deleted(tree1, b'removed'),
229@@ -1448,7 +1448,7 @@
230 root_id = tree1.path2id('')
231 expected = [
232 self.added(tree2, b'added'),
233- self.content_changed(tree2, 'changed'),
234+ self.content_changed(tree2, b'changed'),
235 self.kind_changed(tree1, tree2, b'fromdir'),
236 self.kind_changed(tree1, tree2, b'fromfile'),
237 self.deleted(tree1, b'removed'),
238
239=== modified file 'breezy/tests/per_repository/test_repository.py'
240--- breezy/tests/per_repository/test_repository.py 2018-07-27 18:57:21 +0000
241+++ breezy/tests/per_repository/test_repository.py 2018-08-07 21:08:25 +0000
242@@ -411,7 +411,7 @@
243 # roundtrip xml invalid characters in the xml-based serializers.
244 escaped_message, escape_count = re.subn(
245 u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD]+',
246- lambda match: match.group(0).encode('unicode_escape'),
247+ lambda match: match.group(0).encode('unicode_escape').decode('ascii'),
248 message)
249 self.assertEqual(rev.message, escaped_message)
250 else:
251
252=== modified file 'breezy/tests/per_workingtree/test_paths2ids.py'
253--- breezy/tests/per_workingtree/test_paths2ids.py 2018-07-02 23:41:13 +0000
254+++ breezy/tests/per_workingtree/test_paths2ids.py 2018-08-07 21:08:25 +0000
255@@ -166,12 +166,12 @@
256 tree.unversion(['dir/child-goes'])
257 tree.rename_one('dir/child-moves', 'child-moves')
258 self.build_tree(['tree/newdir/'])
259- tree.add(['newdir'], ['newdir'])
260+ tree.add(['newdir'], [b'newdir'])
261 tree.rename_one('dir/child-stays', 'child-stays')
262 tree.rename_one('dir', 'newdir/dir')
263 tree.rename_one('child-stays', 'newdir/dir/child-stays')
264 self.build_tree(['tree/newdir/dir/new-child'])
265- tree.add(['newdir/dir/new-child'], ['new-child'])
266+ tree.add(['newdir/dir/new-child'], [b'new-child'])
267 self.assertExpectedIds(
268 [b'newdir', b'dir', b'child-moves', b'child-stays', b'child-goes',
269 b'new-child'], tree, ['newdir'], [basis])
270
271=== modified file 'breezy/tests/per_workingtree/test_workingtree.py'
272--- breezy/tests/per_workingtree/test_workingtree.py 2018-07-24 21:44:05 +0000
273+++ breezy/tests/per_workingtree/test_workingtree.py 2018-08-07 21:08:25 +0000
274@@ -1207,7 +1207,7 @@
275 self.build_tree(['tree/subdir/', 'tree/subdir/somefile'])
276 tree.add(['subdir', 'subdir/somefile'])
277
278- with open('tree/subdir/m\xb5', 'wb') as f:
279+ with open(b'tree/subdir/m\xb5', 'wb') as f:
280 f.write(b'trivial\n')
281
282 tree.lock_read()
283@@ -1220,7 +1220,7 @@
284 tree.iter_changes, tree.basis_tree(),
285 want_unversioned=True)
286 # We should display the relative path
287- self.assertEqual('subdir/m\xb5', e.filename)
288+ self.assertEqual(b'subdir/m\xb5', e.filename)
289 self.assertEqual(osutils._fs_enc, e.fs_encoding)
290
291
292
293=== modified file 'breezy/tests/test_bzrdir.py'
294--- breezy/tests/test_bzrdir.py 2018-08-03 00:47:53 +0000
295+++ breezy/tests/test_bzrdir.py 2018-08-07 21:08:25 +0000
296@@ -1227,14 +1227,14 @@
297 raise TestSkipped('unable to make file hidden without pywin32 library')
298 b = bzrdir.BzrDir.create('.')
299 self.build_tree(['a'])
300- self.assertEqual(['a'], self.get_ls())
301+ self.assertEqual([b'a'], self.get_ls())
302
303 def test_dot_bzr_hidden_with_url(self):
304 if sys.platform == 'win32' and not win32utils.has_win32file:
305 raise TestSkipped('unable to make file hidden without pywin32 library')
306 b = bzrdir.BzrDir.create(urlutils.local_path_to_url('.'))
307 self.build_tree(['a'])
308- self.assertEqual(['a'], self.get_ls())
309+ self.assertEqual([b'a'], self.get_ls())
310
311
312 class _TestBzrDirFormat(bzrdir.BzrDirMetaFormat1):
313@@ -1404,7 +1404,7 @@
314 self.assertEqual("a.~1~", self._bzrdir._available_backup_name("a"))
315
316 def test_exiting(self):
317- self._transport.put_bytes("a.~1~", "some content")
318+ self._transport.put_bytes("a.~1~", b"some content")
319 self.assertEqual("a.~2~", self._bzrdir._available_backup_name("a"))
320
321
322@@ -1474,7 +1474,7 @@
323 self.assertEqual(format.as_string(),
324 b"First line\n"
325 b"required foo\n")
326- format.features["another"] = "optional"
327+ format.features[b"another"] = b"optional"
328 self.assertEqual(format.as_string(),
329 b"First line\n"
330 b"optional another\n"
331
332=== modified file 'breezy/tests/test_chk_map.py'
333--- breezy/tests/test_chk_map.py 2018-07-12 00:59:12 +0000
334+++ breezy/tests/test_chk_map.py 2018-08-07 21:08:25 +0000
335@@ -407,20 +407,20 @@
336 map_two = CHKMap(store, None)
337 map_two._root_node.set_maximum_size(20)
338 self.assertMapLayoutEqual(map_one, map_two)
339- map_one.map(b'aaa', b'value')
340+ map_one.map((b'aaa', ), b'value')
341 self.assertRaises(AssertionError,
342 self.assertMapLayoutEqual, map_one, map_two)
343- map_two.map(b'aaa', b'value')
344+ map_two.map((b'aaa', ), b'value')
345 self.assertMapLayoutEqual(map_one, map_two)
346 # Split the tree, so we ensure that internal nodes and leaf nodes are
347 # properly checked
348- map_one.map(b'aab', b'value')
349+ map_one.map((b'aab', ), b'value')
350 self.assertIsInstance(map_one._root_node, InternalNode)
351 self.assertRaises(AssertionError,
352 self.assertMapLayoutEqual, map_one, map_two)
353- map_two.map(b'aab', b'value')
354+ map_two.map((b'aab', ), b'value')
355 self.assertMapLayoutEqual(map_one, map_two)
356- map_one.map(b'aac', b'value')
357+ map_one.map((b'aac', ), b'value')
358 self.assertRaises(AssertionError,
359 self.assertMapLayoutEqual, map_one, map_two)
360 self.assertCanonicalForm(map_one)
361@@ -434,7 +434,7 @@
362
363 def test_from_dict_ab(self):
364 chk_bytes = self.get_chk_bytes()
365- root_key = CHKMap.from_dict(chk_bytes, {b"a": b"b"})
366+ root_key = CHKMap.from_dict(chk_bytes, {(b"a", ): b"b"})
367 # Check the data was saved and inserted correctly.
368 expected_root_key = self.assertHasABMap(chk_bytes)
369 self.assertEqual(expected_root_key, root_key)
370@@ -445,7 +445,7 @@
371 chk_bytes = self.get_chk_bytes()
372 root_key = CHKMap.from_dict(chk_bytes, {})
373 chkmap = CHKMap(chk_bytes, root_key)
374- new_root = chkmap.apply_delta([(None, b"a", b"b")])
375+ new_root = chkmap.apply_delta([(None, (b"a", ), b"b")])
376 # Check the data was saved and inserted correctly.
377 expected_root_key = self.assertHasABMap(chk_bytes)
378 self.assertEqual(expected_root_key, new_root)
379@@ -1143,7 +1143,7 @@
380 def test_iteritems_two_items(self):
381 chk_bytes = self.get_chk_bytes()
382 root_key = CHKMap.from_dict(chk_bytes,
383- {b"a": b"content here", b"b": b"more content"})
384+ {(b"a", ): b"content here", (b"b", ): b"more content"})
385 chkmap = CHKMap(chk_bytes, root_key)
386 self.assertEqual([((b"a",), b"content here"), ((b"b",), b"more content")],
387 sorted(list(chkmap.iteritems())))
388@@ -1561,8 +1561,8 @@
389 self.assertEqual(None, node.key())
390
391 def test_key_after_map(self):
392- node = LeafNode.deserialise("chkleaf:\n10\n1\n0\n\n", ("sha1:1234",))
393- node.map(None, ("foo bar",), "baz quux")
394+ node = LeafNode.deserialise(b"chkleaf:\n10\n1\n0\n\n", (b"sha1:1234",))
395+ node.map(None, (b"foo bar",), b"baz quux")
396 self.assertEqual(None, node.key())
397
398 def test_key_after_unmap(self):
399
400=== modified file 'breezy/tests/test_commit.py'
401--- breezy/tests/test_commit.py 2018-08-01 19:37:07 +0000
402+++ breezy/tests/test_commit.py 2018-08-07 21:08:25 +0000
403@@ -117,7 +117,7 @@
404 with open('hello', 'w') as f: f.write('hello world')
405 wt.add('hello')
406 revid = wt.commit(message='add hello', rev_id=b'revid', lossy=True)
407- self.assertEqual('revid', revid)
408+ self.assertEqual(b'revid', revid)
409
410 def test_commit_lossy_foreign(self):
411 """Attempt a lossy commit to a foreign branch."""
412@@ -129,7 +129,7 @@
413 wt.add('hello')
414 revid = wt.commit(message='add hello', lossy=True,
415 timestamp=1302659388, timezone=0)
416- self.assertEqual(b'dummy-v1:1302659388.0-0-UNKNOWN', revid)
417+ self.assertEqual(b'dummy-v1:1302659388-0-UNKNOWN', revid)
418
419 def test_commit_bound_lossy_foreign(self):
420 """Attempt a lossy commit to a bzr branch bound to a foreign branch."""
421@@ -142,10 +142,10 @@
422 wt.add('hello')
423 revid = wt.commit(message='add hello', lossy=True,
424 timestamp=1302659388, timezone=0)
425- self.assertEqual(b'dummy-v1:1302659388.0-0-0', revid)
426- self.assertEqual(b'dummy-v1:1302659388.0-0-0',
427+ self.assertEqual(b'dummy-v1:1302659388-0-0', revid)
428+ self.assertEqual(b'dummy-v1:1302659388-0-0',
429 foreign_branch.last_revision())
430- self.assertEqual(b'dummy-v1:1302659388.0-0-0',
431+ self.assertEqual(b'dummy-v1:1302659388-0-0',
432 wt.branch.last_revision())
433
434 def test_missing_commit(self):
435@@ -357,7 +357,7 @@
436 with open('hello', 'w') as f: f.write((str(i) * 4) + '\n')
437 if i == 0:
438 wt.add(['hello'], [b'hello-id'])
439- rev_id = 'test@rev-%d' % (i+1)
440+ rev_id = b'test@rev-%d' % (i+1)
441 rev_ids.append(rev_id)
442 wt.commit(message='rev %d' % (i+1),
443 rev_id=rev_id)
444@@ -423,7 +423,7 @@
445 wt = self.make_branch_and_tree('.')
446 branch = wt.branch
447 wt.commit("base", allow_pointless=True, rev_id=b'A')
448- self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
449+ self.assertFalse(branch.repository.has_signature_for_revision_id(b'A'))
450 try:
451 from ..testament import Testament
452 # monkey patch gpg signing mechanism
453@@ -438,8 +438,8 @@
454 return breezy.gpg.LoopbackGPGStrategy(None).sign(
455 text, breezy.gpg.MODE_CLEAR)
456 self.assertEqual(sign(Testament.from_revision(branch.repository,
457- 'B').as_short_text()),
458- branch.repository.get_signature_text('B'))
459+ b'B').as_short_text()),
460+ branch.repository.get_signature_text(b'B'))
461 finally:
462 breezy.gpg.GPGStrategy = oldstrategy
463
464
465=== modified file 'breezy/tests/test_config.py'
466--- breezy/tests/test_config.py 2018-06-22 01:50:22 +0000
467+++ breezy/tests/test_config.py 2018-08-07 21:08:25 +0000
468@@ -1495,9 +1495,9 @@
469 self.assertEqual('/environ-bzr', my_config.get_bzr_remote_path())
470
471
472-precedence_global = 'option = global'
473-precedence_branch = 'option = branch'
474-precedence_location = """
475+precedence_global = b'option = global'
476+precedence_branch = b'option = branch'
477+precedence_location = b"""
478 [http://]
479 recurse = true
480 option = recurse
481
482=== modified file 'breezy/tests/test_conflicts.py'
483--- breezy/tests/test_conflicts.py 2018-08-03 02:26:35 +0000
484+++ breezy/tests/test_conflicts.py 2018-08-07 21:08:25 +0000
485@@ -43,22 +43,22 @@
486 # '\xc3\xae' == u'\xee' == i with hat
487 # So these are u'path' and 'id' only with a circle and a hat. (shappo?)
488 example_conflicts = conflicts.ConflictList(
489- [conflicts.MissingParent('Not deleting', u'p\xe5thg', '\xc3\xaedg'),
490- conflicts.ContentsConflict(u'p\xe5tha', None, '\xc3\xaeda'),
491+ [conflicts.MissingParent('Not deleting', u'p\xe5thg', b'\xc3\xaedg'),
492+ conflicts.ContentsConflict(u'p\xe5tha', None, b'\xc3\xaeda'),
493 conflicts.TextConflict(u'p\xe5tha'),
494- conflicts.PathConflict(u'p\xe5thb', u'p\xe5thc', '\xc3\xaedb'),
495+ conflicts.PathConflict(u'p\xe5thb', u'p\xe5thc', b'\xc3\xaedb'),
496 conflicts.DuplicateID('Unversioned existing file',
497 u'p\xe5thc', u'p\xe5thc2',
498- '\xc3\xaedc', '\xc3\xaedc'),
499+ b'\xc3\xaedc', b'\xc3\xaedc'),
500 conflicts.DuplicateEntry('Moved existing file to',
501 u'p\xe5thdd.moved', u'p\xe5thd',
502- '\xc3\xaedd', None),
503+ b'\xc3\xaedd', None),
504 conflicts.ParentLoop('Cancelled move', u'p\xe5the', u'p\xe5th2e',
505- None, '\xc3\xaed2e'),
506+ None, b'\xc3\xaed2e'),
507 conflicts.UnversionedParent('Versioned directory',
508- u'p\xe5thf', '\xc3\xaedf'),
509+ u'p\xe5thf', b'\xc3\xaedf'),
510 conflicts.NonDirectoryParent('Created directory',
511- u'p\xe5thg', '\xc3\xaedg'),
512+ u'p\xe5thg', b'\xc3\xaedg'),
513 ])
514
515
516@@ -933,18 +933,18 @@
517 (dict(_base_actions='create_dir1_dir2'),
518 ('dir1_into_dir2',
519 dict(actions='move_dir1_into_dir2', check='dir1_moved',
520- dir_id=b'dir1-id', target_id='dir2-id', xfail=False)),
521+ dir_id=b'dir1-id', target_id=b'dir2-id', xfail=False)),
522 ('dir2_into_dir1',
523 dict(actions='move_dir2_into_dir1', check='dir2_moved',
524- dir_id=b'dir2-id', target_id='dir1-id', xfail=False))),
525+ dir_id=b'dir2-id', target_id=b'dir1-id', xfail=False))),
526 # Subdirs moved into each other
527 (dict(_base_actions='create_dir1_4'),
528 ('dir1_into_dir4',
529 dict(actions='move_dir1_into_dir4', check='dir1_2_moved',
530- dir_id=b'dir1-id', target_id='dir4-id', xfail=True)),
531+ dir_id=b'dir1-id', target_id=b'dir4-id', xfail=True)),
532 ('dir3_into_dir2',
533 dict(actions='move_dir3_into_dir2', check='dir3_4_moved',
534- dir_id=b'dir3-id', target_id='dir2-id', xfail=True))),
535+ dir_id=b'dir3-id', target_id=b'dir2-id', xfail=True))),
536 ])
537
538 def do_create_dir1_dir2(self):
539
540=== modified file 'breezy/tests/test_email_message.py'
541--- breezy/tests/test_email_message.py 2018-08-01 19:37:07 +0000
542+++ breezy/tests/test_email_message.py 2018-08-07 21:08:25 +0000
543@@ -23,6 +23,7 @@
544 from .. import __version__ as _breezy_version
545 from ..email_message import EmailMessage
546 from ..errors import BzrBadParameterNotUnicode
547+from ..sixish import text_type
548 from ..smtp_connection import SMTPConnection
549 from .. import tests
550
551@@ -110,10 +111,10 @@
552
553 def test_simple_message(self):
554 pairs = {
555- 'body': SIMPLE_MESSAGE_ASCII,
556+ b'body': SIMPLE_MESSAGE_ASCII,
557 u'b\xf3dy': SIMPLE_MESSAGE_UTF8,
558- 'b\xc3\xb3dy': SIMPLE_MESSAGE_UTF8,
559- 'b\xf4dy': SIMPLE_MESSAGE_8BIT,
560+ b'b\xc3\xb3dy': SIMPLE_MESSAGE_UTF8,
561+ b'b\xf4dy': SIMPLE_MESSAGE_8BIT,
562 }
563 for body, expected in pairs.items():
564 msg = EmailMessage('from@from.com', 'to@to.com', 'subject', body)
565@@ -205,10 +206,9 @@
566 def test_string_with_encoding(self):
567 pairs = {
568 u'Pepe': (b'Pepe', 'ascii'),
569- u'P\xe9rez': ('P\xc3\xa9rez', 'utf-8'),
570- 'Perez': ('Perez', 'ascii'), # u'Pepe' == 'Pepe'
571- 'P\xc3\xa9rez': ('P\xc3\xa9rez', 'utf-8'),
572- 'P\xe8rez': ('P\xe8rez', '8-bit'),
573+ u'P\xe9rez': (b'P\xc3\xa9rez', 'utf-8'),
574+ b'P\xc3\xa9rez': (b'P\xc3\xa9rez', 'utf-8'),
575+ b'P\xe8rez': (b'P\xe8rez', '8-bit'),
576 }
577 for string_, pair in pairs.items():
578 self.assertEqual(pair, EmailMessage.string_with_encoding(string_))
579
580=== modified file 'breezy/tests/test_foreign.py'
581--- breezy/tests/test_foreign.py 2018-07-22 17:06:14 +0000
582+++ breezy/tests/test_foreign.py 2018-08-07 21:08:25 +0000
583@@ -129,7 +129,7 @@
584 mapping = DummyForeignVcsMapping(DummyForeignVcs())
585 if self._lossy:
586 self._new_revision_id = mapping.revision_id_foreign_to_bzr(
587- (str(self._timestamp).encode('ascii'),
588+ (b'%d' % self._timestamp,
589 str(self._timezone).encode('ascii'), b"UNKNOWN"))
590 self.random_revid = False
591 elif revid is not None:
592@@ -198,7 +198,7 @@
593 return (tree.get_file(path, file_id), None)
594 tree.get_file_with_stat = get_file_with_stat
595 new_revid = self.target.mapping.revision_id_foreign_to_bzr(
596- (str(rev.timestamp).encode('ascii'), str(rev.timezone).encode('ascii'),
597+ (b'%d' % rev.timestamp, str(rev.timezone).encode('ascii'),
598 str(self.target.revno()).encode('ascii')))
599 parent_revno, parent_revid= self.target.last_revision_info()
600 if parent_revid == revision.NULL_REVISION:
601
602=== modified file 'breezy/tests/test_generate_ids.py'
603--- breezy/tests/test_generate_ids.py 2018-08-01 19:37:07 +0000
604+++ breezy/tests/test_generate_ids.py 2018-08-07 21:08:25 +0000
605@@ -33,7 +33,7 @@
606 file_id = generate_ids.gen_file_id(filename)
607 self.assertContainsRe(file_id, b'^'+regex+b'$')
608 # It should be a utf8 file_id, not a unicode one
609- self.assertIsInstance(file_id, str)
610+ self.assertIsInstance(file_id, bytes)
611 # gen_file_id should always return ascii file ids.
612 file_id.decode('ascii')
613
614@@ -41,14 +41,14 @@
615 gen_file_id = generate_ids.gen_file_id
616
617 # We try to use the filename if possible
618- self.assertStartsWith(gen_file_id(b'bar'), b'bar-')
619+ self.assertStartsWith(gen_file_id('bar'), b'bar-')
620
621 # but we squash capitalization, and remove non word characters
622- self.assertStartsWith(gen_file_id(b'Mwoo oof\t m'), b'mwoooofm-')
623+ self.assertStartsWith(gen_file_id('Mwoo oof\t m'), b'mwoooofm-')
624
625 # We also remove leading '.' characters to prevent hidden file-ids
626- self.assertStartsWith(gen_file_id(b'..gam.py'), b'gam.py-')
627- self.assertStartsWith(gen_file_id(b'..Mwoo oof\t m'), b'mwoooofm-')
628+ self.assertStartsWith(gen_file_id('..gam.py'), b'gam.py-')
629+ self.assertStartsWith(gen_file_id('..Mwoo oof\t m'), b'mwoooofm-')
630
631 # we remove unicode characters, and still don't end up with a
632 # hidden file id
633@@ -61,18 +61,18 @@
634
635 # Test both case squashing and length restriction
636 fid = gen_file_id('A'*50 + '.txt')
637- self.assertStartsWith(fid, 'a'*20 + '-')
638+ self.assertStartsWith(fid, b'a'*20 + b'-')
639 self.assertTrue(len(fid) < 60)
640
641 # restricting length happens after the other actions, so
642 # we preserve as much as possible
643 fid = gen_file_id('\xe5\xb5..aBcd\tefGhijKLMnop\tqrstuvwxyz')
644- self.assertStartsWith(fid, 'abcdefghijklmnopqrst-')
645+ self.assertStartsWith(fid, b'abcdefghijklmnopqrst-')
646 self.assertTrue(len(fid) < 60)
647
648 def test_file_ids_are_ascii(self):
649 tail = br'-\d{14}-[a-z0-9]{16}-\d+'
650- self.assertGenFileId(b'foo' + tail, b'foo')
651+ self.assertGenFileId(b'foo' + tail, 'foo')
652 self.assertGenFileId(b'foo' + tail, u'foo')
653 self.assertGenFileId(b'bar' + tail, u'bar')
654 self.assertGenFileId(b'br' + tail, u'b\xe5r')
655
656=== modified file 'breezy/tests/test_http.py'
657--- breezy/tests/test_http.py 2018-08-01 19:37:07 +0000
658+++ breezy/tests/test_http.py 2018-08-07 21:08:25 +0000
659@@ -2159,7 +2159,7 @@
660
661 def setUp(self):
662 super(TestNoReportActivity, self).setUp()
663- self._transport =HttpTransport
664+ self._transport = HttpTransport
665 TestActivityMixin.setUp(self)
666
667 def assertActivitiesMatch(self):
668
669=== modified file 'breezy/tests/test_i18n.py'
670--- breezy/tests/test_i18n.py 2018-08-01 19:37:07 +0000
671+++ breezy/tests/test_i18n.py 2018-08-07 21:08:25 +0000
672@@ -24,6 +24,7 @@
673 errors,
674 workingtree,
675 )
676+from ..sixish import PY3
677
678
679 class ZzzTranslations(object):
680@@ -40,6 +41,9 @@
681 def gettext(self, s):
682 return self.zzz(self._null_translation.gettext(s))
683
684+ def ngettext(self, s, p, n):
685+ return self.zzz(self._null_translation.ngettext(s, p, n))
686+
687 def ugettext(self, s):
688 return self.zzz(self._null_translation.ugettext(s))
689
690@@ -59,16 +63,28 @@
691 t = trans.zzz('msg')
692 self._check_exact(u'zz\xe5{{msg}}', t)
693
694- t = trans.ugettext('msg')
695- self._check_exact(u'zz\xe5{{msg}}', t)
696-
697- t = trans.ungettext('msg1', 'msg2', 0)
698- self._check_exact(u'zz\xe5{{msg2}}', t)
699- t = trans.ungettext('msg1', 'msg2', 2)
700- self._check_exact(u'zz\xe5{{msg2}}', t)
701-
702- t = trans.ungettext('msg1', 'msg2', 1)
703- self._check_exact(u'zz\xe5{{msg1}}', t)
704+ if PY3:
705+ t = trans.gettext('msg')
706+ self._check_exact(u'zz\xe5{{msg}}', t)
707+
708+ t = trans.ngettext('msg1', 'msg2', 0)
709+ self._check_exact(u'zz\xe5{{msg2}}', t)
710+ t = trans.ngettext('msg1', 'msg2', 2)
711+ self._check_exact(u'zz\xe5{{msg2}}', t)
712+
713+ t = trans.ngettext('msg1', 'msg2', 1)
714+ self._check_exact(u'zz\xe5{{msg1}}', t)
715+ else:
716+ t = trans.ugettext('msg')
717+ self._check_exact(u'zz\xe5{{msg}}', t)
718+
719+ t = trans.ungettext('msg1', 'msg2', 0)
720+ self._check_exact(u'zz\xe5{{msg2}}', t)
721+ t = trans.ungettext('msg1', 'msg2', 2)
722+ self._check_exact(u'zz\xe5{{msg2}}', t)
723+
724+ t = trans.ungettext('msg1', 'msg2', 1)
725+ self._check_exact(u'zz\xe5{{msg1}}', t)
726
727
728 class TestGetText(tests.TestCase):
729@@ -148,8 +164,11 @@
730 workingtree.WorkingTree.open('./foo')
731 except errors.NotBranchError as e:
732 err = str(e)
733- self.assertContainsRe(err,
734- u"zz\xe5{{Not a branch: .*}}".encode("utf-8"))
735+ if PY3:
736+ self.assertContainsRe(err, u"zz\xe5{{Not a branch: .*}}")
737+ else:
738+ self.assertContainsRe(
739+ err, u"zz\xe5{{Not a branch: .*}}".encode('utf-8'))
740
741 def test_topic_help_translation(self):
742 """does topic help get translated?"""
743
744=== modified file 'breezy/tests/test_merge.py'
745--- breezy/tests/test_merge.py 2018-07-15 18:45:17 +0000
746+++ breezy/tests/test_merge.py 2018-08-07 21:08:25 +0000
747@@ -3080,7 +3080,7 @@
748 builder = self.make_builder()
749 builder.add_file(b'bar-id', builder.tree_root, 'bar', b'text1', True,
750 this=False)
751- builder.add_dir(b'bar-dir', builder.tree_root, b'bar-id',
752+ builder.add_dir(b'bar-dir', builder.tree_root, 'bar-id',
753 base=False, other=False)
754 return builder
755
756
757=== modified file 'breezy/tests/test_options.py'
758--- breezy/tests/test_options.py 2018-07-31 00:06:59 +0000
759+++ breezy/tests/test_options.py 2018-08-07 21:08:25 +0000
760@@ -81,7 +81,7 @@
761
762 def test_unknown_short_opt(self):
763 out, err = self.run_bzr('help -r', retcode=3)
764- self.assertContainsRe(err, br'no such option')
765+ self.assertContainsRe(err, r'no such option')
766
767 def test_set_short_name(self):
768 o = option.Option('wiggle')
769
770=== modified file 'breezy/tests/test_reconfigure.py'
771--- breezy/tests/test_reconfigure.py 2018-06-18 02:13:57 +0000
772+++ breezy/tests/test_reconfigure.py 2018-08-07 21:08:25 +0000
773@@ -385,7 +385,7 @@
774 tree = workingtree.WorkingTree.open('root/tree')
775 repo = tree.branch.repository
776 self.assertRaises(errors.NoSuchRevision, repo.get_revision,
777- 'dead-head-id')
778+ b'dead-head-id')
779
780 def test_standalone_to_standalone(self):
781 tree = self.make_branch_and_tree('tree')
782
783=== modified file 'breezy/tests/test_remote.py'
784--- breezy/tests/test_remote.py 2018-07-25 21:49:15 +0000
785+++ breezy/tests/test_remote.py 2018-08-07 21:08:25 +0000
786@@ -1045,7 +1045,7 @@
787 # XXX: It would be better to call fmt.initialize_on_transport_ex, but
788 # it's currently hard to test that without supplying a real remote
789 # transport connected to a real server.
790- result = fmt._initialize_on_transport_ex_rpc(client, 'path',
791+ result = fmt._initialize_on_transport_ex_rpc(client, b'path',
792 transport, False, False, False, None, None, None, None, False)
793 self.assertFinished(client)
794
795@@ -1067,7 +1067,7 @@
796 # it's currently hard to test that without supplying a real remote
797 # transport connected to a real server.
798 err = self.assertRaises(errors.PermissionDenied,
799- fmt._initialize_on_transport_ex_rpc, client, 'path', transport,
800+ fmt._initialize_on_transport_ex_rpc, client, b'path', transport,
801 False, False, False, None, None, None, None, False)
802 self.assertEqual('path', err.path)
803 self.assertEqual(': extra info', err.extra)
804@@ -1596,8 +1596,8 @@
805 client = FakeClient(self.get_url())
806 branch_network_name = self.get_branch_format().network_name()
807 client.add_expected_call(
808- b'BzrDir.open_branchV3', ('stacked/',),
809- b'success', ('branch', branch_network_name))
810+ b'BzrDir.open_branchV3', (b'stacked/',),
811+ b'success', (b'branch', branch_network_name))
812 client.add_expected_call(
813 b'BzrDir.find_repositoryV3', (b'stacked/',),
814 b'success', (b'ok', b'', b'yes', b'no', b'yes', network_name))
815@@ -1994,7 +1994,7 @@
816 client.add_expected_call(
817 b'Branch.lock_write', (b'memory:///', b'', b''),
818 b'success', (b'ok', b'branch token', b'repo token'))
819- encoded_dict_value = 'd5:ascii1:a11:unicode \xe2\x8c\x9a3:\xe2\x80\xbde'
820+ encoded_dict_value = b'd5:ascii1:a11:unicode \xe2\x8c\x9a3:\xe2\x80\xbde'
821 client.add_expected_call(
822 b'Branch.set_config_option_dict', (b'memory:///', b'branch token',
823 b'repo token', encoded_dict_value, b'foo', b''),
824
825=== modified file 'breezy/tests/test_rename_map.py'
826--- breezy/tests/test_rename_map.py 2018-07-24 21:44:05 +0000
827+++ breezy/tests/test_rename_map.py 2018-08-07 21:08:25 +0000
828@@ -46,8 +46,8 @@
829 tree.add('a', b'a')
830 rn = RenameMap(tree)
831 rn.add_file_edge_hashes(tree, [b'a'])
832- self.assertEqual({'a'}, rn.edge_hashes[myhash(('a\n', 'b\n'))])
833- self.assertEqual({'a'}, rn.edge_hashes[myhash(('b\n', 'c\n'))])
834+ self.assertEqual({b'a'}, rn.edge_hashes[myhash(('a\n', 'b\n'))])
835+ self.assertEqual({b'a'}, rn.edge_hashes[myhash(('b\n', 'c\n'))])
836 self.assertIs(None, rn.edge_hashes.get(myhash(('c\n', 'd\n'))))
837
838 def test_hitcounts(self):
839@@ -63,8 +63,8 @@
840 rn = RenameMap(tree)
841 rn.add_edge_hashes(self.a_lines, 'aid')
842 rn.add_edge_hashes(self.b_lines, 'bid')
843- self.build_tree_contents([('tree/a', ''.join(self.a_lines))])
844- self.build_tree_contents([('tree/b', ''.join(self.b_lines))])
845+ self.build_tree_contents([('tree/a', b''.join(self.a_lines))])
846+ self.build_tree_contents([('tree/b', b''.join(self.b_lines))])
847 self.assertEqual({'a': 'aid', 'b': 'bid'},
848 rn.file_match(['a', 'b']))
849
850
851=== modified file 'breezy/tests/test_repository.py'
852--- breezy/tests/test_repository.py 2018-08-03 00:47:53 +0000
853+++ breezy/tests/test_repository.py 2018-08-07 21:08:25 +0000
854@@ -255,7 +255,7 @@
855 tree.add(['foo'], [b'Nasty-IdC:'], ['file'])
856 tree.put_file_bytes_non_atomic('foo', b'')
857 tree.commit('1st post', rev_id=b'foo')
858- self.assertHasKnit(t, b'knits/e8/%254easty-%2549d%2543%253a',
859+ self.assertHasKnit(t, 'knits/e8/%254easty-%2549d%2543%253a',
860 b'\nfoo fulltext 0 81 :')
861
862 def assertHasKnit(self, t, knit_name, extra_content=b''):
863@@ -265,9 +265,9 @@
864
865 def check_knits(self, t):
866 """check knit content for a repository."""
867- self.assertHasKnit(t, b'inventory')
868- self.assertHasKnit(t, b'revisions')
869- self.assertHasKnit(t, b'signatures')
870+ self.assertHasKnit(t, 'inventory')
871+ self.assertHasKnit(t, 'revisions')
872+ self.assertHasKnit(t, 'signatures')
873
874 def test_shared_disk_layout(self):
875 control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
876@@ -737,7 +737,7 @@
877 (b'sha1:4ff91971043668583985aec83f4f0ab10a907d3f',),
878 (b'sha1:81e7324507c5ca132eedaf2d8414ee4bb2226187',),
879 (b'sha1:b101b7da280596c71a4540e9a1eeba8045985ee0',)},
880- simple_chk_records)
881+ set(simple_chk_records))
882 # Now, when we do a similar call using 'get_stream_for_missing_keys'
883 # we should get a much larger set of pages.
884 missing = [('inventories', b'rev-2')]
885@@ -956,13 +956,15 @@
886
887 def add_file(self, repo, inv, filename, revision, parents):
888 file_id = filename.encode('utf-8') + b'-id'
889+ content = [b'line\n']
890 entry = inventory.InventoryFile(file_id, filename, b'TREE_ROOT')
891 entry.revision = revision
892+ entry.text_sha1 = osutils.sha_strings(content)
893 entry.text_size = 0
894 inv.add(entry)
895 text_key = (file_id, revision)
896 parent_keys = [(file_id, parent) for parent in parents]
897- repo.texts.add_lines(text_key, parent_keys, [b'line\n'])
898+ repo.texts.add_lines(text_key, parent_keys, content)
899
900 def test_insert_from_broken_repo(self):
901 """Inserting a data stream from a broken repository won't silently
902
903=== modified file 'breezy/tests/test_revert.py'
904--- breezy/tests/test_revert.py 2018-07-07 19:27:38 +0000
905+++ breezy/tests/test_revert.py 2018-08-07 21:08:25 +0000
906@@ -103,7 +103,8 @@
907 self.addCleanup(tree.unlock)
908 self.assertTrue(tree.is_executable('newfile'))
909 transform.revert(tree, tree.basis_tree(), None, backups=True)
910- self.assertEqual('helooo!', tree.get_file('newfile').read())
911+ with tree.get_file('newfile', 'rb') as f:
912+ self.assertEqual(b'helooo!', f.read())
913 self.assertTrue(tree.is_executable('newfile'))
914
915 def test_revert_executable(self):
916
917=== modified file 'breezy/tests/test_selftest.py'
918--- breezy/tests/test_selftest.py 2018-07-31 17:39:09 +0000
919+++ breezy/tests/test_selftest.py 2018-08-07 21:08:25 +0000
920@@ -18,6 +18,7 @@
921
922 import gc
923 import doctest
924+from functools import reduce
925 import os
926 import signal
927 import sys
928@@ -790,8 +791,8 @@
929
930 This is used to exercise the test framework.
931 """
932- self.time(text_type, 'hello', errors='replace')
933- self.time(text_type, 'world', errors='replace')
934+ self.time(text_type, b'hello', errors='replace')
935+ self.time(text_type, b'world', errors='replace')
936
937 def test_lsprofiling(self):
938 """Verbose test result prints lsprof statistics from test cases."""
939@@ -821,14 +822,20 @@
940 # and then repeated but with 'world', rather than 'hello'.
941 # this should appear in the output stream of our test result.
942 output = result_stream.getvalue()
943- self.assertContainsRe(output,
944- r"LSProf output for <type 'unicode'>\(\('hello',\), {'errors': 'replace'}\)")
945+ if PY3:
946+ self.assertContainsRe(output,
947+ r"LSProf output for <class 'str'>\(\(b'hello',\), {'errors': 'replace'}\)")
948+ self.assertContainsRe(output,
949+ r"LSProf output for <class 'str'>\(\(b'world',\), {'errors': 'replace'}\)")
950+ else:
951+ self.assertContainsRe(output,
952+ r"LSProf output for <type 'unicode'>\(\('hello',\), {'errors': 'replace'}\)")
953+ self.assertContainsRe(output,
954+ r"LSProf output for <type 'unicode'>\(\('world',\), {'errors': 'replace'}\)\n")
955 self.assertContainsRe(output,
956 r" *CallCount *Recursive *Total\(ms\) *Inline\(ms\) *module:lineno\(function\)\n")
957 self.assertContainsRe(output,
958 r"( +1 +0 +0\.\d+ +0\.\d+ +<method 'disable' of '_lsprof\.Profiler' objects>\n)?")
959- self.assertContainsRe(output,
960- r"LSProf output for <type 'unicode'>\(\('world',\), {'errors': 'replace'}\)\n")
961
962 def test_uses_time_from_testtools(self):
963 """Test case timings in verbose results should use testtools times"""
964@@ -1912,9 +1919,14 @@
965 self.assertRaises(AssertionError, self.assertIsInstance, 23.3, int)
966 e = self.assertRaises(AssertionError,
967 self.assertIsInstance, None, int, "it's just not")
968- self.assertEqual(str(e),
969- "None is an instance of <type 'NoneType'> rather than <type 'int'>"
970- ": it's just not")
971+ if PY3:
972+ self.assertEqual(str(e),
973+ "None is an instance of <class 'NoneType'> rather than <class 'int'>: it's "
974+ "just not")
975+ else:
976+ self.assertEqual(str(e),
977+ "None is an instance of <type 'NoneType'> rather than <type 'int'>"
978+ ": it's just not")
979
980 def test_assertEndsWith(self):
981 self.assertEndsWith('foo', 'oo')
982@@ -2174,7 +2186,7 @@
983
984 def test_load_list(self):
985 # Provide a list with one test - this test.
986- test_id_line = b'%s\n' % self.id()
987+ test_id_line = '%s\n' % self.id()
988 self.build_tree_contents([('test.list', test_id_line)])
989 # And generate a list of the tests in the suite.
990 stream = self.run_selftest(load_list='test.list', list_only=True)
991@@ -2862,7 +2874,7 @@
992 out, err = self.run_bzr(["log", "%s/nonexistantpath" % url], retcode=3)
993 self.assertEqual(out, '')
994 self.assertContainsRe(err,
995- b'brz: ERROR: Not a branch: ".*nonexistantpath/".\n')
996+ 'brz: ERROR: Not a branch: ".*nonexistantpath/".\n')
997
998
999 class TestTestLoader(tests.TestCase):
1000
1001=== modified file 'breezy/tests/test_transform.py'
1002--- breezy/tests/test_transform.py 2018-07-26 02:19:13 +0000
1003+++ breezy/tests/test_transform.py 2018-08-07 21:08:25 +0000
1004@@ -62,6 +62,7 @@
1005 from ..mutabletree import MutableTree
1006 from ..sixish import (
1007 BytesIO,
1008+ PY3,
1009 text_type,
1010 )
1011 from . import (
1012@@ -2548,8 +2549,12 @@
1013 new_globals.update(globals)
1014 new_func = types.FunctionType(func.__code__, new_globals,
1015 func.__name__, func.__defaults__)
1016- setattr(instance, method_name,
1017- types.MethodType(new_func, instance, instance.__class__))
1018+ if PY3:
1019+ setattr(instance, method_name,
1020+ types.MethodType(new_func, instance))
1021+ else:
1022+ setattr(instance, method_name,
1023+ types.MethodType(new_func, instance, instance.__class__))
1024 self.addCleanup(delattr, instance, method_name)
1025
1026 @staticmethod
1027
1028=== modified file 'breezy/tests/test_upstream_import.py'
1029--- breezy/tests/test_upstream_import.py 2018-07-19 22:29:27 +0000
1030+++ breezy/tests/test_upstream_import.py 2018-08-07 21:08:25 +0000
1031@@ -66,11 +66,11 @@
1032 existing = fileobj.read()
1033 fileobj.seek(0)
1034 path = tempfile.mkdtemp(dir=os.getcwd())
1035- if existing != '':
1036+ if existing != b'':
1037 # copytree requires the directory not to exist
1038 os.rmdir(path)
1039 copytree(existing, path)
1040- fileobj.write(path)
1041+ fileobj.write(path.encode('utf-8'))
1042 self.root = path
1043
1044 def add(self, path):
1045@@ -223,8 +223,7 @@
1046 def archive_test(self, builder, importer, subdir=False):
1047 archive_file = self.make_archive(builder, subdir)
1048 tree = BzrDir.create_standalone_workingtree('tree')
1049- tree.lock_write()
1050- try:
1051+ with tree.lock_write():
1052 importer(tree, archive_file)
1053 self.assertTrue(tree.is_versioned('README'))
1054 self.assertTrue(tree.is_versioned('FEEDME'))
1055@@ -242,9 +241,6 @@
1056 # Ensure the second version of the file is used.
1057 self.assertEqual(tree.get_file_text('README'), b'Wow?')
1058 self.assertTrue(not os.path.exists(tree.abspath('FEEDME')))
1059- finally:
1060- tree.unlock()
1061-
1062
1063 def test_untar2(self):
1064 tar_file = self.make_messed_tar()
1065
1066=== modified file 'breezy/tests/test_urlutils.py'
1067--- breezy/tests/test_urlutils.py 2018-07-22 21:59:42 +0000
1068+++ breezy/tests/test_urlutils.py 2018-08-07 21:08:25 +0000
1069@@ -415,7 +415,7 @@
1070 raise TestSkipped("local encoding cannot handle unicode")
1071
1072 self.assertEqual('file:///D:/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s', result)
1073- self.assertFalse(isinstance(result, text_type))
1074+ self.assertIsInstance(result, str)
1075
1076 def test_win32_unc_path_to_url(self):
1077 self.requireFeature(features.win32_feature)
1078@@ -654,7 +654,7 @@
1079 def test_escape(self):
1080 self.assertEqual('%25', urlutils.escape('%'))
1081 self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
1082- self.assertFalse(isinstance(urlutils.escape(u'\xe5'), text_type))
1083+ self.assertIsInstance(urlutils.escape(u'\xe5'), str)
1084
1085 def test_escape_tildes(self):
1086 self.assertEqual('~foo', urlutils.escape('~foo'))
1087@@ -1050,5 +1050,12 @@
1088
1089 def test_unquote(self):
1090 self.assertEqual('%', urlutils.unquote('%25'))
1091- self.assertEqual('\xc3\xa5', urlutils.unquote('%C3%A5'))
1092+ if PY3:
1093+ self.assertEqual('\xe5', urlutils.unquote('%C3%A5'))
1094+ else:
1095+ self.assertEqual('\xc3\xa5', urlutils.unquote('%C3%A5'))
1096 self.assertEqual(u"\xe5", urlutils.unquote(u'\xe5'))
1097+
1098+ def test_unquote_to_bytes(self):
1099+ self.assertEqual(b'%', urlutils.unquote_to_bytes('%25'))
1100+ self.assertEqual(b'\xc3\xa5', urlutils.unquote_to_bytes('%C3%A5'))
1101
1102=== modified file 'breezy/tests/test_version.py'
1103--- breezy/tests/test_version.py 2018-07-15 18:45:17 +0000
1104+++ breezy/tests/test_version.py 2018-08-07 21:08:25 +0000
1105@@ -25,8 +25,8 @@
1106 workingtree,
1107 )
1108 from ..sixish import (
1109- BytesIO,
1110 PY3,
1111+ StringIO,
1112 )
1113 from .scenarios import load_tests_apply_scenarios
1114
1115@@ -53,7 +53,7 @@
1116
1117 def test_python_binary_path(self):
1118 self.permit_source_tree_branch_repo()
1119- sio = BytesIO()
1120+ sio = StringIO()
1121 version.show_version(show_config=False, show_copyright=False,
1122 to_file=sio)
1123 out = sio.getvalue()
1124
1125=== modified file 'breezy/tests/test_vf_search.py'
1126--- breezy/tests/test_vf_search.py 2018-06-29 15:36:29 +0000
1127+++ breezy/tests/test_vf_search.py 2018-08-07 21:08:25 +0000
1128@@ -35,8 +35,8 @@
1129 # rev3 /
1130 # | /
1131 # rev4
1132-ancestry_1 = {'rev1': [NULL_REVISION], 'rev2a': ['rev1'], 'rev2b': ['rev1'],
1133- 'rev3': ['rev2a'], 'rev4': ['rev3', 'rev2b']}
1134+ancestry_1 = {b'rev1': [NULL_REVISION], b'rev2a': [b'rev1'], b'rev2b': [b'rev1'],
1135+ b'rev3': [b'rev2a'], b'rev4': [b'rev3', b'rev2b']}
1136
1137 # Ancestry 2:
1138 #
1139@@ -49,8 +49,8 @@
1140 # rev3a
1141 # |
1142 # rev4a
1143-ancestry_2 = {'rev1a': [NULL_REVISION], 'rev2a': ['rev1a'],
1144- 'rev1b': [NULL_REVISION], 'rev3a': ['rev2a'], 'rev4a': ['rev3a']}
1145+ancestry_2 = {b'rev1a': [NULL_REVISION], b'rev2a': [b'rev1a'],
1146+ b'rev1b': [NULL_REVISION], b'rev3a': [b'rev2a'], b'rev4a': [b'rev3a']}
1147
1148
1149 # Extended history shortcut
1150@@ -65,12 +65,12 @@
1151 # d |
1152 # |\|
1153 # e f
1154-extended_history_shortcut = {'a': [NULL_REVISION],
1155- 'b': ['a'],
1156- 'c': ['b'],
1157- 'd': ['c'],
1158- 'e': ['d'],
1159- 'f': ['a', 'd'],
1160+extended_history_shortcut = {b'a': [NULL_REVISION],
1161+ b'b': [b'a'],
1162+ b'c': [b'b'],
1163+ b'd': [b'c'],
1164+ b'e': [b'd'],
1165+ b'f': [b'a', b'd'],
1166 }
1167
1168
1169@@ -83,18 +83,18 @@
1170 # Used when pulling from a stacked repository, so test some revisions
1171 # being satisfied from the stacking branch.
1172 g = self.make_graph(
1173- {"tip":["mid"], "mid":["base"], "tag":["base"],
1174- "base":[NULL_REVISION], NULL_REVISION:[]})
1175- result = vf_search.SearchResult({'tip', 'tag'},
1176- {NULL_REVISION}, 4, {'tip', 'mid', 'tag', 'base'})
1177- result = result.refine({'tip'}, {'mid'})
1178+ {b"tip": [b"mid"], b"mid": [b"base"], b"tag": [b"base"],
1179+ b"base": [NULL_REVISION], NULL_REVISION:[]})
1180+ result = vf_search.SearchResult({b'tip', b'tag'},
1181+ {NULL_REVISION}, 4, {b'tip', b'mid', b'tag', b'base'})
1182+ result = result.refine({b'tip'}, {b'mid'})
1183 recipe = result.get_recipe()
1184 # We should be starting from tag (original head) and mid (seen ref)
1185- self.assertEqual({'mid', 'tag'}, recipe[1])
1186+ self.assertEqual({b'mid', b'tag'}, recipe[1])
1187 # We should be stopping at NULL (original stop) and tip (seen head)
1188- self.assertEqual({NULL_REVISION, 'tip'}, recipe[2])
1189+ self.assertEqual({NULL_REVISION, b'tip'}, recipe[2])
1190 self.assertEqual(3, recipe[3])
1191- result = result.refine({'mid', 'tag', 'base'},
1192+ result = result.refine({b'mid', b'tag', b'base'},
1193 {NULL_REVISION})
1194 recipe = result.get_recipe()
1195 # We should be starting from nothing (NULL was known as a cut point)
1196@@ -103,7 +103,7 @@
1197 # tag (seen head) and mid(seen mid-point head). We could come back and
1198 # define this as not including mid, for minimal results, but it is
1199 # still 'correct' to include mid, and simpler/easier.
1200- self.assertEqual({NULL_REVISION, 'tip', 'tag', 'mid'}, recipe[2])
1201+ self.assertEqual({NULL_REVISION, b'tip', b'tag', b'mid'}, recipe[2])
1202 self.assertEqual(0, recipe[3])
1203 self.assertTrue(result.is_empty())
1204
1205@@ -122,30 +122,30 @@
1206 self.assertSearchResult([], [], 0, None)
1207
1208 def test_ancestry_1(self):
1209- self.assertSearchResult(['rev4'], [NULL_REVISION], len(ancestry_1),
1210+ self.assertSearchResult([b'rev4'], [NULL_REVISION], len(ancestry_1),
1211 ancestry_1)
1212
1213 def test_ancestry_2(self):
1214- self.assertSearchResult(['rev1b', 'rev4a'], [NULL_REVISION],
1215+ self.assertSearchResult([b'rev1b', b'rev4a'], [NULL_REVISION],
1216 len(ancestry_2), ancestry_2)
1217- self.assertSearchResult(['rev1b', 'rev4a'], [],
1218+ self.assertSearchResult([b'rev1b', b'rev4a'], [],
1219 len(ancestry_2)+1, ancestry_2,
1220 missing_keys=[NULL_REVISION])
1221
1222 def test_partial_search(self):
1223 parent_map = dict((k, extended_history_shortcut[k])
1224- for k in ['e', 'f'])
1225- self.assertSearchResult(['e', 'f'], ['d', 'a'], 2,
1226+ for k in [b'e', b'f'])
1227+ self.assertSearchResult([b'e', b'f'], [b'd', b'a'], 2,
1228 parent_map)
1229 parent_map.update((k, extended_history_shortcut[k])
1230- for k in ['d', 'a'])
1231- self.assertSearchResult(['e', 'f'], ['c', NULL_REVISION], 4,
1232+ for k in [b'd', b'a'])
1233+ self.assertSearchResult([b'e', b'f'], [b'c', NULL_REVISION], 4,
1234 parent_map)
1235- parent_map['c'] = extended_history_shortcut['c']
1236- self.assertSearchResult(['e', 'f'], ['b'], 6,
1237+ parent_map[b'c'] = extended_history_shortcut[b'c']
1238+ self.assertSearchResult([b'e', b'f'], [b'b'], 6,
1239 parent_map, missing_keys=[NULL_REVISION])
1240- parent_map['b'] = extended_history_shortcut['b']
1241- self.assertSearchResult(['e', 'f'], [], 7,
1242+ parent_map[b'b'] = extended_history_shortcut[b'b']
1243+ self.assertSearchResult([b'e', b'f'], [], 7,
1244 parent_map, missing_keys=[NULL_REVISION])
1245
1246
1247@@ -159,24 +159,24 @@
1248 (sorted(start), sorted(stop), count))
1249
1250 def test_empty_ancestry(self):
1251- self.assertSearchResult([], [], 0, {}, (), ['tip-rev-id'], 10)
1252+ self.assertSearchResult([], [], 0, {}, (), [b'tip-rev-id'], 10)
1253
1254 def test_ancestry_1(self):
1255- self.assertSearchResult(['rev4'], ['rev1'], 4,
1256- ancestry_1, (), ['rev1'], 10)
1257- self.assertSearchResult(['rev2a', 'rev2b'], ['rev1'], 2,
1258- ancestry_1, (), ['rev1'], 1)
1259+ self.assertSearchResult([b'rev4'], [b'rev1'], 4,
1260+ ancestry_1, (), [b'rev1'], 10)
1261+ self.assertSearchResult([b'rev2a', b'rev2b'], [b'rev1'], 2,
1262+ ancestry_1, (), [b'rev1'], 1)
1263
1264
1265 def test_multiple_heads(self):
1266- self.assertSearchResult(['e', 'f'], ['a'], 5,
1267- extended_history_shortcut, (), ['a'], 10)
1268+ self.assertSearchResult([b'e', b'f'], [b'a'], 5,
1269+ extended_history_shortcut, (), [b'a'], 10)
1270 # Note that even though we only take 1 step back, we find 'f', which
1271 # means the described search will still find d and c.
1272- self.assertSearchResult(['f'], ['a'], 4,
1273- extended_history_shortcut, (), ['a'], 1)
1274- self.assertSearchResult(['f'], ['a'], 4,
1275- extended_history_shortcut, (), ['a'], 2)
1276+ self.assertSearchResult([b'f'], [b'a'], 4,
1277+ extended_history_shortcut, (), [b'a'], 1)
1278+ self.assertSearchResult([b'f'], [b'a'], 4,
1279+ extended_history_shortcut, (), [b'a'], 2)
1280
1281
1282 class TestPendingAncestryResultRefine(tests.TestCase):
1283@@ -188,12 +188,12 @@
1284 # Used when pulling from a stacked repository, so test some revisions
1285 # being satisfied from the stacking branch.
1286 g = self.make_graph(
1287- {"tip":["mid"], "mid":["base"], "tag":["base"],
1288- "base":[NULL_REVISION], NULL_REVISION:[]})
1289- result = vf_search.PendingAncestryResult(['tip', 'tag'], None)
1290- result = result.refine({'tip'}, {'mid'})
1291- self.assertEqual({'mid', 'tag'}, result.heads)
1292- result = result.refine({'mid', 'tag', 'base'},
1293+ {b"tip": [b"mid"], b"mid": [b"base"], b"tag": [b"base"],
1294+ b"base":[NULL_REVISION], NULL_REVISION:[]})
1295+ result = vf_search.PendingAncestryResult([b'tip', b'tag'], None)
1296+ result = result.refine({b'tip'}, {b'mid'})
1297+ self.assertEqual({b'mid', b'tag'}, result.heads)
1298+ result = result.refine({b'mid', b'tag', b'base'},
1299 {NULL_REVISION})
1300 self.assertEqual({NULL_REVISION}, result.heads)
1301 self.assertTrue(result.is_empty())
1302@@ -236,8 +236,8 @@
1303 # ancestries.
1304 class StubGraph(object):
1305 def iter_ancestry(self, keys):
1306- return [(NULL_REVISION, ()), ('foo', (NULL_REVISION,))]
1307- result = vf_search.PendingAncestryResult(['rev-3'], None)
1308+ return [(NULL_REVISION, ()), (b'foo', (NULL_REVISION,))]
1309+ result = vf_search.PendingAncestryResult([b'rev-3'], None)
1310 result_keys = result._get_keys(StubGraph())
1311 # Only the non-null keys from the ancestry appear.
1312- self.assertEqual({'foo'}, set(result_keys))
1313+ self.assertEqual({b'foo'}, set(result_keys))
1314
1315=== modified file 'breezy/transform.py'
1316--- breezy/transform.py 2018-08-03 00:47:53 +0000
1317+++ breezy/transform.py 2018-08-07 21:08:25 +0000
1318@@ -1003,7 +1003,11 @@
1319 (from_name, to_name),
1320 (from_kind, to_kind),
1321 (from_executable, to_executable)))
1322- return iter(sorted(results, key=lambda x:x[1]))
1323+
1324+ def path_key(t):
1325+ paths = t[1]
1326+ return (paths[0] or '', paths[1] or '')
1327+ return iter(sorted(results, key=path_key))
1328
1329 def get_preview_tree(self):
1330 """Return a tree representing the result of the transform.
1331
1332=== modified file 'breezy/transport/http/response.py'
1333--- breezy/transport/http/response.py 2018-08-01 19:37:07 +0000
1334+++ breezy/transport/http/response.py 2018-08-07 21:08:25 +0000
1335@@ -209,7 +209,7 @@
1336 % (self._boundary, boundary_line))
1337
1338 def _unquote_boundary(self, b):
1339- return b[:2] + email_utils.unquote(b[2:-2]) + b[-2:]
1340+ return b[:2] + email_utils.unquote(b[2:-2].decode('ascii')).encode('ascii') + b[-2:]
1341
1342 def read_range_definition(self):
1343 """Read a new range definition in a multi parts message.
1344
1345=== modified file 'breezy/upstream_import.py'
1346--- breezy/upstream_import.py 2018-07-22 17:06:14 +0000
1347+++ breezy/upstream_import.py 2018-08-07 21:08:25 +0000
1348@@ -107,7 +107,7 @@
1349 if mode != 'r':
1350 raise AssertionError(
1351 'only readonly supported')
1352- self.root = os.path.realpath(fileobj.read())
1353+ self.root = os.path.realpath(fileobj.read().decode('utf-8'))
1354
1355 def __repr__(self):
1356 return 'DirWrapper(%r)' % self.root
1357@@ -331,7 +331,7 @@
1358 archive, external_compressor = get_archive_type(source)
1359 except NotArchiveType:
1360 if file_kind(source) == 'directory':
1361- s = StringIO(source)
1362+ s = BytesIO(source.encode('utf-8'))
1363 s.seek(0)
1364 import_dir(tree, s)
1365 else:
1366
1367=== modified file 'breezy/urlutils.py'
1368--- breezy/urlutils.py 2018-07-23 22:25:11 +0000
1369+++ breezy/urlutils.py 2018-08-07 21:08:25 +0000
1370@@ -422,7 +422,7 @@
1371 if path_chars[i] not in _url_safe_characters:
1372 chars = path_chars[i].encode('utf-8')
1373 path_chars[i] = ''.join(
1374- ['%%%02X' % ord(c) for c in path_chars[i].encode('utf-8')])
1375+ ['%%%02X' % c for c in bytearray(path_chars[i].encode('utf-8'))])
1376 path = ''.join(path_chars)
1377 path = _url_hex_escapes_re.sub(_unescape_safe_chars, path)
1378 return str(prefix + path)
1379
1380=== modified file 'python3.passing'
1381--- python3.passing 2018-08-07 19:37:29 +0000
1382+++ python3.passing 2018-08-07 21:08:25 +0000
1383@@ -387,6 +387,7 @@
1384 breezy.plugins.fastimport.tests.test_revision_store.Test_TreeShim.test_id2path_no_delta
1385 breezy.plugins.fastimport.tests.test_revision_store.Test_TreeShim.test_id2path_with_delta
1386 breezy.plugins.fastimport.tests.test_revision_store.Test_TreeShim.test_path2id
1387+breezy.plugins.git.tests.test_blackbox.ShallowTests.test_log_shallow
1388 breezy.plugins.git.tests.test_blackbox.ShallowTests.test_version_info_custom_without_revno
1389 breezy.plugins.git.tests.test_blackbox.ShallowTests.test_version_info_custom_with_revno
1390 breezy.plugins.git.tests.test_blackbox.ShallowTests.test_version_info_python
1391@@ -1222,6 +1223,7 @@
1392 breezy.plugins.weave_fmt.test_bzrdir.TestFormat6.test_same_lockfiles_between_tree_repo_branch
1393 breezy.plugins.weave_fmt.test_bzrdir.TestInfo.test_info_locking_oslocks
1394 breezy.plugins.weave_fmt.test_bzrdir.TestInit.test_init_weave
1395+breezy.plugins.weave_fmt.test_bzrdir.TestUpgrade.test_upgrade_makes_dir_weaves
1396 breezy.plugins.weave_fmt.test_bzrdir.TestUpgrade.test_upgrade_simple
1397 breezy.plugins.weave_fmt.test_bzrdir.TestUpgrade.test_upgrade_to_meta_sets_workingtree_last_revision
1398 breezy.plugins.weave_fmt.test_bzrdir.TestUpgrade.test_upgrade_v6_to_meta_no_workingtree
1399@@ -2563,6 +2565,7 @@
1400 breezy.tests.blackbox.test_sign_my_commits.SignMyCommits.test_sign_dry_run
1401 breezy.tests.blackbox.test_sign_my_commits.SignMyCommits.test_sign_my_commits
1402 breezy.tests.blackbox.test_sign_my_commits.SignMyCommits.test_sign_my_commits_location
1403+breezy.tests.blackbox.test_sign_my_commits.TestSmartServerSignMyCommits.test_sign_single_commit
1404 breezy.tests.blackbox.test_split.TestSplit.test_split
1405 breezy.tests.blackbox.test_split.TestSplit.test_split_repo_failure
1406 breezy.tests.blackbox.test_split.TestSplit.test_split_rich_root
1407@@ -2746,6 +2749,7 @@
1408 breezy.tests.blackbox.test_upgrade.UpgradeRecommendedTests.test_no_upgrade_recommendation_from_bzrdir
1409 breezy.tests.blackbox.test_upgrade.UpgradeRecommendedTests.test_recommend_upgrade_wt4
1410 breezy.tests.blackbox.test_upgrade.UpgradeRecommendedTests.test_upgrade_shared_repo
1411+breezy.tests.blackbox.test_verify_signatures.TestSmartServerVerifySignatures.test_verify_signatures
1412 breezy.tests.blackbox.test_verify_signatures.TestVerifySignatures.test_verify_signatures
1413 breezy.tests.blackbox.test_verify_signatures.TestVerifySignatures.test_verify_signatures_acceptable_key
1414 breezy.tests.blackbox.test_verify_signatures.TestVerifySignatures.test_verify_signatures_verbose
1415@@ -8388,6 +8392,10 @@
1416 breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks(InterDirStateTree(C))
1417 breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks(InterTree(CHKInventory))
1418 breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks_specific_files(InterDirStateTree(C))
1419+breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks_specific_files(InterDirStateTree(PY))
1420+breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks_specific_files(InterTree)
1421+breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks_specific_files(InterTree(CHKInventory))
1422+breezy.tests.per_intertree.test_compare.TestIterChanges.test_versioned_symlinks_specific_files(InterTree(PreviewTree))
1423 breezy.tests.per_intertree.test_file_content_matches.TestFileContentMatches.test_different_contents_and_same_verifier(InterDirStateTree(C))
1424 breezy.tests.per_intertree.test_file_content_matches.TestFileContentMatches.test_different_contents_and_same_verifier(InterDirStateTree(PY))
1425 breezy.tests.per_intertree.test_file_content_matches.TestFileContentMatches.test_different_contents_and_same_verifier(InterTree)
1426@@ -9104,6 +9112,10 @@
1427 breezy.tests.per_repository_reference.test_fetch.TestFetch.test_sprout_from_stacked_with_short_history(RepositoryFormatKnitPack6)
1428 breezy.tests.per_repository_reference.test_fetch.TestFetch.test_sprout_from_stacked_with_short_history(RepositoryFormatKnitPack6RichRoot)
1429 breezy.tests.per_repository_reference.test_fetch.TestFetch.test_sprout_from_stacked_with_short_history(RepositoryFormatPackDevelopment2Subtree)
1430+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_complex(RemoteRepositoryFormat-default)
1431+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_complex(RemoteRepositoryFormat-v2)
1432+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_complex(RepositoryFormat2a)
1433+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_complex(RepositoryFormat2aSubtree)
1434 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_simple(RemoteRepositoryFormat-default)
1435 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_simple(RemoteRepositoryFormat-v2)
1436 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_simple(RepositoryFormat2a)
1437@@ -9114,6 +9126,14 @@
1438 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_simple(RepositoryFormatKnitPack6)
1439 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_simple(RepositoryFormatKnitPack6RichRoot)
1440 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_fulltext_simple(RepositoryFormatPackDevelopment2Subtree)
1441+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RemoteRepositoryFormat-default)
1442+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RemoteRepositoryFormat-v2)
1443+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RepositoryFormat2a)
1444+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RepositoryFormat2aSubtree)
1445+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_unordered_fetch_complex_split(RemoteRepositoryFormat-default)
1446+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_unordered_fetch_complex_split(RemoteRepositoryFormat-v2)
1447+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_unordered_fetch_complex_split(RepositoryFormat2a)
1448+breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_unordered_fetch_complex_split(RepositoryFormat2aSubtree)
1449 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RepositoryFormatKnitPack5)
1450 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RepositoryFormatKnitPack5RichRoot)
1451 breezy.tests.per_repository_reference.test_get_record_stream.TestGetRecordStream.test_ordered_no_closure(RepositoryFormatKnitPack5RichRootBroken)
1452@@ -12130,6 +12150,21 @@
1453 breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormat2a)
1454 breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormat2aSubtree)
1455 breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormat4)
1456+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormat5)
1457+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormat6)
1458+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormat7)
1459+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnit1)
1460+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnit3)
1461+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnit4)
1462+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack1)
1463+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack3)
1464+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack4)
1465+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack5)
1466+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack5RichRoot)
1467+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack5RichRootBroken)
1468+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack6)
1469+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatKnitPack6RichRoot)
1470+breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_control_characters(RepositoryFormatPackDevelopment2Subtree)
1471 breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_message(GitRepositoryFormat)
1472 breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_message(RemoteRepositoryFormat-default)
1473 breezy.tests.per_repository.test_repository.TestRepository.test_commit_unicode_message(RemoteRepositoryFormat-v2)
1474@@ -12992,6 +13027,7 @@
1475 breezy.tests.per_repository.test_signatures.TestSignatures.test_sign_existing_revision(RepositoryFormatKnitPack6RichRoot)
1476 breezy.tests.per_repository.test_signatures.TestSignatures.test_sign_existing_revision(RepositoryFormatPackDevelopment2Subtree)
1477 breezy.tests.per_repository.test_signatures.TestSignatures.test_store_signature(GitRepositoryFormat)
1478+breezy.tests.per_repository.test_signatures.TestSignatures.test_store_signature(RemoteRepositoryFormat-default)
1479 breezy.tests.per_repository.test_signatures.TestSignatures.test_store_signature(RemoteRepositoryFormat-v2)
1480 breezy.tests.per_repository.test_signatures.TestSignatures.test_store_signature(RepositoryFormat2a)
1481 breezy.tests.per_repository.test_signatures.TestSignatures.test_store_signature(RepositoryFormat2aSubtree)
1482@@ -18178,6 +18214,8 @@
1483 breezy.tests.per_tree.test_tree.TestSupportsVersionableKind.test_unknown(WorkingTreeFormat5)
1484 breezy.tests.per_tree.test_tree.TestSupportsVersionableKind.test_unknown(WorkingTreeFormat6)
1485 breezy.tests.per_tree.test_tree.TestSupportsVersionableKind.test_unknown(WorkingTreeFormat6,remote)
1486+breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(DirStateRevisionTree,WT4)
1487+breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(DirStateRevisionTree,WT5)
1488 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(GitWorkingTreeFormat)
1489 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(PreviewTree)
1490 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(PreviewTreePost)
1491@@ -18188,6 +18226,8 @@
1492 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(WorkingTreeFormat5)
1493 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(WorkingTreeFormat6)
1494 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_root(WorkingTreeFormat6,remote)
1495+breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_subtree(DirStateRevisionTree,WT4)
1496+breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_subtree(DirStateRevisionTree,WT5)
1497 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_subtree(GitWorkingTreeFormat)
1498 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_subtree(PreviewTree)
1499 breezy.tests.per_tree.test_walkdirs.TestWalkdirs.test_walkdir_subtree(PreviewTreePost)
1500@@ -20582,6 +20622,12 @@
1501 breezy.tests.per_workingtree.test_parents.UpdateToOneParentViaDeltaTests.test_removes(WorkingTreeFormat6)
1502 breezy.tests.per_workingtree.test_parents.UpdateToOneParentViaDeltaTests.test_removes(WorkingTreeFormat6,remote)
1503 breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(GitWorkingTreeFormat)
1504+breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(WorkingTreeFormat2)
1505+breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(WorkingTreeFormat3)
1506+breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(WorkingTreeFormat4)
1507+breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(WorkingTreeFormat5)
1508+breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(WorkingTreeFormat6)
1509+breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_children_of_moved_directories(WorkingTreeFormat6,remote)
1510 breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_single_root(GitWorkingTreeFormat)
1511 breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_single_root(WorkingTreeFormat2)
1512 breezy.tests.per_workingtree.test_paths2ids.TestPaths2Ids.test_find_single_root(WorkingTreeFormat3)
1513@@ -21556,6 +21602,7 @@
1514 breezy.tests.per_workingtree.test_workingtree.TestFormatAttributes.test_versioned_directories(WorkingTreeFormat5)
1515 breezy.tests.per_workingtree.test_workingtree.TestFormatAttributes.test_versioned_directories(WorkingTreeFormat6)
1516 breezy.tests.per_workingtree.test_workingtree.TestFormatAttributes.test_versioned_directories(WorkingTreeFormat6,remote)
1517+breezy.tests.per_workingtree.test_workingtree.TestIllegalPaths.test_bad_fs_path(GitWorkingTreeFormat)
1518 breezy.tests.per_workingtree.test_workingtree.TestWorkingTree.test_add_conflicts(GitWorkingTreeFormat)
1519 breezy.tests.per_workingtree.test_workingtree.TestWorkingTree.test_add_conflicts(WorkingTreeFormat2)
1520 breezy.tests.per_workingtree.test_workingtree.TestWorkingTree.test_add_conflicts(WorkingTreeFormat3)
1521@@ -22525,6 +22572,7 @@
1522 breezy.tests.test_bzrdir.TestBzrDirHooks.test_pre_open_called
1523 breezy.tests.test_bzrdir.TestBzrDirSprout.test_sprout_parent
1524 breezy.tests.test_bzrdir.TestBzrDirSprout.test_sprout_uses_branch_sprout
1525+breezy.tests.test_bzrdir.TestBzrFormat.test_as_string
1526 breezy.tests.test_bzrdir.TestBzrFormat.test_check_support_status_optional
1527 breezy.tests.test_bzrdir.TestBzrFormat.test_check_support_status_required
1528 breezy.tests.test_bzrdir.TestBzrFormat.test_check_support_status_unknown
1529@@ -22538,11 +22586,14 @@
1530 breezy.tests.test_bzrdir.TestBzrFormat.test_from_string_with_spaces
1531 breezy.tests.test_bzrdir.TestBzrFormat.test_network_name
1532 breezy.tests.test_bzrdir.TestDefaultFormat.test_get_set_default_format
1533+breezy.tests.test_bzrdir.TestDotBzrHidden.test_dot_bzr_hidden
1534+breezy.tests.test_bzrdir.TestDotBzrHidden.test_dot_bzr_hidden_with_url
1535 breezy.tests.test_bzrdir.TestFormatRegistry.test_aliases
1536 breezy.tests.test_bzrdir.TestFormatRegistry.test_format_registry
1537 breezy.tests.test_bzrdir.TestFormatRegistry.test_get_help
1538 breezy.tests.test_bzrdir.TestFormatRegistry.test_help_topic
1539 breezy.tests.test_bzrdir.TestFormatRegistry.test_set_default_repository
1540+breezy.tests.test_bzrdir.TestGenerateBackupName.test_exiting
1541 breezy.tests.test_bzrdir.TestGenerateBackupName.test_new
1542 breezy.tests.test_bzrdir.TestHTTPRedirections_nosmart.test_loop
1543 breezy.tests.test_bzrdir.TestHTTPRedirections_nosmart.test_qualifier_preserved
1544@@ -22666,6 +22717,7 @@
1545 breezy.tests.test_chk_map.TestLeafNode.test_deserialise_item_with_null_width_2
1546 breezy.tests.test_chk_map.TestLeafNode.test_deserialise_multi_line
1547 breezy.tests.test_chk_map.TestLeafNode.test_iteritems_selected_one_of_two_items
1548+breezy.tests.test_chk_map.TestLeafNode.test_key_after_map
1549 breezy.tests.test_chk_map.TestLeafNode.test_key_after_unmap
1550 breezy.tests.test_chk_map.TestLeafNode.test_key_new
1551 breezy.tests.test_chk_map.TestLeafNode.test_map_exceeding_max_size_only_entry_new
1552@@ -22689,10 +22741,12 @@
1553 breezy.tests.test_chk_map.TestMapSearchKeys.test_search_key_with_internal_node
1554 breezy.tests.test_chk_map.TestMap.test_apply_ab_empty
1555 breezy.tests.test_chk_map.TestMap.test_apply_delete_to_internal_node
1556+breezy.tests.test_chk_map.TestMap.test_apply_empty_ab
1557 breezy.tests.test_chk_map.TestMap.test_apply_new_keys_must_be_new
1558 breezy.tests.test_chk_map.TestMap.test_deep_splitting
1559 breezy.tests.test_chk_map.TestMap.test__dump_tree
1560 breezy.tests.test_chk_map.TestMap.test__dump_tree_in_progress
1561+breezy.tests.test_chk_map.TestMap.test_from_dict_ab
1562 breezy.tests.test_chk_map.TestMap.test_from_dict_empty
1563 breezy.tests.test_chk_map.TestMap.test_init_and_save_new
1564 breezy.tests.test_chk_map.TestMap.test_init_root_is_LeafNode_new
1565@@ -22710,6 +22764,7 @@
1566 breezy.tests.test_chk_map.TestMap.test_iteritems_keys_prefixed_by_2_width_nodes_hashed
1567 breezy.tests.test_chk_map.TestMap.test_iteritems_keys_prefixed_by_2_width_one_leaf
1568 breezy.tests.test_chk_map.TestMap.test_iteritems_selected_one_of_two_items
1569+breezy.tests.test_chk_map.TestMap.test_iteritems_two_items
1570 breezy.tests.test_chk_map.TestMap.test___len__2
1571 breezy.tests.test_chk_map.TestMap.test___len__empty
1572 breezy.tests.test_chk_map.TestMap.test_map_double_deep_collapses
1573@@ -22853,6 +22908,8 @@
1574 breezy.tests.test_commit.TestCommit.test_commit_has_1ms_resolution
1575 breezy.tests.test_commit.TestCommit.test_commit_invokes_hooks
1576 breezy.tests.test_commit.TestCommit.test_commit_kind_changes
1577+breezy.tests.test_commit.TestCommit.test_commit_lossy_foreign
1578+breezy.tests.test_commit.TestCommit.test_commit_lossy_native
1579 breezy.tests.test_commit.TestCommit.test_commit_move
1580 breezy.tests.test_commit.TestCommit.test_commit_new_subdir_child_selective
1581 breezy.tests.test_commit.TestCommit.test_commit_no_author
1582@@ -22862,6 +22919,7 @@
1583 breezy.tests.test_commit.TestCommit.test_commit_rename
1584 breezy.tests.test_commit.TestCommit.test_commit_reporting_after_merge
1585 breezy.tests.test_commit.TestCommit.test_commit_saves_1ms_timestamp
1586+breezy.tests.test_commit.TestCommit.test_committed_ancestry
1587 breezy.tests.test_commit.TestCommit.test_commit_unversioned_specified
1588 breezy.tests.test_commit.TestCommit.test_commit_with_checkout_and_branch_sharing_repo
1589 breezy.tests.test_commit.TestCommit.test_missing_commit
1590@@ -22877,6 +22935,7 @@
1591 breezy.tests.test_commit.TestCommit.test_safe_master_lock
1592 breezy.tests.test_commit.TestCommit.test_selected_file_merge_commit
1593 breezy.tests.test_commit.TestCommit.test_selective_delete
1594+breezy.tests.test_commit.TestCommit.test_signed_commit
1595 breezy.tests.test_commit.TestCommit.test_simple_commit
1596 breezy.tests.test_commit.TestCommit.test_strict_commit
1597 breezy.tests.test_commit.TestCommit.test_strict_commit_without_unknowns
1598@@ -22927,6 +22986,7 @@
1599 breezy.tests.test_config.TestBaseStackGet.test_get_without_registered_default_value
1600 breezy.tests.test_config.TestBaseStackGet.test_get_with_registered_default_value
1601 breezy.tests.test_config.TestBranchConfigItems.test_BRZ_EMAIL_OVERRIDES
1602+breezy.tests.test_config.TestBranchConfigItems.test_config_precedence
1603 breezy.tests.test_config.TestBranchConfigItems.test_get_user_option_global
1604 breezy.tests.test_config.TestBranchConfigItems.test_user_id
1605 breezy.tests.test_config.TestBranchConfig.test_autonick_urlencoded
1606@@ -23617,7 +23677,15 @@
1607 breezy.tests.test_conflicts.TestPerConflict.test_stanza_roundtrip(PathConflict)
1608 breezy.tests.test_conflicts.TestPerConflict.test_stanza_roundtrip(TextConflict)
1609 breezy.tests.test_conflicts.TestPerConflict.test_stanza_roundtrip(UnversionedParent)
1610+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(ContentsConflict)
1611+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(DuplicateEntry)
1612+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(DuplicateID)
1613+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(MissingParent)
1614+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(NonDirectoryParent)
1615+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(ParentLoop)
1616+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(PathConflict)
1617 breezy.tests.test_conflicts.TestPerConflict.test_stanzification(TextConflict)
1618+breezy.tests.test_conflicts.TestPerConflict.test_stanzification(UnversionedParent)
1619 breezy.tests.test_conflicts.TestPerConflict.test_stringification(ContentsConflict)
1620 breezy.tests.test_conflicts.TestPerConflict.test_stringification(DuplicateEntry)
1621 breezy.tests.test_conflicts.TestPerConflict.test_stringification(DuplicateID)
1622@@ -23660,6 +23728,11 @@
1623 breezy.tests.test_conflicts.TestResolveMissingParent.test_keep_them_all
1624 breezy.tests.test_conflicts.TestResolveMissingParent.test_kill_them_all
1625 breezy.tests.test_conflicts.TestResolveMissingParent.test_resolve_taking_other
1626+breezy.tests.test_conflicts.TestResolveMissingParent.test_resolve_taking_this
1627+breezy.tests.test_conflicts.TestResolveParentLoop.test_resolve_taking_other(dir1_into_dir2,dir2_into_dir1)
1628+breezy.tests.test_conflicts.TestResolveParentLoop.test_resolve_taking_other(dir2_into_dir1,dir1_into_dir2)
1629+breezy.tests.test_conflicts.TestResolveParentLoop.test_resolve_taking_this(dir1_into_dir2,dir2_into_dir1)
1630+breezy.tests.test_conflicts.TestResolveParentLoop.test_resolve_taking_this(dir2_into_dir1,dir1_into_dir2)
1631 breezy.tests.test_conflicts.TestResolvePathConflictBefore531967.test_resolve_taking_other(dir_deleted,dir_renamed)
1632 breezy.tests.test_conflicts.TestResolvePathConflictBefore531967.test_resolve_taking_other(dir_renamed2,dir_renamed)
1633 breezy.tests.test_conflicts.TestResolvePathConflictBefore531967.test_resolve_taking_other(dir_renamed,dir_deleted)
1634@@ -24286,10 +24359,13 @@
1635 breezy.tests.test_foreign.ForeignVcsRegistryTests.test_parse_revision_id_unknown_mapping
1636 breezy.tests.test_generate_docs.TestGenerateDocs.test_man_page
1637 breezy.tests.test_generate_docs.TestGenerateDocs.test_rstx_man
1638+breezy.tests.test_generate_ids.TestFileIds.test_file_ids_are_ascii
1639+breezy.tests.test_generate_ids.TestFileIds.test_gen_file_id
1640 breezy.tests.test_generate_ids.TestFileIds.test_gen_root_id
1641 breezy.tests.test_generate_ids.TestFileIds.test__next_id_suffix_increments
1642 breezy.tests.test_generate_ids.TestFileIds.test__next_id_suffix_sets_suffix
1643 breezy.tests.test_generate_ids.TestGenRevisionId.test_gen_revision_id_email
1644+breezy.tests.test_generate_ids.TestGenRevisionId.test_gen_revision_id_user
1645 breezy.tests.test_generate_ids.TestGenRevisionId.test_revision_ids_are_ascii
1646 breezy.tests.test_generate_ids.TestGenRevisionId.test_timestamp
1647 breezy.tests.test_globbing.TestExceptionGlobster.test_exclusion_order
1648@@ -24605,6 +24681,21 @@
1649 breezy.tests.test_http_response.TestHandleResponse.test_missing_content_range
1650 breezy.tests.test_http_response.TestHandleResponse.test_multipart_no_content_range
1651 breezy.tests.test_http_response.TestHTTPConnection.test_cleanup_pipe
1652+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_can_read_at_first_access
1653+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_checked_read_dont_overflow_buffers
1654+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_read_all_ranges
1655+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_read_at_range_end
1656+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_read_past_end_of_range
1657+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_read_zero
1658+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_across_ranges
1659+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_at_range_end
1660+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_backwards
1661+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_from_end
1662+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_into_void
1663+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_outside_single_range
1664+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_read
1665+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_seek_twice_between_ranges
1666+breezy.tests.test_http_response.TestRangeFileMultipleRangesQuotedBoundaries.test_unbounded_read_after_seek
1667 breezy.tests.test_http_response.TestRangeFileMultipleRanges.test_can_read_at_first_access
1668 breezy.tests.test_http_response.TestRangeFileMultipleRanges.test_checked_read_dont_overflow_buffers
1669 breezy.tests.test_http_response.TestRangeFileMultipleRanges.test_read_all_ranges
1670@@ -24975,6 +25066,7 @@
1671 breezy.tests.test_http.TestTruncatedMultipleRangeServer.test_readv_with_short_reads(urllib,HTTP/1.0)
1672 breezy.tests.test_http.TestTruncatedMultipleRangeServer.test_readv_with_short_reads(urllib,HTTP/1.1)
1673 breezy.tests.test_http.TestUrllib2AuthHandler.test_get_user_password_without_port
1674+breezy.tests.test_i18n.LoadPluginTranslations.test_does_not_exist
1675 breezy.tests.test_i18n.TestGetTextPerParagraph.test_multiline
1676 breezy.tests.test_i18n.TestGetTextPerParagraph.test_oneline
1677 breezy.tests.test_i18n.TestGetText.test_multiline
1678@@ -24982,7 +25074,9 @@
1679 breezy.tests.test_i18n.TestInstall.test_custom_languages
1680 breezy.tests.test_i18n.TestInstall.test_disable_i18n
1681 breezy.tests.test_i18n.TestInstall.test_no_env_variables
1682+breezy.tests.test_i18n.TestTranslate.test_error_message_translation
1683 breezy.tests.test_i18n.TestTranslate.test_topic_help_translation
1684+breezy.tests.test_i18n.TestZzzTranslation.test_translation
1685 breezy.tests.test_identitymap.TestIdentityMap.test_add_weave
1686 breezy.tests.test_identitymap.TestIdentityMap.test_construct
1687 breezy.tests.test_identitymap.TestIdentityMap.test_double_add_weave
1688@@ -26712,6 +26806,7 @@
1689 breezy.tests.test_merge_directive.TestParseOldMergeDirective2.test_parse_old_merge_directive
1690 breezy.tests.test_merge.TestConfigurableFileMerger.test_affected_files_cached
1691 breezy.tests.test_merge.TestConfigurableFileMerger.test_hook_called_for_text_conflicts
1692+breezy.tests.test_merge.TestConfigurableFileMerger.test_hook_not_called_for_kind_change
1693 breezy.tests.test_merge.TestConfigurableFileMerger.test_hook_not_called_for_other_files
1694 breezy.tests.test_merge.TestConfigurableFileMerger.test_uses_this_branch
1695 breezy.tests.test_merge.TestLCAMultiWay.test_all_differ
1696@@ -26937,6 +27032,7 @@
1697 breezy.tests.test_options.OptionTests.test_registry_conversion
1698 breezy.tests.test_options.OptionTests.test_registry_converter
1699 breezy.tests.test_options.OptionTests.test_set_short_name
1700+breezy.tests.test_options.OptionTests.test_unknown_short_opt
1701 breezy.tests.test_options.TestListOptions.test_list_option
1702 breezy.tests.test_options.TestListOptions.test_list_option_can_be_reset
1703 breezy.tests.test_options.TestListOptions.test_list_option_no_arguments
1704@@ -27412,6 +27508,7 @@
1705 breezy.tests.test_reconfigure.TestReconfigure.test_unsynced_branch_to_lightweight_checkout_unforced
1706 breezy.tests.test_reconfigure.TestReconfigure.test_unsynced_checkout_to_lightweight
1707 breezy.tests.test_reconfigure.TestReconfigure.test_use_shared_to_standalone
1708+breezy.tests.test_reconfigure.TestReconfigure.test_use_shared_to_standalone_preserves_dead_heads
1709 breezy.tests.test_reconfigure.TestReconfigure.test_use_shared_to_use_shared
1710 breezy.tests.test_registry.TestRegistryIter.test_items
1711 breezy.tests.test_registry.TestRegistryIter.test_iteritems
1712@@ -27464,8 +27561,10 @@
1713 breezy.tests.test_remote.TestBranchGetSetConfig.test_get_branch_conf
1714 breezy.tests.test_remote.TestBranchGetSetConfig.test_get_multi_line_branch_conf
1715 breezy.tests.test_remote.TestBranchGetSetConfig.test_set_option
1716+breezy.tests.test_remote.TestBranchGetSetConfig.test_set_option_with_dict
1717 breezy.tests.test_remote.TestBranch_get_stacked_on_url.test_backwards_compatible
1718 breezy.tests.test_remote.TestBranch_get_stacked_on_url.test_get_stacked_on_invalid_url
1719+breezy.tests.test_remote.TestBranch_get_stacked_on_url.test_get_stacked_on_real_branch
1720 breezy.tests.test_remote.TestBranchGetTagsBytes.test_backwards_compat
1721 breezy.tests.test_remote.TestBranchGetTagsBytes.test_trivial
1722 breezy.tests.test_remote.TestBranchHeadsToFetch.test_backwards_compatible
1723@@ -27506,6 +27605,7 @@
1724 breezy.tests.test_remote.TestBzrDirDestroyBranch.test_destroy_default
1725 breezy.tests.test_remote.TestBzrDirDestroyRepository.test_destroy_repository
1726 breezy.tests.test_remote.TestBzrDirFormatInitializeEx.test_error_from_real_server
1727+breezy.tests.test_remote.TestBzrDirFormatInitializeEx.test_success
1728 breezy.tests.test_remote.TestBzrDirGetBranches.test_get_branches
1729 breezy.tests.test_remote.TestBzrDirGetSetConfig.test_backwards_compat_get_option
1730 breezy.tests.test_remote.TestBzrDirGetSetConfig.test__get_config
1731@@ -27661,6 +27761,8 @@
1732 breezy.tests.test_remote.TestWithCustomErrorHandler.test_no_context
1733 breezy.tests.test_remote.TestWithCustomErrorHandler.test_with_context
1734 breezy.tests.test_rename_map.TestRenameMap.test_add_edge_hashes
1735+breezy.tests.test_rename_map.TestRenameMap.test_add_file_edge_hashes
1736+breezy.tests.test_rename_map.TestRenameMap.test_file_match
1737 breezy.tests.test_rename_map.TestRenameMap.test_file_match_no_dups
1738 breezy.tests.test_rename_map.TestRenameMap.test_find_directory_renames
1739 breezy.tests.test_rename_map.TestRenameMap.test_guess_rename_handles_new_directories
1740@@ -27676,6 +27778,7 @@
1741 breezy.tests.test_repository.Test2a.test_chk_bytes_uses_custom_btree_parser
1742 breezy.tests.test_repository.Test2a.test_fetch_combines_groups
1743 breezy.tests.test_repository.Test2a.test_format_pack_compresses_True
1744+breezy.tests.test_repository.Test2a.test_get_stream_for_missing_keys_includes_all_chk_refs
1745 breezy.tests.test_repository.Test2a.test_inconsistency_fatal
1746 breezy.tests.test_repository.Test2a.test_inventories_use_chk_map_with_parent_base_dict
1747 breezy.tests.test_repository.Test2a.test_pack_with_hint
1748@@ -27701,6 +27804,9 @@
1749 breezy.tests.test_repository.TestFormatKnit1.test_attribute__fetch_uses_deltas
1750 breezy.tests.test_repository.TestFormatKnit1.test_deserialise_sets_root_revision
1751 breezy.tests.test_repository.TestFormatKnit1.test_deserialise_uses_global_revision_id
1752+breezy.tests.test_repository.TestFormatKnit1.test_disk_layout
1753+breezy.tests.test_repository.TestFormatKnit1.test_shared_disk_layout
1754+breezy.tests.test_repository.TestFormatKnit1.test_shared_no_tree_disk_layout
1755 breezy.tests.test_repository.TestFormatKnit1.test_supports_external_lookups
1756 breezy.tests.test_repository.TestGCCHKPacker.test_pack_with_distant_inventories
1757 breezy.tests.test_repository.TestGCCHKPacker.test_pack_with_missing_inventory
1758@@ -27757,6 +27863,8 @@
1759 breezy.tests.test_repository.TestRepositoryPackCollection.test_repr
1760 breezy.tests.test_repository.TestRepositoryPackCollection.test__save_pack_names
1761 breezy.tests.test_repository.TestRepositoryPackCollection.test__save_pack_names_already_obsoleted
1762+breezy.tests.test_repository.TestWithBrokenRepo.test_insert_from_broken_repo
1763+breezy.tests.test_revert.TestRevert.test_preserve_execute
1764 breezy.tests.test_revert.TestRevert.test_revert_deletes_files_from_revert
1765 breezy.tests.test_revert.TestRevert.test_revert_executable
1766 breezy.tests.test_revert.TestRevert.test_revert_file_in_deleted_dir
1767@@ -28045,6 +28153,7 @@
1768 breezy.tests.test_selftest.MetaTestLog.test_logging
1769 breezy.tests.test_selftest.TestActuallyStartBzrSubprocess.test_start_and_stop_bzr_subprocess_send_signal
1770 breezy.tests.test_selftest.TestBlackboxSupport.test_run_bzr_failure_not_caught
1771+breezy.tests.test_selftest.TestBlackboxSupport.test_run_bzr_user_error_caught
1772 breezy.tests.test_selftest.TestBranchScenarios.test_scenarios
1773 breezy.tests.test_selftest.TestBzrDirScenarios.test_scenarios
1774 breezy.tests.test_selftest.TestCheckTreeShape.test_check_tree_shape
1775@@ -28063,6 +28172,7 @@
1776 breezy.tests.test_selftest.TestEnvironHandling.test_overrideEnv_None_called_twice_doesnt_leak
1777 breezy.tests.test_selftest.TestExtraAssertions.test_assertEndsWith
1778 breezy.tests.test_selftest.TestExtraAssertions.test_assertEqualDiff
1779+breezy.tests.test_selftest.TestExtraAssertions.test_assert_isinstance
1780 breezy.tests.test_selftest.TestFilteredByModuleTestLoader.test_exclude_tests
1781 breezy.tests.test_selftest.TestFilteredByModuleTestLoader.test_load_tests
1782 breezy.tests.test_selftest.TestFilteredByNameStartTestLoader.test_exclude_tests
1783@@ -28140,6 +28250,7 @@
1784 breezy.tests.test_selftest.TestSelftest.test_selftest_benchmark_parameter_invokes_test_suite__benchmark__
1785 breezy.tests.test_selftest.TestSelftest.test_transport_memory
1786 breezy.tests.test_selftest.TestSelftest.test_transport_sftp
1787+breezy.tests.test_selftest.TestSelftestWithIdList.test_load_list
1788 breezy.tests.test_selftest.TestSelftestWithIdList.test_load_unknown
1789 breezy.tests.test_selftest.TestStartBzrSubProcess.test_allow_plugins
1790 breezy.tests.test_selftest.TestStartBzrSubProcess.test_env_del_missing
1791@@ -28225,6 +28336,7 @@
1792 breezy.tests.test_selftest.TestTestPrefixRegistry.test_resolve_unknown_alias
1793 breezy.tests.test_selftest.TestTestResult.test_add_not_supported
1794 breezy.tests.test_selftest.TestTestResult.test_known_failure
1795+breezy.tests.test_selftest.TestTestResult.test_lsprofiling
1796 breezy.tests.test_selftest.TestTestResult.test_startTests
1797 breezy.tests.test_selftest.TestTestResult.test_startTests_only_once
1798 breezy.tests.test_selftest.TestTestResult.test_strict_with_known_failure
1799@@ -28245,6 +28357,7 @@
1800 breezy.tests.test_selftest.TestThreadLeakDetection.test_testcase_without_addCleanups
1801 breezy.tests.test_selftest.TestThreadLeakDetection.test_thread_leak
1802 breezy.tests.test_selftest.TestTransportScenarios.test_get_transport_permutations
1803+breezy.tests.test_selftest.TestTransportScenarios.test_scenarios_include_all_modules
1804 breezy.tests.test_selftest.TestTransportScenarios.test_scenarios_include_transport_class
1805 breezy.tests.test_selftest.TestTreeScenarios.test_scenarios
1806 breezy.tests.test_selftest.TestTreeShape.test_unicode_paths
1807@@ -29033,6 +29146,7 @@
1808 breezy.tests.test_status.TestStatus.test_multiple_pending
1809 breezy.tests.test_status.TestStatus.test_multiple_pending_verbose
1810 breezy.tests.test_status.TestStatus.test_pending_none
1811+breezy.tests.test_status.TestStatus.test_pending_with_ghosts
1812 breezy.tests.test_status.TestStatus.tests_revision_to_revision
1813 breezy.tests.test_status.TestStatus.test_with_pending_ghost
1814 breezy.tests.test_strace.TestStrace.test_strace_callable_is_called
1815@@ -29245,6 +29359,12 @@
1816 breezy.tests.test_transform.TestFileMover.test_file_mover
1817 breezy.tests.test_transform.TestFileMover.test_file_mover_rollback
1818 breezy.tests.test_transform.TestFileMover.test_pre_delete_rollback
1819+breezy.tests.test_transform.TestFinalizeRobustness.test_rename_in_limbo_rename_raises_after_rename
1820+breezy.tests.test_transform.TestFinalizeRobustness.test_rename_in_limbo_rename_raises_before_rename
1821+breezy.tests.test_transform.TestFinalizeRobustness.test_root_create_file_open_raises_after_creation
1822+breezy.tests.test_transform.TestFinalizeRobustness.test_root_create_file_open_raises_before_creation
1823+breezy.tests.test_transform.TestFinalizeRobustness.test_subdir_create_file_open_raises_after_creation
1824+breezy.tests.test_transform.TestFinalizeRobustness.test_subdir_create_file_open_raises_before_creation
1825 breezy.tests.test_transform.TestInventoryAltered.test_inventory_altered_changed_parent_id
1826 breezy.tests.test_transform.TestInventoryAltered.test_inventory_altered_noop_changed_parent_id
1827 breezy.tests.test_transform.TestInventoryAltered.test_inventory_altered_unchanged
1828@@ -29319,6 +29439,7 @@
1829 breezy.tests.test_transform.TestTransformPreview.test_missing_content_summary
1830 breezy.tests.test_transform.TestTransformPreview.test_path2id_created
1831 breezy.tests.test_transform.TestTransformPreview.test_path2id_deleted_unchanged
1832+breezy.tests.test_transform.TestTransformPreview.test_path2id_moved
1833 breezy.tests.test_transform.TestTransformPreview.test_path2id_renamed_parent
1834 breezy.tests.test_transform.TestTransformPreview.test_plan_file_merge
1835 breezy.tests.test_transform.TestTransformPreview.test_plan_file_merge_revision_tree
1836@@ -29632,6 +29753,7 @@
1837 breezy.tests.test_upgrade.TestUpgrade.test_upgrade_rich_root
1838 breezy.tests.test_upstream_import.TestImport.test_broken_tar
1839 breezy.tests.test_upstream_import.TestImport.test_common_directory
1840+breezy.tests.test_upstream_import.TestImport.test_copydir_nosub
1841 breezy.tests.test_upstream_import.TestImport.test_get_archive_type
1842 breezy.tests.test_upstream_import.TestImport.test_no_crash_with_bzrdir
1843 breezy.tests.test_upstream_import.TestImport.test_top_path
1844@@ -29664,6 +29786,8 @@
1845 breezy.tests.test_url_policy_open.TestOpenOnlyScheme.test_stacked_within_scheme
1846 breezy.tests.test_urlutils.QuoteTests.test_quote
1847 breezy.tests.test_urlutils.QuoteTests.test_quote_tildes
1848+breezy.tests.test_urlutils.QuoteTests.test_unquote
1849+breezy.tests.test_urlutils.QuoteTests.test_unquote_to_bytes
1850 breezy.tests.test_urlutils.TestCwdToURL.test_dot
1851 breezy.tests.test_urlutils.TestCwdToURL.test_non_ascii
1852 breezy.tests.test_urlutils.TestDeriveToLocation.test_to_locations_derived_from_paths
1853@@ -29696,6 +29820,7 @@
1854 breezy.tests.test_urlutils.TestURL.test_str
1855 breezy.tests.test_urlutils.TestUrlToPath.test_basename
1856 breezy.tests.test_urlutils.TestUrlToPath.test_dirname
1857+breezy.tests.test_urlutils.TestUrlToPath.test_escape
1858 breezy.tests.test_urlutils.TestUrlToPath.test_escape_tildes
1859 breezy.tests.test_urlutils.TestUrlToPath.test_escape_unescape
1860 breezy.tests.test_urlutils.TestUrlToPath.test_function_type
1861@@ -29716,6 +29841,7 @@
1862 breezy.tests.test_urlutils.TestUrlToPath.test_url_scheme_re
1863 breezy.tests.test_urlutils.TestUrlToPath.test_win32_extract_drive_letter
1864 breezy.tests.test_urlutils.TestUrlToPath.test_win32_local_path_from_url
1865+breezy.tests.test_urlutils.TestUrlToPath.test_win32_local_path_to_url
1866 breezy.tests.test_urlutils.TestUrlToPath.test_win32_strip_local_trailing_slash
1867 breezy.tests.test_urlutils.TestUrlToPath.test_win32_unc_path_from_url
1868 breezy.tests.test_urlutils.TestUrlToPath.test_win32_unc_path_to_url
1869@@ -29766,6 +29892,7 @@
1870 breezy.tests.test_version_info.TestVersionInfoRio.test_rio_version_hook
1871 breezy.tests.test_version_info.TestVersionInfoRio.test_simple
1872 breezy.tests.test_version.TestBzrlibVersioning.test_get_brz_source_tree
1873+breezy.tests.test_version.TestBzrlibVersioning.test_python_binary_path
1874 breezy.tests.test_version.TestPlatformUse.test_platform(ascii)
1875 breezy.tests.test_version.TestPlatformUse.test_platform(unicode)
1876 breezy.tests.test_vf_search.TestLimitedSearchResultFromParentMap.test_ancestry_1
1877@@ -29778,6 +29905,7 @@
1878 breezy.tests.test_vf_search.TestSearchResultFromParentMap.test_ancestry_1
1879 breezy.tests.test_vf_search.TestSearchResultFromParentMap.test_ancestry_2
1880 breezy.tests.test_vf_search.TestSearchResultFromParentMap.test_no_parents
1881+breezy.tests.test_vf_search.TestSearchResultFromParentMap.test_partial_search
1882 breezy.tests.test_vf_search.TestSearchResultRefine.test_refine
1883 breezy.tests.test_views.TestErrors.test_file_outside_view
1884 breezy.tests.test_views.TestErrors.test_no_such_view

Subscribers

People subscribed via source and target branches