Merge lp:~jelmer/brz/python3-dirstate 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-dirstate
Merge into: lp:brz
Diff against target: 3649 lines (+1060/-749)
5 files modified
breezy/bzr/_dirstate_helpers_pyx.pyx (+6/-6)
breezy/bzr/dirstate.py (+86/-54)
breezy/tests/test__dirstate_helpers.py (+7/-1)
breezy/tests/test_dirstate.py (+682/-688)
python3.passing (+279/-0)
To merge this branch: bzr merge lp:~jelmer/brz/python3-dirstate
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+348791@code.launchpad.net

Description of the change

Port dirstate to python3, a bit.

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

Changes look good as far as I can see, two inline notes about passing tests update.

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

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

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

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/bzr/_dirstate_helpers_pyx.pyx'
2--- breezy/bzr/_dirstate_helpers_pyx.pyx 2017-07-30 23:53:38 +0000
3+++ breezy/bzr/_dirstate_helpers_pyx.pyx 2018-07-01 11:20:52 +0000
4@@ -29,7 +29,7 @@
5 import sys
6
7 from .. import cache_utf8, errors, osutils
8-from .dirstate import DirState, DirstateCorrupt
9+from .dirstate import DirState, DirstateCorrupt, is_inside_any, is_inside
10 from ..osutils import parent_directories, pathjoin, splitpath
11
12
13@@ -1164,7 +1164,7 @@
14 # add the source to the search path to find any children it
15 # has. TODO ? : only add if it is a container ?
16 if (not self.doing_consistency_expansion and
17- not osutils.is_inside_any(self.searched_specific_files,
18+ not is_inside_any(self.searched_specific_files,
19 source_details[1])):
20 self.search_specific_files.add(source_details[1])
21 # expanding from a user requested path, parent expansion
22@@ -1385,7 +1385,7 @@
23 # common case to rename dirs though, so a correct but slow
24 # implementation will do.
25 if (not self.doing_consistency_expansion and
26- not osutils.is_inside_any(self.searched_specific_files,
27+ not is_inside_any(self.searched_specific_files,
28 target_details[1])):
29 self.search_specific_files.add(target_details[1])
30 # We don't expand the specific files parents list here as
31@@ -1432,7 +1432,7 @@
32
33 cdef int _update_current_block(self) except -1:
34 if (self.block_index < len(self.state._dirblocks) and
35- osutils.is_inside(self.current_root, self.state._dirblocks[self.block_index][0])):
36+ is_inside(self.current_root, self.state._dirblocks[self.block_index][0])):
37 self.current_block = self.state._dirblocks[self.block_index]
38 self.current_block_list = self.current_block[1]
39 self.current_block_pos = 0
40@@ -1905,7 +1905,7 @@
41 if path_utf8 in self.searched_exact_paths:
42 # We've examined this path.
43 continue
44- if osutils.is_inside_any(self.searched_specific_files, path_utf8):
45+ if is_inside_any(self.searched_specific_files, path_utf8):
46 # We've examined this path.
47 continue
48 path_entries = self.state._entries_for_path(path_utf8)
49@@ -1968,7 +1968,7 @@
50 current_block = None
51 if block_index < len(self.state._dirblocks):
52 current_block = self.state._dirblocks[block_index]
53- if not osutils.is_inside(
54+ if not is_inside(
55 entry_path_utf8, current_block[0]):
56 # No entries for this directory at all.
57 current_block = None
58
59=== modified file 'breezy/bzr/dirstate.py'
60--- breezy/bzr/dirstate.py 2018-06-30 15:18:05 +0000
61+++ breezy/bzr/dirstate.py 2018-07-01 11:20:52 +0000
62@@ -78,27 +78,27 @@
63
64 and the entries in there are::
65
66- entries[0][0]: ''
67- entries[0][1]: ''
68+ entries[0][0]: b''
69+ entries[0][1]: b''
70 entries[0][2]: file_id
71 entries[1][0]: The tree data for the current tree for this fileid at /
72 etc.
73
74 Kinds::
75
76- 'r' is a relocated entry: This path is not present in this tree with this
77+ b'r' is a relocated entry: This path is not present in this tree with this
78 id, but the id can be found at another location. The fingerprint is
79 used to point to the target location.
80- 'a' is an absent entry: In that tree the id is not present at this path.
81- 'd' is a directory entry: This path in this tree is a directory with the
82+ b'a' is an absent entry: In that tree the id is not present at this path.
83+ b'd' is a directory entry: This path in this tree is a directory with the
84 current file id. There is no fingerprint for directories.
85- 'f' is a file entry: As for directory, but it's a file. The fingerprint is
86+ b'f' is a file entry: As for directory, but it's a file. The fingerprint is
87 the sha1 value of the file's canonical form, i.e. after any read
88 filters have been applied to the convenience form stored in the working
89 tree.
90- 'l' is a symlink entry: As for directory, but a symlink. The fingerprint is
91+ b'l' is a symlink entry: As for directory, but a symlink. The fingerprint is
92 the link target.
93- 't' is a reference to a nested subtree; the fingerprint is the referenced
94+ b't' is a reference to a nested subtree; the fingerprint is the referenced
95 revision.
96
97 Ordering:
98@@ -307,6 +307,38 @@
99 return statvalue, sha1
100
101
102+def is_inside(dir, fname):
103+ """True if fname is inside dir.
104+
105+ The parameters should typically be passed to osutils.normpath first, so
106+ that . and .. and repeated slashes are eliminated, and the separators
107+ are canonical for the platform.
108+
109+ The empty string as a dir name is taken as top-of-tree and matches
110+ everything.
111+
112+ This is based on breezy.osutils.is_inside, which uses filesystem strings.
113+ """
114+ if dir == fname:
115+ return True
116+
117+ if dir == b'':
118+ return True
119+
120+ if not dir.endswith(b'/'):
121+ dir += b'/'
122+
123+ return fname.startswith(dir)
124+
125+
126+def is_inside_any(dir_list, fname):
127+ """True if fname is inside any of given dirs."""
128+ for dirname in dir_list:
129+ if is_inside(dirname, fname):
130+ return True
131+ return False
132+
133+
134 class DirState(object):
135 """Record directory and metadata state for fast access.
136
137@@ -462,7 +494,7 @@
138 def add(self, path, file_id, kind, stat, fingerprint):
139 """Add a path to be tracked.
140
141- :param path: The path within the dirstate - '' is the root, 'foo' is the
142+ :param path: The path within the dirstate - b'' is the root, 'foo' is the
143 path foo within the root, 'foo/bar' is the path bar within foo
144 within the root.
145 :param file_id: The file id of the path being added.
146@@ -473,7 +505,7 @@
147 after any read filters have been applied),
148 or the target of a symlink,
149 or the referenced revision id for tree-references,
150- or '' for directories.
151+ or b'' for directories.
152 """
153 # adding a file:
154 # find the block its in.
155@@ -512,9 +544,9 @@
156 if file_id_entry[0] != (dirname, basename, file_id):
157 # set the old name's current operation to rename
158 self.update_minimal(file_id_entry[0],
159- 'r',
160- path_utf8='',
161- packed_stat='',
162+ b'r',
163+ path_utf8=b'',
164+ packed_stat=b'',
165 fingerprint=utf8path
166 )
167 rename_from = file_id_entry[0][0:2]
168@@ -523,7 +555,7 @@
169 kind = DirState._minikind_to_kind[file_id_entry[1][0][0]]
170 info = '%s:%s' % (kind, path)
171 raise errors.DuplicateFileId(file_id, info)
172- first_key = (dirname, basename, '')
173+ first_key = (dirname, basename, b'')
174 block_index, present = self._find_block_index_from_key(first_key)
175 if present:
176 # check the path is not in the tree
177@@ -557,7 +589,7 @@
178 minikind = DirState._kind_to_minikind[kind]
179 if rename_from is not None:
180 if rename_from[0]:
181- old_path_utf8 = '%s/%s' % rename_from
182+ old_path_utf8 = b'%s/%s' % rename_from
183 else:
184 old_path_utf8 = rename_from[1]
185 parent_info[0] = (b'r', old_path_utf8, 0, False, b'')
186@@ -619,7 +651,7 @@
187 file_size = os.fstat(state_file.fileno()).st_size
188 # We end up with 2 extra fields, we should have a trailing '\n' to
189 # ensure that we read the whole record, and we should have a precursur
190- # '' which ensures that we start after the previous '\n'
191+ # b'' which ensures that we start after the previous '\n'
192 entry_field_count = self._fields_per_entry() + 1
193
194 low = self._end_of_header
195@@ -653,7 +685,7 @@
196 if count > max_count:
197 raise errors.BzrError('Too many seeks, most likely a bug.')
198
199- mid = max(low, (low+high-page_size)/2)
200+ mid = max(low, (low+high-page_size)//2)
201
202 state_file.seek(mid)
203 # limit the read size, so we don't end up reading data that we have
204@@ -811,7 +843,7 @@
205 file_size = os.fstat(state_file.fileno()).st_size
206 # We end up with 2 extra fields, we should have a trailing '\n' to
207 # ensure that we read the whole record, and we should have a precursur
208- # '' which ensures that we start after the previous '\n'
209+ # b'' which ensures that we start after the previous '\n'
210 entry_field_count = self._fields_per_entry() + 1
211
212 low = self._end_of_header
213@@ -845,7 +877,7 @@
214 if count > max_count:
215 raise errors.BzrError('Too many seeks, most likely a bug.')
216
217- mid = max(low, (low+high-page_size)/2)
218+ mid = max(low, (low+high-page_size)//2)
219
220 state_file.seek(mid)
221 # limit the read size, so we don't end up reading data that we have
222@@ -970,7 +1002,7 @@
223 directories. (and renames?)
224
225 :param paths: A sorted list of (dir, name) pairs
226- eg: [('', 'a'), ('', 'f'), ('a/b', 'c')]
227+ eg: [('', b'a'), ('', b'f'), ('a/b', b'c')]
228 :return: A dictionary mapping (dir, name, file_id) => [tree_info]
229 """
230 # Map from (dir, name, file_id) => [tree_info]
231@@ -1247,9 +1279,9 @@
232 cache=self._split_path_cache)
233 # _right returns one-past-where-key is so we have to subtract
234 # one to use it. we use _right here because there are two
235- # '' blocks - the root, and the contents of root
236+ # b'' blocks - the root, and the contents of root
237 # we always have a minimum of 2 in self._dirblocks: root and
238- # root-contents, and for '', we get 2 back, so this is
239+ # root-contents, and for b'', we get 2 back, so this is
240 # simple and correct:
241 present = (block_index < len(self._dirblocks) and
242 self._dirblocks[block_index][0] == key[0])
243@@ -1568,10 +1600,10 @@
244 # pair will result in the deleted item being reinserted, or
245 # renamed items being reinserted twice - and possibly at the
246 # wrong place. Splitting into a delete/add pair also simplifies
247- # the handling of entries with ('f', ...), ('r' ...) because
248- # the target of the 'r' is old_path here, and we add that to
249+ # the handling of entries with (b'f', ...), (b'r' ...) because
250+ # the target of the b'r' is old_path here, and we add that to
251 # deletes, meaning that the add handler does not need to check
252- # for 'r' items on every pass.
253+ # for b'r' items on every pass.
254 self._update_basis_apply_deletes(deletes)
255 deletes = []
256 # Split into an add/delete pair recursively.
257@@ -1767,16 +1799,16 @@
258 # rename records.
259 active_dir, active_name = active_entry[0][:2]
260 if active_dir:
261- active_path = active_dir + '/' + active_name
262+ active_path = active_dir + b'/' + active_name
263 else:
264 active_path = active_name
265- active_entry[1][1] = st('r', new_path, 0, False, '')
266- entry[1][0] = st('r', active_path, 0, False, '')
267- elif active_kind == 'r':
268+ active_entry[1][1] = st(b'r', new_path, 0, False, b'')
269+ entry[1][0] = st(b'r', active_path, 0, False, b'')
270+ elif active_kind == b'r':
271 raise NotImplementedError()
272
273 new_kind = new_details[0]
274- if new_kind == 'd':
275+ if new_kind == b'd':
276 self._ensure_block(block_index, entry_index, new_path)
277
278 def _update_basis_apply_changes(self, changes):
279@@ -1837,7 +1869,7 @@
280 if active_entry[1][1][0] != b'r':
281 self._raise_invalid(old_path, file_id,
282 "Dirstate did not have matching rename entries")
283- elif active_entry[1][0][0] in 'ar':
284+ elif active_entry[1][0][0] in b'ar':
285 self._raise_invalid(old_path, file_id,
286 "Dirstate had a rename pointing at an inactive"
287 " tree0")
288@@ -1849,7 +1881,7 @@
289 # exist. Remove its dirblock if present
290 (dir_block_index,
291 present) = self._find_block_index_from_key(
292- (old_path, '', ''))
293+ (old_path, b'', b''))
294 if present:
295 dir_block = self._dirblocks[dir_block_index][1]
296 if not dir_block:
297@@ -1903,12 +1935,12 @@
298 except KeyError:
299 # Unhandled kind
300 return None
301- if minikind == 'f':
302+ if minikind == b'f':
303 if self._cutoff_time is None:
304 self._sha_cutoff_time()
305 if (stat_value.st_mtime < self._cutoff_time
306 and stat_value.st_ctime < self._cutoff_time):
307- entry[1][0] = ('f', sha1, stat_value.st_size, entry[1][0][3],
308+ entry[1][0] = (b'f', sha1, stat_value.st_size, entry[1][0][3],
309 pack_stat(stat_value))
310 self._mark_modified([entry])
311
312@@ -2013,7 +2045,7 @@
313 fields[3], # minikind
314 fields[4], # fingerprint
315 _int(fields[5]), # size
316- fields[6] == 'y', # executable
317+ fields[6] == b'y', # executable
318 fields[7], # packed_stat or revision_id
319 )])
320 return fields_to_entry_0_parents
321@@ -2025,14 +2057,14 @@
322 fields[3], # minikind
323 fields[4], # fingerprint
324 _int(fields[5]), # size
325- fields[6] == 'y', # executable
326+ fields[6] == b'y', # executable
327 fields[7], # packed_stat or revision_id
328 ),
329 ( # Parent 1
330 fields[8], # minikind
331 fields[9], # fingerprint
332 _int(fields[10]), # size
333- fields[11] == 'y', # executable
334+ fields[11] == b'y', # executable
335 fields[12], # packed_stat or revision_id
336 ),
337 ])
338@@ -2045,21 +2077,21 @@
339 fields[3], # minikind
340 fields[4], # fingerprint
341 _int(fields[5]), # size
342- fields[6] == 'y', # executable
343+ fields[6] == b'y', # executable
344 fields[7], # packed_stat or revision_id
345 ),
346 ( # Parent 1
347 fields[8], # minikind
348 fields[9], # fingerprint
349 _int(fields[10]), # size
350- fields[11] == 'y', # executable
351+ fields[11] == b'y', # executable
352 fields[12], # packed_stat or revision_id
353 ),
354 ( # Parent 2
355 fields[13], # minikind
356 fields[14], # fingerprint
357 _int(fields[15]), # size
358- fields[16] == 'y', # executable
359+ fields[16] == b'y', # executable
360 fields[17], # packed_stat or revision_id
361 ),
362 ])
363@@ -2070,7 +2102,7 @@
364 trees = [(fields[cur], # minikind
365 fields[cur+1], # fingerprint
366 _int(fields[cur+2]), # size
367- fields[cur+3] == 'y', # executable
368+ fields[cur+3] == b'y', # executable
369 fields[cur+4], # stat or revision_id
370 ) for cur in range(3, len(fields)-1, 5)]
371 return path_name_file_id_key, trees
372@@ -2274,7 +2306,7 @@
373 def _iter_child_entries(self, tree_index, path_utf8):
374 """Iterate over all the entries that are children of path_utf.
375
376- This only returns entries that are present (not in 'a', 'r') in
377+ This only returns entries that are present (not in b'a', b'r') in
378 tree_index. tree_index data is not refreshed, so if tree 0 is used,
379 results may differ from that obtained if paths were statted to
380 determine what ones were directories.
381@@ -2536,7 +2568,7 @@
382 self._state_file = self._lock_token.f
383 # TODO: jam 20070315 We should validate the disk file has
384 # not changed contents. Since restore_read_lock may
385- # not be an atomic operation.
386+ # not be an atomic operation.
387
388 def _maybe_fdatasync(self):
389 """Flush to disk if possible and if not configured off."""
390@@ -2584,7 +2616,7 @@
391 def set_path_id(self, path, new_id):
392 """Change the id of path to new_id in the current working tree.
393
394- :param path: The path inside the tree to set - '' is the root, 'foo'
395+ :param path: The path inside the tree to set - b'' is the root, 'foo'
396 is the path foo in the root.
397 :param new_id: The new id to assign to the path. This must be a utf8
398 file id (not unicode, and not None).
399@@ -2993,7 +3025,7 @@
400 updated as well.
401
402 :param key: (dir, name, file_id) for the new entry
403- :param minikind: The type for the entry ('f' == 'file', 'd' ==
404+ :param minikind: The type for the entry (b'f' == 'file', b'd' ==
405 'directory'), etc.
406 :param executable: Should the executable bit be set?
407 :param fingerprint: Simple fingerprint for new entry: canonical-form
408@@ -3012,7 +3044,7 @@
409 block = self._find_block(key)[1]
410 if packed_stat is None:
411 packed_stat = DirState.NULLSTAT
412- # XXX: Some callers pass '' as the packed_stat, and it seems to be
413+ # XXX: Some callers pass b'' as the packed_stat, and it seems to be
414 # sometimes present in the dirstate - this seems oddly inconsistent.
415 # mbp 20071008
416 entry_index, present = self._find_entry_index(key, block)
417@@ -3188,7 +3220,7 @@
418 # NOTE: This must always raise AssertionError not just assert,
419 # otherwise it may not behave properly under python -O
420 #
421- # TODO: All entries must have some content that's not 'a' or 'r',
422+ # TODO: All entries must have some content that's not b'a' or b'r',
423 # otherwise it could just be removed.
424 #
425 # TODO: All relocations must point directly to a real entry.
426@@ -3588,7 +3620,7 @@
427 if source_minikind == b'r':
428 # add the source to the search path to find any children it
429 # has. TODO ? : only add if it is a container ?
430- if not osutils.is_inside_any(self.searched_specific_files,
431+ if not is_inside_any(self.searched_specific_files,
432 source_details[1]):
433 self.search_specific_files.add(source_details[1])
434 # generate the old path; this is needed for stating later
435@@ -3798,7 +3830,7 @@
436 # a renamed parent. TODO: handle this efficiently. Its not
437 # common case to rename dirs though, so a correct but slow
438 # implementation will do.
439- if not osutils.is_inside_any(self.searched_specific_files, target_details[1]):
440+ if not is_inside_any(self.searched_specific_files, target_details[1]):
441 self.search_specific_files.add(target_details[1])
442 elif source_minikind in _ra and target_minikind in _ra:
443 # neither of the selected trees contain this file,
444@@ -3972,7 +4004,7 @@
445 # walk until both the directory listing and the versioned metadata
446 # are exhausted.
447 if (block_index < len(self.state._dirblocks) and
448- osutils.is_inside(current_root, self.state._dirblocks[block_index][0])):
449+ is_inside(current_root, self.state._dirblocks[block_index][0])):
450 current_block = self.state._dirblocks[block_index]
451 else:
452 current_block = None
453@@ -4042,7 +4074,7 @@
454 yield result
455 block_index +=1
456 if (block_index < len(self.state._dirblocks) and
457- osutils.is_inside(current_root,
458+ is_inside(current_root,
459 self.state._dirblocks[block_index][0])):
460 current_block = self.state._dirblocks[block_index]
461 else:
462@@ -4166,7 +4198,7 @@
463 if current_block is not None:
464 block_index += 1
465 if (block_index < len(self.state._dirblocks) and
466- osutils.is_inside(current_root, self.state._dirblocks[block_index][0])):
467+ is_inside(current_root, self.state._dirblocks[block_index][0])):
468 current_block = self.state._dirblocks[block_index]
469 else:
470 current_block = None
471@@ -4185,7 +4217,7 @@
472 # Even in extremely large trees this should be modest, so currently
473 # no attempt is made to optimise.
474 path_utf8 = self.search_specific_file_parents.pop()
475- if osutils.is_inside_any(self.searched_specific_files, path_utf8):
476+ if is_inside_any(self.searched_specific_files, path_utf8):
477 # We've examined this path.
478 continue
479 if path_utf8 in self.searched_exact_paths:
480@@ -4251,7 +4283,7 @@
481 current_block = None
482 if block_index < len(self.state._dirblocks):
483 current_block = self.state._dirblocks[block_index]
484- if not osutils.is_inside(
485+ if not is_inside(
486 entry_path_utf8, current_block[0]):
487 # No entries for this directory at all.
488 current_block = None
489
490=== modified file 'breezy/tests/test__dirstate_helpers.py'
491--- breezy/tests/test__dirstate_helpers.py 2018-06-18 20:53:01 +0000
492+++ breezy/tests/test__dirstate_helpers.py 2018-07-01 11:20:52 +0000
493@@ -1308,7 +1308,13 @@
494 basis_tree = tree.basis_tree()
495 def is_inside_raises(*args, **kwargs):
496 raise RuntimeError('stop this')
497- self.overrideAttr(osutils, 'is_inside', is_inside_raises)
498+ self.overrideAttr(dirstate, 'is_inside', is_inside_raises)
499+ try:
500+ from breezy.bzr import _dirstate_helpers_pyx
501+ except ImportError:
502+ pass
503+ else:
504+ self.overrideAttr(_dirstate_helpers_pyx, 'is_inside', is_inside_raises)
505 self.assertListRaises(RuntimeError, tree.iter_changes, basis_tree)
506
507 def test_simple_changes(self):
508
509=== modified file 'breezy/tests/test_dirstate.py'
510--- breezy/tests/test_dirstate.py 2018-06-24 13:18:43 +0000
511+++ breezy/tests/test_dirstate.py 2018-07-01 11:20:52 +0000
512@@ -88,13 +88,13 @@
513
514 def create_dirstate_with_root(self):
515 """Return a write-locked state with a single root entry."""
516- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
517- root_entry_direntry = ('', '', 'a-root-value'), [
518- ('d', '', 0, False, packed_stat),
519+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
520+ root_entry_direntry = (b'', b'', b'a-root-value'), [
521+ (b'd', b'', 0, False, packed_stat),
522 ]
523 dirblocks = []
524- dirblocks.append(('', [root_entry_direntry]))
525- dirblocks.append(('', []))
526+ dirblocks.append((b'', [root_entry_direntry]))
527+ dirblocks.append((b'', []))
528 state = self.create_empty_dirstate()
529 try:
530 state._set_data([], dirblocks)
531@@ -106,9 +106,9 @@
532
533 def create_dirstate_with_root_and_subdir(self):
534 """Return a locked DirState with a root and a subdir"""
535- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
536- subdir_entry = ('', 'subdir', 'subdir-id'), [
537- ('d', '', 0, False, packed_stat),
538+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
539+ subdir_entry = (b'', b'subdir', b'subdir-id'), [
540+ (b'd', b'', 0, False, packed_stat),
541 ]
542 state = self.create_dirstate_with_root()
543 try:
544@@ -137,40 +137,40 @@
545
546 :return: The dirstate, still write-locked.
547 """
548- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
549- null_sha = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
550- root_entry = ('', '', 'a-root-value'), [
551- ('d', '', 0, False, packed_stat),
552- ]
553- a_entry = ('', 'a', 'a-dir'), [
554- ('d', '', 0, False, packed_stat),
555- ]
556- b_entry = ('', 'b', 'b-dir'), [
557- ('d', '', 0, False, packed_stat),
558- ]
559- c_entry = ('', 'c', 'c-file'), [
560- ('f', null_sha, 10, False, packed_stat),
561- ]
562- d_entry = ('', 'd', 'd-file'), [
563- ('f', null_sha, 20, False, packed_stat),
564- ]
565- e_entry = ('a', 'e', 'e-dir'), [
566- ('d', '', 0, False, packed_stat),
567- ]
568- f_entry = ('a', 'f', 'f-file'), [
569- ('f', null_sha, 30, False, packed_stat),
570- ]
571- g_entry = ('b', 'g', 'g-file'), [
572- ('f', null_sha, 30, False, packed_stat),
573- ]
574- h_entry = ('b', 'h\xc3\xa5', 'h-\xc3\xa5-file'), [
575- ('f', null_sha, 40, False, packed_stat),
576+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
577+ null_sha = b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
578+ root_entry = (b'', b'', b'a-root-value'), [
579+ (b'd', b'', 0, False, packed_stat),
580+ ]
581+ a_entry = (b'', b'a', b'a-dir'), [
582+ (b'd', b'', 0, False, packed_stat),
583+ ]
584+ b_entry = (b'', b'b', b'b-dir'), [
585+ (b'd', b'', 0, False, packed_stat),
586+ ]
587+ c_entry = (b'', b'c', b'c-file'), [
588+ (b'f', null_sha, 10, False, packed_stat),
589+ ]
590+ d_entry = (b'', b'd', b'd-file'), [
591+ (b'f', null_sha, 20, False, packed_stat),
592+ ]
593+ e_entry = (b'a', b'e', b'e-dir'), [
594+ (b'd', b'', 0, False, packed_stat),
595+ ]
596+ f_entry = (b'a', b'f', b'f-file'), [
597+ (b'f', null_sha, 30, False, packed_stat),
598+ ]
599+ g_entry = (b'b', b'g', b'g-file'), [
600+ (b'f', null_sha, 30, False, packed_stat),
601+ ]
602+ h_entry = (b'b', b'h\xc3\xa5', b'h-\xc3\xa5-file'), [
603+ (b'f', null_sha, 40, False, packed_stat),
604 ]
605 dirblocks = []
606- dirblocks.append(('', [root_entry]))
607- dirblocks.append(('', [a_entry, b_entry, c_entry, d_entry]))
608- dirblocks.append(('a', [e_entry, f_entry]))
609- dirblocks.append(('b', [g_entry, h_entry]))
610+ dirblocks.append((b'', [root_entry]))
611+ dirblocks.append((b'', [a_entry, b_entry, c_entry, d_entry]))
612+ dirblocks.append((b'a', [e_entry, f_entry]))
613+ dirblocks.append((b'b', [g_entry, h_entry]))
614 state = dirstate.DirState.initialize('dirstate')
615 state._validate()
616 try:
617@@ -225,12 +225,12 @@
618 """
619 tree = self.make_branch_and_tree('tree')
620 paths = ['a', 'b/', 'b/c', 'b/d/', 'b/d/e', 'b-c', 'f']
621- file_ids = ['a-id', 'b-id', 'c-id', 'd-id', 'e-id', 'b-c-id', 'f-id']
622+ file_ids = [b'a-id', b'b-id', b'c-id', b'd-id', b'e-id', b'b-c-id', b'f-id']
623 self.build_tree(['tree/' + p for p in paths])
624 tree.set_root_id(b'TREE_ROOT')
625 tree.add([p.rstrip('/') for p in paths], file_ids)
626 tree.commit('initial', rev_id=b'rev-1')
627- revision_id = 'rev-1'
628+ revision_id = b'rev-1'
629 # a_packed_stat = dirstate.pack_stat(os.stat('tree/a'))
630 t = self.get_transport('tree')
631 a_text = t.get_bytes('a')
632@@ -255,37 +255,37 @@
633 f_len = len(f_text)
634 null_stat = dirstate.DirState.NULLSTAT
635 expected = {
636- '': (('', '', 'TREE_ROOT'), [
637- ('d', '', 0, False, null_stat),
638- ('d', '', 0, False, revision_id),
639+ b'': ((b'', b'', b'TREE_ROOT'), [
640+ (b'd', b'', 0, False, null_stat),
641+ (b'd', b'', 0, False, revision_id),
642 ]),
643- 'a': (('', 'a', 'a-id'), [
644- ('f', '', 0, False, null_stat),
645- ('f', a_sha, a_len, False, revision_id),
646- ]),
647- 'b': (('', 'b', 'b-id'), [
648- ('d', '', 0, False, null_stat),
649- ('d', '', 0, False, revision_id),
650- ]),
651- 'b/c': (('b', 'c', 'c-id'), [
652- ('f', '', 0, False, null_stat),
653- ('f', c_sha, c_len, False, revision_id),
654- ]),
655- 'b/d': (('b', 'd', 'd-id'), [
656- ('d', '', 0, False, null_stat),
657- ('d', '', 0, False, revision_id),
658- ]),
659- 'b/d/e': (('b/d', 'e', 'e-id'), [
660- ('f', '', 0, False, null_stat),
661- ('f', e_sha, e_len, False, revision_id),
662- ]),
663- 'b-c': (('', 'b-c', 'b-c-id'), [
664- ('f', '', 0, False, null_stat),
665- ('f', b_c_sha, b_c_len, False, revision_id),
666- ]),
667- 'f': (('', 'f', 'f-id'), [
668- ('f', '', 0, False, null_stat),
669- ('f', f_sha, f_len, False, revision_id),
670+ b'a': ((b'', b'a', b'a-id'), [
671+ (b'f', b'', 0, False, null_stat),
672+ (b'f', a_sha, a_len, False, revision_id),
673+ ]),
674+ b'b': ((b'', b'b', b'b-id'), [
675+ (b'd', b'', 0, False, null_stat),
676+ (b'd', b'', 0, False, revision_id),
677+ ]),
678+ b'b/c': ((b'b', b'c', b'c-id'), [
679+ (b'f', b'', 0, False, null_stat),
680+ (b'f', c_sha, c_len, False, revision_id),
681+ ]),
682+ b'b/d': ((b'b', b'd', b'd-id'), [
683+ (b'd', b'', 0, False, null_stat),
684+ (b'd', b'', 0, False, revision_id),
685+ ]),
686+ b'b/d/e': ((b'b/d', b'e', b'e-id'), [
687+ (b'f', b'', 0, False, null_stat),
688+ (b'f', e_sha, e_len, False, revision_id),
689+ ]),
690+ b'b-c': ((b'', b'b-c', b'b-c-id'), [
691+ (b'f', b'', 0, False, null_stat),
692+ (b'f', b_c_sha, b_c_len, False, revision_id),
693+ ]),
694+ b'f': ((b'', b'f', b'f-id'), [
695+ (b'f', b'', 0, False, null_stat),
696+ (b'f', f_sha, f_len, False, revision_id),
697 ]),
698 }
699 state = dirstate.DirState.from_tree(tree, 'dirstate')
700@@ -317,16 +317,16 @@
701 # per entry. Unversion in reverse order so we handle subdirs
702 tree.unversion(['f', 'b-c', 'b/d/e', 'b/d', 'b/c', 'b', 'a'])
703 tree.add(['a', 'b', 'b/c', 'b/d', 'b/d/e', 'b-c', 'f'],
704- ['a-id2', 'b-id2', 'c-id2', 'd-id2', 'e-id2', 'b-c-id2', 'f-id2'])
705+ [b'a-id2', b'b-id2', b'c-id2', b'd-id2', b'e-id2', b'b-c-id2', b'f-id2'])
706
707 # Update the expected dictionary.
708- for path in ['a', 'b', 'b/c', 'b/d', 'b/d/e', 'b-c', 'f']:
709+ for path in [b'a', b'b', b'b/c', b'b/d', b'b/d/e', b'b-c', b'f']:
710 orig = expected[path]
711- path2 = path + '2'
712+ path2 = path + b'2'
713 # This record was deleted in the current tree
714 expected[path] = (orig[0], [dirstate.DirState.NULL_PARENT_DETAILS,
715 orig[1][1]])
716- new_key = (orig[0][0], orig[0][1], orig[0][2]+'2')
717+ new_key = (orig[0][0], orig[0][1], orig[0][2]+b'2')
718 # And didn't exist in the basis tree
719 expected[path2] = (new_key, [orig[1][0],
720 dirstate.DirState.NULL_PARENT_DETAILS])
721@@ -357,20 +357,20 @@
722 # And a directory
723 tree.rename_one('b/d', 'h')
724
725- old_a = expected['a']
726- expected['a'] = (old_a[0], [('r', 'b/g', 0, False, ''), old_a[1][1]])
727- expected['b/g'] = (('b', 'g', b'a-id'), [old_a[1][0],
728- ('r', 'a', 0, False, '')])
729+ old_a = expected[b'a']
730+ expected[b'a'] = (old_a[0], [(b'r', b'b/g', 0, False, b''), old_a[1][1]])
731+ expected[b'b/g'] = ((b'b', b'g', b'a-id'), [old_a[1][0],
732+ (b'r', b'a', 0, False, b'')])
733 old_d = expected['b/d']
734- expected['b/d'] = (old_d[0], [('r', 'h', 0, False, ''), old_d[1][1]])
735- expected['h'] = (('', 'h', b'd-id'), [old_d[1][0],
736- ('r', 'b/d', 0, False, '')])
737+ expected[b'b/d'] = (old_d[0], [(b'r', b'h', 0, False, b''), old_d[1][1]])
738+ expected[b'h'] = ((b'', b'h', b'd-id'), [old_d[1][0],
739+ (b'r', b'b/d', 0, False, b'')])
740
741 old_e = expected['b/d/e']
742- expected['b/d/e'] = (old_e[0], [('r', 'h/e', 0, False, ''),
743+ expected[b'b/d/e'] = (old_e[0], [(b'r', b'h/e', 0, False, b''),
744 old_e[1][1]])
745- expected['h/e'] = (('h', 'e', b'e-id'), [old_e[1][0],
746- ('r', 'b/d/e', 0, False, '')])
747+ expected[b'h/e'] = ((b'h', b'e', b'e-id'), [old_e[1][0],
748+ (b'r', b'b/d/e', 0, False, b'')])
749
750 state.unlock()
751 try:
752@@ -391,8 +391,8 @@
753 # There are no files on disk and no parents
754 tree = self.make_branch_and_tree('tree')
755 expected_result = ([], [
756- (('', '', tree.get_root_id()), # common details
757- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
758+ ((b'', b'', tree.get_root_id()), # common details
759+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
760 ])])
761 state = dirstate.DirState.from_tree(tree, 'dirstate')
762 state._validate()
763@@ -401,12 +401,12 @@
764 def test_1_parents_empty_to_dirstate(self):
765 # create a parent by doing a commit
766 tree = self.make_branch_and_tree('tree')
767- rev_id = tree.commit('first post').encode('utf8')
768+ rev_id = tree.commit('first post')
769 root_stat_pack = dirstate.pack_stat(os.stat(tree.basedir))
770 expected_result = ([rev_id], [
771- (('', '', tree.get_root_id()), # common details
772- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
773- ('d', '', 0, False, rev_id), # first parent details
774+ ((b'', b'', tree.get_root_id()), # common details
775+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
776+ (b'd', b'', 0, False, rev_id), # first parent details
777 ])])
778 state = dirstate.DirState.from_tree(tree, 'dirstate')
779 self.check_state_with_reopen(expected_result, state)
780@@ -424,10 +424,10 @@
781 rev_id2 = tree2.commit('second post', allow_pointless=True)
782 tree.merge_from_branch(tree2.branch)
783 expected_result = ([rev_id, rev_id2], [
784- (('', '', tree.get_root_id()), # common details
785- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
786- ('d', '', 0, False, rev_id), # first parent details
787- ('d', '', 0, False, rev_id), # second parent details
788+ ((b'', b'', tree.get_root_id()), # common details
789+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
790+ (b'd', b'', 0, False, rev_id), # first parent details
791+ (b'd', b'', 0, False, rev_id), # second parent details
792 ])])
793 state = dirstate.DirState.from_tree(tree, 'dirstate')
794 self.check_state_with_reopen(expected_result, state)
795@@ -443,8 +443,8 @@
796 tree = self.make_branch_and_tree('tree')
797 self.build_tree(['tree/unknown'])
798 expected_result = ([], [
799- (('', '', tree.get_root_id()), # common details
800- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
801+ ((b'', b'', tree.get_root_id()), # common details
802+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
803 ])])
804 state = dirstate.DirState.from_tree(tree, 'dirstate')
805 self.check_state_with_reopen(expected_result, state)
806@@ -460,11 +460,11 @@
807 # There are files on disk and no parents
808 tree = self.get_tree_with_a_file()
809 expected_result = ([], [
810- (('', '', tree.get_root_id()), # common details
811- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
812+ ((b'', b'', tree.get_root_id()), # common details
813+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
814 ]),
815- (('', 'a file', b'a-file-id'), # common
816- [('f', '', 0, False, dirstate.DirState.NULLSTAT), # current
817+ ((b'', b'a file', b'a-file-id'), # common
818+ [(b'f', b'', 0, False, dirstate.DirState.NULLSTAT), # current
819 ]),
820 ])
821 state = dirstate.DirState.from_tree(tree, 'dirstate')
822@@ -473,18 +473,18 @@
823 def test_1_parents_not_empty_to_dirstate(self):
824 # create a parent by doing a commit
825 tree = self.get_tree_with_a_file()
826- rev_id = tree.commit('first post').encode('utf8')
827+ rev_id = tree.commit('first post')
828 # change the current content to be different this will alter stat, sha
829 # and length:
830 self.build_tree_contents([('tree/a file', b'new content\n')])
831 expected_result = ([rev_id], [
832- (('', '', tree.get_root_id()), # common details
833- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
834- ('d', '', 0, False, rev_id), # first parent details
835+ ((b'', b'', tree.get_root_id()), # common details
836+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
837+ (b'd', b'', 0, False, rev_id), # first parent details
838 ]),
839- (('', 'a file', b'a-file-id'), # common
840- [('f', '', 0, False, dirstate.DirState.NULLSTAT), # current
841- ('f', 'c3ed76e4bfd45ff1763ca206055bca8e9fc28aa8', 24, False,
842+ ((b'', b'a file', b'a-file-id'), # common
843+ [(b'f', b'', 0, False, dirstate.DirState.NULLSTAT), # current
844+ (b'f', b'c3ed76e4bfd45ff1763ca206055bca8e9fc28aa8', 24, False,
845 rev_id), # first parent
846 ]),
847 ])
848@@ -494,27 +494,27 @@
849 def test_2_parents_not_empty_to_dirstate(self):
850 # create a parent by doing a commit
851 tree = self.get_tree_with_a_file()
852- rev_id = tree.commit('first post').encode('utf8')
853+ rev_id = tree.commit('first post')
854 tree2 = tree.controldir.sprout('tree2').open_workingtree()
855 # change the current content to be different this will alter stat, sha
856 # and length:
857- self.build_tree_contents([('tree2/a file', 'merge content\n')])
858- rev_id2 = tree2.commit('second post').encode('utf8')
859+ self.build_tree_contents([('tree2/a file', b'merge content\n')])
860+ rev_id2 = tree2.commit('second post')
861 tree.merge_from_branch(tree2.branch)
862 # change the current content to be different this will alter stat, sha
863 # and length again, giving us three distinct values:
864 self.build_tree_contents([('tree/a file', b'new content\n')])
865 expected_result = ([rev_id, rev_id2], [
866- (('', '', tree.get_root_id()), # common details
867- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
868- ('d', '', 0, False, rev_id), # first parent details
869- ('d', '', 0, False, rev_id), # second parent details
870+ ((b'', b'', tree.get_root_id()), # common details
871+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
872+ (b'd', b'', 0, False, rev_id), # first parent details
873+ (b'd', b'', 0, False, rev_id), # second parent details
874 ]),
875- (('', 'a file', b'a-file-id'), # common
876- [('f', '', 0, False, dirstate.DirState.NULLSTAT), # current
877- ('f', 'c3ed76e4bfd45ff1763ca206055bca8e9fc28aa8', 24, False,
878+ ((b'', b'a file', b'a-file-id'), # common
879+ [(b'f', b'', 0, False, dirstate.DirState.NULLSTAT), # current
880+ (b'f', b'c3ed76e4bfd45ff1763ca206055bca8e9fc28aa8', 24, False,
881 rev_id), # first parent
882- ('f', '314d796174c9412647c3ce07dfb5d36a94e72958', 14, False,
883+ (b'f', b'314d796174c9412647c3ce07dfb5d36a94e72958', 14, False,
884 rev_id2), # second parent
885 ]),
886 ])
887@@ -530,8 +530,8 @@
888 for i in range(7):
889 tree = self.make_branch_and_tree('tree%d' % i)
890 self.build_tree(['tree%d/name' % i,])
891- tree.add(['name'], ['file-id%d' % i])
892- revision_id = 'revid-%d' % i
893+ tree.add(['name'], [b'file-id%d' % i])
894+ revision_id = b'revid-%d' % i
895 tree.commit('message', rev_id=revision_id)
896 parents.append((revision_id,
897 tree.branch.repository.revision_tree(revision_id)))
898@@ -570,11 +570,11 @@
899 # get a state object
900 # no parents, default tree content
901 expected_result = ([], [
902- (('', '', tree.get_root_id()), # common details
903+ ((b'', b'', tree.get_root_id()), # common details
904 # current tree details, but new from_tree skips statting, it
905 # uses set_state_from_inventory, and thus depends on the
906 # inventory state.
907- [('d', '', 0, False, dirstate.DirState.NULLSTAT),
908+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT),
909 ])
910 ])
911 state = dirstate.DirState.on_file('dirstate')
912@@ -595,7 +595,7 @@
913 def test_can_save_in_read_lock(self):
914 state = self.create_updated_dirstate()
915 try:
916- entry = state._get_entry(0, path_utf8='a-file')
917+ entry = state._get_entry(0, path_utf8=b'a-file')
918 # The current size should be 0 (default)
919 self.assertEqual(0, entry[1][0][2])
920 # We should have a real entry.
921@@ -625,7 +625,7 @@
922 state = dirstate.DirState.on_file('dirstate')
923 state.lock_read()
924 try:
925- entry = state._get_entry(0, path_utf8='a-file')
926+ entry = state._get_entry(0, path_utf8=b'a-file')
927 self.assertEqual(st.st_size, entry[1][0][2])
928 finally:
929 state.unlock()
930@@ -634,7 +634,7 @@
931 """If dirstate is locked, save will fail without complaining."""
932 state = self.create_updated_dirstate()
933 try:
934- entry = state._get_entry(0, path_utf8='a-file')
935+ entry = state._get_entry(0, path_utf8=b'a-file')
936 # No cached sha1 yet.
937 self.assertEqual('', entry[1][0][1])
938 # Set the cutoff-time into the future, so things look cacheable
939@@ -671,7 +671,7 @@
940 state = dirstate.DirState.on_file('dirstate')
941 state.lock_read()
942 try:
943- entry = state._get_entry(0, path_utf8='a-file')
944+ entry = state._get_entry(0, path_utf8=b'a-file')
945 self.assertEqual('', entry[1][0][1])
946 finally:
947 state.unlock()
948@@ -681,17 +681,17 @@
949 state = dirstate.DirState.initialize('dirstate')
950 try:
951 # No stat and no sha1 sum.
952- state.add('a-file', b'a-file-id', 'file', None, '')
953+ state.add('a-file', b'a-file-id', 'file', None, b'')
954 state.save()
955 finally:
956 state.unlock()
957
958 # The dirstate should include TREE_ROOT and 'a-file' and nothing else
959 expected_blocks = [
960- ('', [(('', '', b'TREE_ROOT'),
961- [('d', '', 0, False, dirstate.DirState.NULLSTAT)])]),
962- ('', [(('', 'a-file', b'a-file-id'),
963- [('f', '', 0, False, dirstate.DirState.NULLSTAT)])]),
964+ (b'', [((b'', b'', b'TREE_ROOT'),
965+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT)])]),
966+ (b'', [((b'', b'a-file', b'a-file-id'),
967+ [(b'f', b'', 0, False, dirstate.DirState.NULLSTAT)])]),
968 ]
969
970 state = dirstate.DirState.on_file('dirstate')
971@@ -701,7 +701,7 @@
972 self.assertEqual(expected_blocks, state._dirblocks)
973
974 # Now modify the state, but mark it as inconsistent
975- state.add(b'a-dir', b'a-dir-id', 'directory', None, '')
976+ state.add('a-dir', b'a-dir-id', 'directory', None, b'')
977 state._changes_aborted = True
978 state.save()
979 finally:
980@@ -720,8 +720,8 @@
981
982 def test_initialize(self):
983 expected_result = ([], [
984- (('', '', 'TREE_ROOT'), # common details
985- [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
986+ ((b'', b'', b'TREE_ROOT'), # common details
987+ [(b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
988 ])
989 ])
990 state = dirstate.DirState.initialize('dirstate')
991@@ -752,15 +752,15 @@
992 state = self.create_dirstate_with_root_and_subdir()
993 self.addCleanup(state.unlock)
994 id_index = state._get_id_index()
995- self.assertEqual(['a-root-value', b'subdir-id'], sorted(id_index))
996+ self.assertEqual([b'a-root-value', b'subdir-id'], sorted(id_index))
997 state.add('file-name', b'file-id', 'file', None, '')
998- self.assertEqual(['a-root-value', b'file-id', b'subdir-id'],
999- sorted(id_index))
1000- state.update_minimal(('', 'new-name', b'file-id'), 'f',
1001- path_utf8='new-name')
1002- self.assertEqual(['a-root-value', b'file-id', b'subdir-id'],
1003- sorted(id_index))
1004- self.assertEqual([('', 'new-name', b'file-id')],
1005+ self.assertEqual([b'a-root-value', b'file-id', b'subdir-id'],
1006+ sorted(id_index))
1007+ state.update_minimal((b'', b'new-name', b'file-id'), b'f',
1008+ path_utf8=b'new-name')
1009+ self.assertEqual([b'a-root-value', b'file-id', b'subdir-id'],
1010+ sorted(id_index))
1011+ self.assertEqual([(b'', b'new-name', b'file-id')],
1012 sorted(id_index[b'file-id']))
1013 state._validate()
1014
1015@@ -770,8 +770,8 @@
1016 inv = tree1.root_inventory
1017 root_id = inv.path2id('')
1018 expected_result = [], [
1019- (('', '', root_id), [
1020- ('d', '', 0, False, dirstate.DirState.NULLSTAT)])]
1021+ ((b'', b'', root_id), [
1022+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT)])]
1023 state = dirstate.DirState.initialize('dirstate')
1024 try:
1025 state.set_state_from_inventory(inv)
1026@@ -791,8 +791,8 @@
1027 inv = tree1.root_inventory
1028 root_id = inv.path2id('')
1029 expected_result = [], [
1030- (('', '', root_id), [
1031- ('d', '', 0, False, dirstate.DirState.NULLSTAT)])]
1032+ ((b'', b'', root_id), [
1033+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT)])]
1034 state = dirstate.DirState.initialize('dirstate')
1035 try:
1036 state.set_state_from_scratch(inv, [], [])
1037@@ -812,10 +812,10 @@
1038 inv = tree1.root_inventory
1039 root_id = inv.path2id('')
1040 rev_tree1 = tree1.branch.repository.revision_tree(revid1)
1041- d_entry = ('d', '', 0, False, dirstate.DirState.NULLSTAT)
1042- parent_entry = ('d', '', 0, False, revid1)
1043+ d_entry = (b'd', b'', 0, False, dirstate.DirState.NULLSTAT)
1044+ parent_entry = (b'd', b'', 0, False, revid1)
1045 expected_result = [revid1], [
1046- (('', '', root_id), [d_entry, parent_entry])]
1047+ ((b'', b'', root_id), [d_entry, parent_entry])]
1048 state = dirstate.DirState.initialize('dirstate')
1049 try:
1050 state.set_state_from_scratch(inv, [(revid1, rev_tree1)], [])
1051@@ -837,8 +837,7 @@
1052
1053 tree = self.make_branch_and_tree('.')
1054 # depends on the default format using dirstate...
1055- tree.lock_write()
1056- try:
1057+ with tree.lock_write():
1058 # make a dirstate with some valid hashcache data
1059 # file on disk, but that's not needed for this test
1060 foo_contents = b'contents of foo'
1061@@ -852,19 +851,19 @@
1062
1063 # should not be cached yet, because the file's too fresh
1064 self.assertEqual(
1065- (('', 'foo', 'foo-id',),
1066- [('f', '', 0, False, dirstate.DirState.NULLSTAT)]),
1067- tree._dirstate._get_entry(0, 'foo-id'))
1068+ ((b'', b'foo', b'foo-id',),
1069+ [(b'f', b'', 0, False, dirstate.DirState.NULLSTAT)]),
1070+ tree._dirstate._get_entry(0, b'foo-id'))
1071 # poke in some hashcache information - it wouldn't normally be
1072 # stored because it's too fresh
1073 tree._dirstate.update_minimal(
1074- ('', 'foo', 'foo-id'),
1075- 'f', False, foo_sha, foo_packed, foo_size, 'foo')
1076+ (b'', b'foo', b'foo-id'),
1077+ b'f', False, foo_sha, foo_packed, foo_size, b'foo')
1078 # now should be cached
1079 self.assertEqual(
1080- (('', 'foo', 'foo-id',),
1081- [('f', foo_sha, foo_size, False, foo_packed)]),
1082- tree._dirstate._get_entry(0, 'foo-id'))
1083+ ((b'', b'foo', b'foo-id',),
1084+ [(b'f', foo_sha, foo_size, False, foo_packed)]),
1085+ tree._dirstate._get_entry(0, b'foo-id'))
1086
1087 # extract the inventory, and add something to it
1088 inv = tree._get_root_inventory()
1089@@ -876,22 +875,17 @@
1090 # this used to cause it to lose its hashcache
1091 tree._dirstate.set_state_from_inventory(inv)
1092 tree._dirstate._validate()
1093- finally:
1094- tree.unlock()
1095
1096- tree.lock_read()
1097- try:
1098+ with tree.lock_read():
1099 # now check that the state still has the original hashcache value
1100 state = tree._dirstate
1101 state._validate()
1102- foo_tuple = state._get_entry(0, path_utf8='foo')
1103+ foo_tuple = state._get_entry(0, path_utf8=b'foo')
1104 self.assertEqual(
1105- (('', 'foo', 'foo-id',),
1106+ (('', 'foo', b'foo-id',),
1107 [('f', foo_sha, len(foo_contents), False,
1108 dirstate.pack_stat(foo_stat))]),
1109 foo_tuple)
1110- finally:
1111- tree.unlock()
1112
1113 def test_set_state_from_inventory_mixed_paths(self):
1114 tree1 = self.make_branch_and_tree('tree1')
1115@@ -900,23 +894,23 @@
1116 tree1.lock_write()
1117 try:
1118 tree1.add(['a', 'a/b', 'a-b', 'a/b/foo', 'a-b/bar'],
1119- ['a-id', 'b-id', 'a-b-id', 'foo-id', 'bar-id'])
1120+ [b'a-id', b'b-id', b'a-b-id', b'foo-id', b'bar-id'])
1121 tree1.commit('rev1', rev_id=b'rev1')
1122 root_id = tree1.get_root_id()
1123 inv = tree1.root_inventory
1124 finally:
1125 tree1.unlock()
1126- expected_result1 = [('', '', root_id, 'd'),
1127- ('', 'a', 'a-id', 'd'),
1128- ('', 'a-b', 'a-b-id', 'd'),
1129- ('a', 'b', 'b-id', 'd'),
1130- ('a/b', 'foo', 'foo-id', 'f'),
1131- ('a-b', 'bar', 'bar-id', 'f'),
1132+ expected_result1 = [(b'', b'', root_id, b'd'),
1133+ (b'', b'a', b'a-id', b'd'),
1134+ (b'', b'a-b', b'a-b-id', b'd'),
1135+ (b'a', b'b', b'b-id', b'd'),
1136+ (b'a/b', b'foo', b'foo-id', b'f'),
1137+ (b'a-b', b'bar', b'bar-id', b'f'),
1138 ]
1139- expected_result2 = [('', '', root_id, 'd'),
1140- ('', 'a', 'a-id', 'd'),
1141- ('', 'a-b', 'a-b-id', 'd'),
1142- ('a-b', 'bar', 'bar-id', 'f'),
1143+ expected_result2 = [(b'', b'', root_id, b'd'),
1144+ (b'', b'a', b'a-id', b'd'),
1145+ (b'', b'a-b', b'a-b-id', b'd'),
1146+ (b'a-b', b'bar', b'bar-id', b'f'),
1147 ]
1148 state = dirstate.DirState.initialize('dirstate')
1149 try:
1150@@ -925,7 +919,7 @@
1151 for entry in state._iter_entries():
1152 values.append(entry[0] + entry[1][0][:1])
1153 self.assertEqual(expected_result1, values)
1154- inv.delete('b-id')
1155+ inv.delete(b'b-id')
1156 state.set_state_from_inventory(inv)
1157 values = []
1158 for entry in state._iter_entries():
1159@@ -939,23 +933,23 @@
1160 state = dirstate.DirState.initialize('dirstate')
1161 try:
1162 # check precondition to be sure the state does change appropriately.
1163- root_entry = (('', '', 'TREE_ROOT'), [('d', '', 0, False, 'x'*32)])
1164+ root_entry = ((b'', b'', b'TREE_ROOT'), [(b'd', b'', 0, False, b'x'*32)])
1165 self.assertEqual([root_entry], list(state._iter_entries()))
1166- self.assertEqual(root_entry, state._get_entry(0, path_utf8=''))
1167+ self.assertEqual(root_entry, state._get_entry(0, path_utf8=b''))
1168 self.assertEqual(root_entry,
1169- state._get_entry(0, fileid_utf8='TREE_ROOT'))
1170+ state._get_entry(0, fileid_utf8=b'TREE_ROOT'))
1171 self.assertEqual((None, None),
1172- state._get_entry(0, fileid_utf8='second-root-id'))
1173- state.set_path_id('', 'second-root-id')
1174- new_root_entry = (('', '', 'second-root-id'),
1175- [('d', '', 0, False, 'x'*32)])
1176+ state._get_entry(0, fileid_utf8=b'second-root-id'))
1177+ state.set_path_id('', b'second-root-id')
1178+ new_root_entry = ((b'', b'', b'second-root-id'),
1179+ [(b'd', b'', 0, False, b'x'*32)])
1180 expected_rows = [new_root_entry]
1181 self.assertEqual(expected_rows, list(state._iter_entries()))
1182- self.assertEqual(new_root_entry, state._get_entry(0, path_utf8=''))
1183- self.assertEqual(new_root_entry,
1184- state._get_entry(0, fileid_utf8='second-root-id'))
1185+ self.assertEqual(new_root_entry, state._get_entry(0, path_utf8=b''))
1186+ self.assertEqual(new_root_entry,
1187+ state._get_entry(0, fileid_utf8=b'second-root-id'))
1188 self.assertEqual((None, None),
1189- state._get_entry(0, fileid_utf8='TREE_ROOT'))
1190+ state._get_entry(0, fileid_utf8=b'TREE_ROOT'))
1191 # should work across save too
1192 state.save()
1193 finally:
1194@@ -978,37 +972,37 @@
1195 state = dirstate.DirState.initialize('dirstate')
1196 state._validate()
1197 try:
1198- state.set_parent_trees([('parent-revid', rt)], ghosts=[])
1199- root_entry = (('', '', 'TREE_ROOT'),
1200- [('d', '', 0, False, 'x'*32),
1201- ('d', '', 0, False, 'parent-revid')])
1202- self.assertEqual(root_entry, state._get_entry(0, path_utf8=''))
1203+ state.set_parent_trees([(b'parent-revid', rt)], ghosts=[])
1204+ root_entry = ((b'', b'', b'TREE_ROOT'),
1205+ [(b'd', b'', 0, False, b'x'*32),
1206+ (b'd', b'', 0, False, b'parent-revid')])
1207+ self.assertEqual(root_entry, state._get_entry(0, path_utf8=b''))
1208 self.assertEqual(root_entry,
1209- state._get_entry(0, fileid_utf8='TREE_ROOT'))
1210+ state._get_entry(0, fileid_utf8=b'TREE_ROOT'))
1211 self.assertEqual((None, None),
1212- state._get_entry(0, fileid_utf8='Asecond-root-id'))
1213- state.set_path_id('', 'Asecond-root-id')
1214+ state._get_entry(0, fileid_utf8=b'Asecond-root-id'))
1215+ state.set_path_id(b'', b'Asecond-root-id')
1216 state._validate()
1217 # now see that it is what we expected
1218- old_root_entry = (('', '', 'TREE_ROOT'),
1219- [('a', '', 0, False, ''),
1220- ('d', '', 0, False, 'parent-revid')])
1221- new_root_entry = (('', '', 'Asecond-root-id'),
1222- [('d', '', 0, False, ''),
1223- ('a', '', 0, False, '')])
1224+ old_root_entry = ((b'', b'', b'TREE_ROOT'),
1225+ [(b'a', b'', 0, False, b''),
1226+ (b'd', b'', 0, False, b'parent-revid')])
1227+ new_root_entry = ((b'', b'', b'Asecond-root-id'),
1228+ [(b'd', b'', 0, False, b''),
1229+ (b'a', b'', 0, False, b'')])
1230 expected_rows = [new_root_entry, old_root_entry]
1231 state._validate()
1232 self.assertEqual(expected_rows, list(state._iter_entries()))
1233- self.assertEqual(new_root_entry, state._get_entry(0, path_utf8=''))
1234- self.assertEqual(old_root_entry, state._get_entry(1, path_utf8=''))
1235+ self.assertEqual(new_root_entry, state._get_entry(0, path_utf8=b''))
1236+ self.assertEqual(old_root_entry, state._get_entry(1, path_utf8=b''))
1237 self.assertEqual((None, None),
1238- state._get_entry(0, fileid_utf8='TREE_ROOT'))
1239+ state._get_entry(0, fileid_utf8=b'TREE_ROOT'))
1240 self.assertEqual(old_root_entry,
1241- state._get_entry(1, fileid_utf8='TREE_ROOT'))
1242+ state._get_entry(1, fileid_utf8=b'TREE_ROOT'))
1243 self.assertEqual(new_root_entry,
1244- state._get_entry(0, fileid_utf8='Asecond-root-id'))
1245+ state._get_entry(0, fileid_utf8=b'Asecond-root-id'))
1246 self.assertEqual((None, None),
1247- state._get_entry(1, fileid_utf8='Asecond-root-id'))
1248+ state._get_entry(1, fileid_utf8=b'Asecond-root-id'))
1249 # should work across save too
1250 state.save()
1251 finally:
1252@@ -1025,7 +1019,7 @@
1253 state.lock_write()
1254 try:
1255 state._validate()
1256- state.set_path_id('', 'tree-root-2')
1257+ state.set_path_id(b'', b'tree-root-2')
1258 state._validate()
1259 finally:
1260 state.unlock()
1261@@ -1049,12 +1043,12 @@
1262 tree2.unlock()
1263 state = dirstate.DirState.initialize('dirstate')
1264 try:
1265- state.set_path_id('', root_id)
1266+ state.set_path_id(b'', root_id)
1267 state.set_parent_trees(
1268 ((revid1, tree1.branch.repository.revision_tree(revid1)),
1269 (revid2, tree2.branch.repository.revision_tree(revid2)),
1270- ('ghost-rev', None)),
1271- ['ghost-rev'])
1272+ (b'ghost-rev', None)),
1273+ [b'ghost-rev'])
1274 # check we can reopen and use the dirstate after setting parent
1275 # trees.
1276 state._validate()
1277@@ -1065,31 +1059,31 @@
1278 state = dirstate.DirState.on_file('dirstate')
1279 state.lock_write()
1280 try:
1281- self.assertEqual([revid1, revid2, 'ghost-rev'],
1282+ self.assertEqual([revid1, revid2, b'ghost-rev'],
1283 state.get_parent_ids())
1284 # iterating the entire state ensures that the state is parsable.
1285 list(state._iter_entries())
1286 # be sure that it sets not appends - change it
1287 state.set_parent_trees(
1288 ((revid1, tree1.branch.repository.revision_tree(revid1)),
1289- ('ghost-rev', None)),
1290- ['ghost-rev'])
1291+ (b'ghost-rev', None)),
1292+ [b'ghost-rev'])
1293 # and now put it back.
1294 state.set_parent_trees(
1295 ((revid1, tree1.branch.repository.revision_tree(revid1)),
1296 (revid2, tree2.branch.repository.revision_tree(revid2)),
1297- ('ghost-rev', tree2.branch.repository.revision_tree(
1298+ (b'ghost-rev', tree2.branch.repository.revision_tree(
1299 _mod_revision.NULL_REVISION))),
1300- ['ghost-rev'])
1301- self.assertEqual([revid1, revid2, 'ghost-rev'],
1302+ [b'ghost-rev'])
1303+ self.assertEqual([revid1, revid2, b'ghost-rev'],
1304 state.get_parent_ids())
1305 # the ghost should be recorded as such by set_parent_trees.
1306- self.assertEqual(['ghost-rev'], state.get_ghosts())
1307+ self.assertEqual([b'ghost-rev'], state.get_ghosts())
1308 self.assertEqual(
1309- [(('', '', root_id), [
1310- ('d', '', 0, False, dirstate.DirState.NULLSTAT),
1311- ('d', '', 0, False, revid1),
1312- ('d', '', 0, False, revid1)
1313+ [((b'', b'', root_id), [
1314+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT),
1315+ (b'd', b'', 0, False, revid1),
1316+ (b'd', b'', 0, False, revid1)
1317 ])],
1318 list(state._iter_entries()))
1319 finally:
1320@@ -1120,22 +1114,22 @@
1321 tree2.unlock()
1322 # check the layout in memory
1323 expected_result = [revid1.encode('utf8'), revid2.encode('utf8')], [
1324- (('', '', root_id), [
1325- ('d', '', 0, False, dirstate.DirState.NULLSTAT),
1326- ('d', '', 0, False, revid1.encode('utf8')),
1327- ('d', '', 0, False, revid1.encode('utf8'))
1328+ ((b'', b'', root_id), [
1329+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT),
1330+ (b'd', b'', 0, False, revid1.encode('utf8')),
1331+ (b'd', b'', 0, False, revid1.encode('utf8'))
1332 ]),
1333- (('', 'a file', b'file-id'), [
1334- ('a', '', 0, False, ''),
1335- ('f', '2439573625385400f2a669657a7db6ae7515d371', 12, False,
1336+ ((b'', 'a file', b'file-id'), [
1337+ (b'a', b'', 0, False, ''),
1338+ (b'f', b'2439573625385400f2a669657a7db6ae7515d371', 12, False,
1339 revid1.encode('utf8')),
1340- ('f', '542e57dc1cda4af37cb8e55ec07ce60364bb3c7d', 16, False,
1341+ (b'f', b'542e57dc1cda4af37cb8e55ec07ce60364bb3c7d', 16, False,
1342 revid2.encode('utf8'))
1343 ])
1344 ]
1345 state = dirstate.DirState.initialize('dirstate')
1346 try:
1347- state.set_path_id('', root_id)
1348+ state.set_path_id(b'', root_id)
1349 state.set_parent_trees(
1350 ((revid1, tree1.branch.repository.revision_tree(revid1)),
1351 (revid2, tree2.branch.repository.revision_tree(revid2)),
1352@@ -1158,15 +1152,15 @@
1353 # the 1*20 is the sha1 pretend value.
1354 state = dirstate.DirState.initialize('dirstate')
1355 expected_entries = [
1356- (('', '', b'TREE_ROOT'), [
1357- ('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1358+ ((b'', b'', b'TREE_ROOT'), [
1359+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
1360 ]),
1361- (('', 'a file', b'a-file-id'), [
1362- ('f', '1'*20, 19, False, dirstate.pack_stat(stat)), # current tree
1363+ ((b'', b'a file', b'a-file-id'), [
1364+ (b'f', b'1'*20, 19, False, dirstate.pack_stat(stat)), # current tree
1365 ]),
1366 ]
1367 try:
1368- state.add('a file', b'a-file-id', 'file', stat, '1'*20)
1369+ state.add('a file', b'a-file-id', 'file', stat, b'1'*20)
1370 # having added it, it should be in the output of iter_entries.
1371 self.assertEqual(expected_entries, list(state._iter_entries()))
1372 # saving and reloading should not affect this.
1373@@ -1189,7 +1183,7 @@
1374 state = dirstate.DirState.initialize('dirstate')
1375 self.addCleanup(state.unlock)
1376 self.assertRaises(errors.NotVersionedError, state.add,
1377- 'unversioned/a file', 'a-file-id', 'file', None, None)
1378+ 'unversioned/a file', b'a-file-id', 'file', None, None)
1379
1380 def test_add_directory_to_root_no_parents_all_data(self):
1381 # The most trivial addition of a dir is when there are no parents and
1382@@ -1197,16 +1191,16 @@
1383 self.build_tree(['a dir/'])
1384 stat = os.lstat('a dir')
1385 expected_entries = [
1386- (('', '', 'TREE_ROOT'), [
1387- ('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1388+ ((b'', b'', b'TREE_ROOT'), [
1389+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
1390 ]),
1391- (('', 'a dir', 'a dir id'), [
1392- ('d', '', 0, False, dirstate.pack_stat(stat)), # current tree
1393+ ((b'', b'a dir', b'a dir id'), [
1394+ (b'd', b'', 0, False, dirstate.pack_stat(stat)), # current tree
1395 ]),
1396 ]
1397 state = dirstate.DirState.initialize('dirstate')
1398 try:
1399- state.add('a dir', 'a dir id', 'directory', stat, None)
1400+ state.add('a dir', b'a dir id', 'directory', stat, None)
1401 # having added it, it should be in the output of iter_entries.
1402 self.assertEqual(expected_entries, list(state._iter_entries()))
1403 # saving and reloading should not affect this.
1404@@ -1227,17 +1221,17 @@
1405 os.symlink(target, link_name)
1406 stat = os.lstat(link_name)
1407 expected_entries = [
1408- (('', '', 'TREE_ROOT'), [
1409- ('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1410+ ((b'', b'', b'TREE_ROOT'), [
1411+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
1412 ]),
1413- (('', link_name.encode('UTF-8'), 'a link id'), [
1414- ('l', target.encode('UTF-8'), stat[6],
1415+ ((b'', link_name.encode('UTF-8'), b'a link id'), [
1416+ (b'l', target.encode('UTF-8'), stat[6],
1417 False, dirstate.pack_stat(stat)), # current tree
1418 ]),
1419 ]
1420 state = dirstate.DirState.initialize('dirstate')
1421 try:
1422- state.add(link_name, 'a link id', 'symlink', stat,
1423+ state.add(link_name, b'a link id', 'symlink', stat,
1424 target.encode('UTF-8'))
1425 # having added it, it should be in the output of iter_entries.
1426 self.assertEqual(expected_entries, list(state._iter_entries()))
1427@@ -1264,21 +1258,21 @@
1428 dirstat = os.lstat('a dir')
1429 filestat = os.lstat('a dir/a file')
1430 expected_entries = [
1431- (('', '', 'TREE_ROOT'), [
1432- ('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1433- ]),
1434- (('', 'a dir', 'a dir id'), [
1435- ('d', '', 0, False, dirstate.pack_stat(dirstat)), # current tree
1436- ]),
1437- (('a dir', 'a file', 'a-file-id'), [
1438- ('f', '1'*20, 25, False,
1439+ ((b'', b'', b'TREE_ROOT'), [
1440+ (b'd', b'', 0, False, dirstate.DirState.NULLSTAT), # current tree
1441+ ]),
1442+ ((b'', b'a dir', b'a dir id'), [
1443+ (b'd', b'', 0, False, dirstate.pack_stat(dirstat)), # current tree
1444+ ]),
1445+ ((b'a dir', b'a file', b'a-file-id'), [
1446+ (b'f', b'1'*20, 25, False,
1447 dirstate.pack_stat(filestat)), # current tree details
1448 ]),
1449 ]
1450 state = dirstate.DirState.initialize('dirstate')
1451 try:
1452 state.add('a dir', b'a dir id', 'directory', dirstat, None)
1453- state.add('a dir/a file', b'a-file-id', 'file', filestat, '1'*20)
1454+ state.add('a dir/a file', b'a-file-id', 'file', filestat, b'1'*20)
1455 # added it, it should be in the output of iter_entries.
1456 self.assertEqual(expected_entries, list(state._iter_entries()))
1457 # saving and reloading should not affect this.
1458@@ -1294,13 +1288,13 @@
1459 # make a dirstate and add a tree reference
1460 state = dirstate.DirState.initialize('dirstate')
1461 expected_entry = (
1462- ('', 'subdir', b'subdir-id'),
1463- [('t', 'subtree-123123', 0, False,
1464- 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')],
1465+ (b'', b'subdir', b'subdir-id'),
1466+ [(b't', b'subtree-123123', 0, False,
1467+ b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')],
1468 )
1469 try:
1470- state.add('subdir', b'subdir-id', 'tree-reference', None, 'subtree-123123')
1471- entry = state._get_entry(0, b'subdir-id', 'subdir')
1472+ state.add('subdir', b'subdir-id', 'tree-reference', None, b'subtree-123123')
1473+ entry = state._get_entry(0, b'subdir-id', b'subdir')
1474 self.assertEqual(entry, expected_entry)
1475 state._validate()
1476 state.save()
1477@@ -1310,7 +1304,7 @@
1478 state.lock_read()
1479 self.addCleanup(state.unlock)
1480 state._validate()
1481- entry2 = state._get_entry(0, b'subdir-id', 'subdir')
1482+ entry2 = state._get_entry(0, b'subdir-id', b'subdir')
1483 self.assertEqual(entry, entry2)
1484 self.assertEqual(entry, expected_entry)
1485 # and lookup by id should work too
1486@@ -1321,9 +1315,9 @@
1487 state = dirstate.DirState.initialize('dirstate')
1488 self.addCleanup(state.unlock)
1489 self.assertRaises(errors.BzrError,
1490- state.add, '.', 'ass-id', 'directory', None, None)
1491+ state.add, '.', b'ass-id', 'directory', None, None)
1492 self.assertRaises(errors.BzrError,
1493- state.add, '..', 'ass-id', 'directory', None, None)
1494+ state.add, '..', b'ass-id', 'directory', None, None)
1495
1496 def test_set_state_with_rename_b_a_bug_395556(self):
1497 # bug 395556 uncovered a bug where the dirstate ends up with a false
1498@@ -1342,11 +1336,11 @@
1499 try:
1500 # Set the initial state with 'b'
1501 state.set_state_from_inventory(inv)
1502- inv.rename('b-id', root_id, 'a')
1503+ inv.rename(b'b-id', root_id, 'a')
1504 # Set the new state with 'a', which currently corrupts.
1505 state.set_state_from_inventory(inv)
1506- expected_result1 = [('', '', root_id, 'd'),
1507- ('', 'a', 'b-id', 'f'),
1508+ expected_result1 = [(b'', b'', root_id, b'd'),
1509+ (b'', b'a', b'b-id', b'f'),
1510 ]
1511 values = []
1512 for entry in state._iter_entries():
1513@@ -1419,15 +1413,15 @@
1514 def test_get_line_with_2_rows(self):
1515 state = self.create_dirstate_with_root_and_subdir()
1516 try:
1517- self.assertEqual(['#bazaar dirstate flat format 3\n',
1518- 'crc32: 41262208\n',
1519- 'num_entries: 2\n',
1520- '0\x00\n\x00'
1521- '0\x00\n\x00'
1522- '\x00\x00a-root-value\x00'
1523- 'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00\n\x00'
1524- '\x00subdir\x00subdir-id\x00'
1525- 'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00\n\x00'
1526+ self.assertEqual([b'#bazaar dirstate flat format 3\n',
1527+ b'crc32: 41262208\n',
1528+ b'num_entries: 2\n',
1529+ b'0\x00\n\x00'
1530+ b'0\x00\n\x00'
1531+ b'\x00\x00a-root-value\x00'
1532+ b'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00\n\x00'
1533+ b'\x00subdir\x00subdir-id\x00'
1534+ b'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00\n\x00'
1535 ], state.get_lines())
1536 finally:
1537 state.unlock()
1538@@ -1436,45 +1430,45 @@
1539 state = self.create_dirstate_with_root()
1540 try:
1541 self.assertEqual(
1542- '\x00\x00a-root-value\x00d\x00\x000\x00n'
1543- '\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk',
1544+ b'\x00\x00a-root-value\x00d\x00\x000\x00n'
1545+ b'\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk',
1546 state._entry_to_line(state._dirblocks[0][1][0]))
1547 finally:
1548 state.unlock()
1549
1550 def test_entry_to_line_with_parent(self):
1551- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1552- root_entry = ('', '', 'a-root-value'), [
1553- ('d', '', 0, False, packed_stat), # current tree details
1554+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1555+ root_entry = (b'', b'', b'a-root-value'), [
1556+ (b'd', b'', 0, False, packed_stat), # current tree details
1557 # first: a pointer to the current location
1558- ('a', 'dirname/basename', 0, False, ''),
1559+ (b'a', b'dirname/basename', 0, False, b''),
1560 ]
1561 state = dirstate.DirState.initialize('dirstate')
1562 try:
1563 self.assertEqual(
1564- '\x00\x00a-root-value\x00'
1565- 'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00'
1566- 'a\x00dirname/basename\x000\x00n\x00',
1567+ b'\x00\x00a-root-value\x00'
1568+ b'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00'
1569+ b'a\x00dirname/basename\x000\x00n\x00',
1570 state._entry_to_line(root_entry))
1571 finally:
1572 state.unlock()
1573
1574 def test_entry_to_line_with_two_parents_at_different_paths(self):
1575 # / in the tree, at / in one parent and /dirname/basename in the other.
1576- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1577- root_entry = ('', '', 'a-root-value'), [
1578+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1579+ root_entry = ('', '', b'a-root-value'), [
1580 ('d', '', 0, False, packed_stat), # current tree details
1581- ('d', '', 0, False, 'rev_id'), # first parent details
1582+ ('d', '', 0, False, b'rev_id'), # first parent details
1583 # second: a pointer to the current location
1584 ('a', 'dirname/basename', 0, False, ''),
1585 ]
1586 state = dirstate.DirState.initialize('dirstate')
1587 try:
1588 self.assertEqual(
1589- '\x00\x00a-root-value\x00'
1590- 'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00'
1591- 'd\x00\x000\x00n\x00rev_id\x00'
1592- 'a\x00dirname/basename\x000\x00n\x00',
1593+ b'\x00\x00a-root-value\x00'
1594+ b'd\x00\x000\x00n\x00AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk\x00'
1595+ b'd\x00\x000\x00n\x00rev_id\x00'
1596+ b'a\x00dirname/basename\x000\x00n\x00',
1597 state._entry_to_line(root_entry))
1598 finally:
1599 state.unlock()
1600@@ -1482,22 +1476,22 @@
1601 def test_iter_entries(self):
1602 # we should be able to iterate the dirstate entries from end to end
1603 # this is for get_lines to be easy to read.
1604- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1605+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1606 dirblocks = []
1607- root_entries = [(('', '', 'a-root-value'), [
1608+ root_entries = [(('', '', b'a-root-value'), [
1609 ('d', '', 0, False, packed_stat), # current tree details
1610 ])]
1611 dirblocks.append(('', root_entries))
1612 # add two files in the root
1613- subdir_entry = ('', 'subdir', 'subdir-id'), [
1614+ subdir_entry = ('', 'subdir', b'subdir-id'), [
1615 ('d', '', 0, False, packed_stat), # current tree details
1616 ]
1617- afile_entry = ('', 'afile', 'afile-id'), [
1618+ afile_entry = ('', 'afile', b'afile-id'), [
1619 ('f', 'sha1value', 34, False, packed_stat), # current tree details
1620 ]
1621 dirblocks.append(('', [subdir_entry, afile_entry]))
1622 # and one in subdir
1623- file_entry2 = ('subdir', '2file', '2file-id'), [
1624+ file_entry2 = ('subdir', '2file', b'2file-id'), [
1625 ('f', 'sha1value', 23, False, packed_stat), # current tree details
1626 ]
1627 dirblocks.append(('subdir', [file_entry2]))
1628@@ -1583,33 +1577,33 @@
1629 def test_simple_structure(self):
1630 state = self.create_dirstate_with_root_and_subdir()
1631 self.addCleanup(state.unlock)
1632- self.assertEntryEqual('', '', 'a-root-value', state, '', 0)
1633- self.assertEntryEqual('', 'subdir', 'subdir-id', state, 'subdir', 0)
1634- self.assertEntryEqual(None, None, None, state, 'missing', 0)
1635- self.assertEntryEqual(None, None, None, state, 'missing/foo', 0)
1636- self.assertEntryEqual(None, None, None, state, 'subdir/foo', 0)
1637+ self.assertEntryEqual(b'', b'', b'a-root-value', state, b'', 0)
1638+ self.assertEntryEqual(b'', b'subdir', b'subdir-id', state, b'subdir', 0)
1639+ self.assertEntryEqual(None, None, None, state, b'missing', 0)
1640+ self.assertEntryEqual(None, None, None, state, b'missing/foo', 0)
1641+ self.assertEntryEqual(None, None, None, state, b'subdir/foo', 0)
1642
1643 def test_complex_structure_exists(self):
1644 state = self.create_complex_dirstate()
1645 self.addCleanup(state.unlock)
1646- self.assertEntryEqual('', '', 'a-root-value', state, '', 0)
1647- self.assertEntryEqual('', 'a', 'a-dir', state, 'a', 0)
1648- self.assertEntryEqual('', 'b', 'b-dir', state, 'b', 0)
1649- self.assertEntryEqual('', 'c', 'c-file', state, 'c', 0)
1650- self.assertEntryEqual('', 'd', 'd-file', state, 'd', 0)
1651- self.assertEntryEqual('a', 'e', 'e-dir', state, 'a/e', 0)
1652- self.assertEntryEqual('a', 'f', 'f-file', state, 'a/f', 0)
1653- self.assertEntryEqual('b', 'g', 'g-file', state, 'b/g', 0)
1654- self.assertEntryEqual('b', 'h\xc3\xa5', 'h-\xc3\xa5-file', state,
1655- 'b/h\xc3\xa5', 0)
1656+ self.assertEntryEqual(b'', b'', b'a-root-value', state, b'', 0)
1657+ self.assertEntryEqual(b'', b'a', b'a-dir', state, b'a', 0)
1658+ self.assertEntryEqual(b'', b'b', b'b-dir', state, b'b', 0)
1659+ self.assertEntryEqual(b'', b'c', b'c-file', state, b'c', 0)
1660+ self.assertEntryEqual(b'', b'd', b'd-file', state, b'd', 0)
1661+ self.assertEntryEqual(b'a', b'e', b'e-dir', state, b'a/e', 0)
1662+ self.assertEntryEqual(b'a', b'f', b'f-file', state, b'a/f', 0)
1663+ self.assertEntryEqual(b'b', b'g', b'g-file', state, b'b/g', 0)
1664+ self.assertEntryEqual(b'b', b'h\xc3\xa5', b'h-\xc3\xa5-file', state,
1665+ b'b/h\xc3\xa5', 0)
1666
1667 def test_complex_structure_missing(self):
1668 state = self.create_complex_dirstate()
1669 self.addCleanup(state.unlock)
1670- self.assertEntryEqual(None, None, None, state, '_', 0)
1671- self.assertEntryEqual(None, None, None, state, '_\xc3\xa5', 0)
1672- self.assertEntryEqual(None, None, None, state, 'a/b', 0)
1673- self.assertEntryEqual(None, None, None, state, 'c/d', 0)
1674+ self.assertEntryEqual(None, None, None, state, b'_', 0)
1675+ self.assertEntryEqual(None, None, None, state, b'_\xc3\xa5', 0)
1676+ self.assertEntryEqual(None, None, None, state, b'a/b', 0)
1677+ self.assertEntryEqual(None, None, None, state, b'c/d', 0)
1678
1679 def test_get_entry_uninitialized(self):
1680 """Calling get_entry will load data if it needs to"""
1681@@ -1626,7 +1620,7 @@
1682 state._header_state)
1683 self.assertEqual(dirstate.DirState.NOT_IN_MEMORY,
1684 state._dirblock_state)
1685- self.assertEntryEqual('', '', 'a-root-value', state, '', 0)
1686+ self.assertEntryEqual(b'', b'', b'a-root-value', state, b'', 0)
1687 finally:
1688 state.unlock()
1689
1690@@ -1656,66 +1650,66 @@
1691
1692 :return: The dirstate, still write-locked.
1693 """
1694- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1695- null_sha = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
1696+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
1697+ null_sha = b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
1698 NULL_PARENT_DETAILS = dirstate.DirState.NULL_PARENT_DETAILS
1699- root_entry = ('', '', 'a-root-value'), [
1700- ('d', '', 0, False, packed_stat),
1701- ('d', '', 0, False, 'parent-revid'),
1702- ]
1703- a_entry = ('', 'a', 'a-dir'), [
1704- ('d', '', 0, False, packed_stat),
1705- ('d', '', 0, False, 'parent-revid'),
1706- ]
1707- b_entry = ('', 'b', 'b-dir'), [
1708- ('d', '', 0, False, packed_stat),
1709- ('d', '', 0, False, 'parent-revid'),
1710- ]
1711- c_entry = ('', 'c', 'c-file'), [
1712- ('f', null_sha, 10, False, packed_stat),
1713- ('r', 'b/j', 0, False, ''),
1714- ]
1715- d_entry = ('', 'd', 'd-file'), [
1716- ('f', null_sha, 20, False, packed_stat),
1717- ('f', 'd', 20, False, 'parent-revid'),
1718- ]
1719- e_entry = ('a', 'e', 'e-dir'), [
1720- ('d', '', 0, False, packed_stat),
1721- ('d', '', 0, False, 'parent-revid'),
1722- ]
1723- f_entry = ('a', 'f', 'f-file'), [
1724- ('f', null_sha, 30, False, packed_stat),
1725- ('f', 'f', 20, False, 'parent-revid'),
1726- ]
1727- g_entry = ('b', 'g', 'g-file'), [
1728- ('f', null_sha, 30, False, packed_stat),
1729- NULL_PARENT_DETAILS,
1730- ]
1731- h_entry1 = ('b', 'h\xc3\xa5', 'h-\xc3\xa5-file1'), [
1732- ('f', null_sha, 40, False, packed_stat),
1733- NULL_PARENT_DETAILS,
1734- ]
1735- h_entry2 = ('b', 'h\xc3\xa5', 'h-\xc3\xa5-file2'), [
1736- NULL_PARENT_DETAILS,
1737- ('f', 'h', 20, False, 'parent-revid'),
1738- ]
1739- i_entry = ('b', 'i', 'i-file'), [
1740- NULL_PARENT_DETAILS,
1741- ('f', 'h', 20, False, 'parent-revid'),
1742- ]
1743- j_entry = ('b', 'j', 'c-file'), [
1744- ('r', 'c', 0, False, ''),
1745- ('f', 'j', 20, False, 'parent-revid'),
1746+ root_entry = (b'', b'', b'a-root-value'), [
1747+ (b'd', b'', 0, False, packed_stat),
1748+ (b'd', b'', 0, False, b'parent-revid'),
1749+ ]
1750+ a_entry = (b'', b'a', b'a-dir'), [
1751+ (b'd', b'', 0, False, packed_stat),
1752+ (b'd', b'', 0, False, b'parent-revid'),
1753+ ]
1754+ b_entry = (b'', b'b', b'b-dir'), [
1755+ (b'd', b'', 0, False, packed_stat),
1756+ (b'd', b'', 0, False, b'parent-revid'),
1757+ ]
1758+ c_entry = (b'', b'c', b'c-file'), [
1759+ (b'f', null_sha, 10, False, packed_stat),
1760+ (b'r', b'b/j', 0, False, b''),
1761+ ]
1762+ d_entry = (b'', b'd', b'd-file'), [
1763+ (b'f', null_sha, 20, False, packed_stat),
1764+ (b'f', b'd', 20, False, b'parent-revid'),
1765+ ]
1766+ e_entry = (b'a', b'e', b'e-dir'), [
1767+ (b'd', b'', 0, False, packed_stat),
1768+ (b'd', b'', 0, False, b'parent-revid'),
1769+ ]
1770+ f_entry = (b'a', b'f', b'f-file'), [
1771+ (b'f', null_sha, 30, False, packed_stat),
1772+ (b'f', b'f', 20, False, b'parent-revid'),
1773+ ]
1774+ g_entry = (b'b', b'g', b'g-file'), [
1775+ (b'f', null_sha, 30, False, packed_stat),
1776+ NULL_PARENT_DETAILS,
1777+ ]
1778+ h_entry1 = (b'b', b'h\xc3\xa5', b'h-\xc3\xa5-file1'), [
1779+ (b'f', null_sha, 40, False, packed_stat),
1780+ NULL_PARENT_DETAILS,
1781+ ]
1782+ h_entry2 = (b'b', b'h\xc3\xa5', b'h-\xc3\xa5-file2'), [
1783+ NULL_PARENT_DETAILS,
1784+ (b'f', b'h', 20, False, b'parent-revid'),
1785+ ]
1786+ i_entry = (b'b', b'i', b'i-file'), [
1787+ NULL_PARENT_DETAILS,
1788+ (b'f', b'h', 20, False, b'parent-revid'),
1789+ ]
1790+ j_entry = (b'b', b'j', b'c-file'), [
1791+ (b'r', b'c', 0, False, b''),
1792+ (b'f', b'j', 20, False, b'parent-revid'),
1793 ]
1794 dirblocks = []
1795- dirblocks.append(('', [root_entry]))
1796- dirblocks.append(('', [a_entry, b_entry, c_entry, d_entry]))
1797- dirblocks.append(('a', [e_entry, f_entry]))
1798- dirblocks.append(('b', [g_entry, h_entry1, h_entry2, i_entry, j_entry]))
1799+ dirblocks.append((b'', [root_entry]))
1800+ dirblocks.append((b'', [a_entry, b_entry, c_entry, d_entry]))
1801+ dirblocks.append((b'a', [e_entry, f_entry]))
1802+ dirblocks.append((b'b', [g_entry, h_entry1, h_entry2, i_entry, j_entry]))
1803 state = dirstate.DirState.initialize('dirstate')
1804 state._validate()
1805 try:
1806- state._set_data(['parent'], dirblocks)
1807+ state._set_data([b'parent'], dirblocks)
1808 except:
1809 state.unlock()
1810 raise
1811@@ -1760,21 +1754,21 @@
1812 dirs = ['a', 'a/a', 'a/a/a', 'a/a/a/a',
1813 'a-a', 'a/a-a', 'a/a/a-a', 'a/a/a/a-a',
1814 ]
1815- null_sha = ''
1816+ null_sha = b''
1817 state = dirstate.DirState.initialize('dirstate')
1818 self.addCleanup(state.unlock)
1819
1820 fake_stat = os.stat('dirstate')
1821 for d in dirs:
1822- d_id = d.replace('/', '_')+'-id'
1823+ d_id = d.encode('utf-8').replace(b'/', b'_')+b'-id'
1824 file_path = d + '/f'
1825- file_id = file_path.replace('/', '_')+'-id'
1826+ file_id = file_path.encode('utf-8').replace(b'/', b'_')+b'-id'
1827 state.add(d, d_id, 'directory', fake_stat, null_sha)
1828 state.add(file_path, file_id, 'file', fake_stat, null_sha)
1829
1830- expected = ['', '', 'a',
1831- 'a/a', 'a/a/a', 'a/a/a/a',
1832- 'a/a/a/a-a', 'a/a/a-a', 'a/a-a', 'a-a',
1833+ expected = [b'', b'', b'a',
1834+ b'a/a', b'a/a/a', b'a/a/a/a',
1835+ b'a/a/a/a-a', b'a/a/a-a', b'a/a-a', b'a-a',
1836 ]
1837 split = lambda p:p.split('/')
1838 self.assertEqual(sorted(expected, key=split), expected)
1839@@ -1784,19 +1778,19 @@
1840 def test_set_parent_trees_correct_order(self):
1841 """After calling set_parent_trees() we should maintain the order."""
1842 dirs = ['a', 'a-a', 'a/a']
1843- null_sha = ''
1844+ null_sha = b''
1845 state = dirstate.DirState.initialize('dirstate')
1846 self.addCleanup(state.unlock)
1847
1848 fake_stat = os.stat('dirstate')
1849 for d in dirs:
1850- d_id = d.replace('/', '_')+'-id'
1851+ d_id = d.encode('utf-8').replace(b'/', b'_')+b'-id'
1852 file_path = d + '/f'
1853- file_id = file_path.replace('/', '_')+'-id'
1854+ file_id = file_path.encode('utf-8').replace(b'/', b'_')+b'-id'
1855 state.add(d, d_id, 'directory', fake_stat, null_sha)
1856 state.add(file_path, file_id, 'file', fake_stat, null_sha)
1857
1858- expected = ['', '', 'a', 'a/a', 'a-a']
1859+ expected = [b'', b'', b'a', b'a/a', b'a-a']
1860 dirblock_names = [d[0] for d in state._dirblocks]
1861 self.assertEqual(expected, dirblock_names)
1862
1863@@ -1879,25 +1873,25 @@
1864 def test_pack_stat_int(self):
1865 st = _FakeStat(6859, 1172758614, 1172758617, 777, 6499538, 0o100644)
1866 # Make sure that all parameters have an impact on the packed stat.
1867- self.assertPackStat('AAAay0Xm4FZF5uBZAAADCQBjLNIAAIGk', st)
1868+ self.assertPackStat(b'AAAay0Xm4FZF5uBZAAADCQBjLNIAAIGk', st)
1869 st.st_size = 7000
1870 # ay0 => bWE
1871- self.assertPackStat('AAAbWEXm4FZF5uBZAAADCQBjLNIAAIGk', st)
1872+ self.assertPackStat(b'AAAbWEXm4FZF5uBZAAADCQBjLNIAAIGk', st)
1873 st.st_mtime = 1172758620
1874 # 4FZ => 4Fx
1875- self.assertPackStat('AAAbWEXm4FxF5uBZAAADCQBjLNIAAIGk', st)
1876+ self.assertPackStat(b'AAAbWEXm4FxF5uBZAAADCQBjLNIAAIGk', st)
1877 st.st_ctime = 1172758630
1878 # uBZ => uBm
1879- self.assertPackStat('AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1880+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1881 st.st_dev = 888
1882 # DCQ => DeA
1883- self.assertPackStat('AAAbWEXm4FxF5uBmAAADeABjLNIAAIGk', st)
1884+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADeABjLNIAAIGk', st)
1885 st.st_ino = 6499540
1886 # LNI => LNQ
1887- self.assertPackStat('AAAbWEXm4FxF5uBmAAADeABjLNQAAIGk', st)
1888+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADeABjLNQAAIGk', st)
1889 st.st_mode = 0o100744
1890 # IGk => IHk
1891- self.assertPackStat('AAAbWEXm4FxF5uBmAAADeABjLNQAAIHk', st)
1892+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADeABjLNQAAIHk', st)
1893
1894 def test_pack_stat_float(self):
1895 """On some platforms mtime and ctime are floats.
1896@@ -1908,18 +1902,18 @@
1897 st = _FakeStat(7000, 1172758614.0, 1172758617.0,
1898 777, 6499538, 0o100644)
1899 # These should all be the same as the integer counterparts
1900- self.assertPackStat('AAAbWEXm4FZF5uBZAAADCQBjLNIAAIGk', st)
1901+ self.assertPackStat(b'AAAbWEXm4FZF5uBZAAADCQBjLNIAAIGk', st)
1902 st.st_mtime = 1172758620.0
1903 # FZF5 => FxF5
1904- self.assertPackStat('AAAbWEXm4FxF5uBZAAADCQBjLNIAAIGk', st)
1905+ self.assertPackStat(b'AAAbWEXm4FxF5uBZAAADCQBjLNIAAIGk', st)
1906 st.st_ctime = 1172758630.0
1907 # uBZ => uBm
1908- self.assertPackStat('AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1909+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1910 # fractional seconds are discarded, so no change from above
1911 st.st_mtime = 1172758620.453
1912- self.assertPackStat('AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1913+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1914 st.st_ctime = 1172758630.228
1915- self.assertPackStat('AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1916+ self.assertPackStat(b'AAAbWEXm4FxF5uBmAAADCQBjLNIAAIGk', st)
1917
1918
1919 class TestBisect(TestCaseWithDirState):
1920@@ -2003,162 +1997,162 @@
1921 tree, state, expected = self.create_basic_dirstate()
1922
1923 # Bisect should return the rows for the specified files.
1924- self.assertBisect(expected, [['']], state, [''])
1925- self.assertBisect(expected, [['a']], state, ['a'])
1926- self.assertBisect(expected, [['b']], state, ['b'])
1927- self.assertBisect(expected, [['b/c']], state, ['b/c'])
1928- self.assertBisect(expected, [['b/d']], state, ['b/d'])
1929- self.assertBisect(expected, [['b/d/e']], state, ['b/d/e'])
1930- self.assertBisect(expected, [['b-c']], state, ['b-c'])
1931- self.assertBisect(expected, [['f']], state, ['f'])
1932+ self.assertBisect(expected, [[b'']], state, [b''])
1933+ self.assertBisect(expected, [[b'a']], state, [b'a'])
1934+ self.assertBisect(expected, [[b'b']], state, [b'b'])
1935+ self.assertBisect(expected, [[b'b/c']], state, [b'b/c'])
1936+ self.assertBisect(expected, [[b'b/d']], state, [b'b/d'])
1937+ self.assertBisect(expected, [[b'b/d/e']], state, [b'b/d/e'])
1938+ self.assertBisect(expected, [[b'b-c']], state, [b'b-c'])
1939+ self.assertBisect(expected, [[b'f']], state, [b'f'])
1940
1941 def test_bisect_multi(self):
1942 """Bisect can be used to find multiple records at the same time."""
1943 tree, state, expected = self.create_basic_dirstate()
1944 # Bisect should be capable of finding multiple entries at the same time
1945- self.assertBisect(expected, [['a'], ['b'], ['f']],
1946- state, ['a', 'b', 'f'])
1947- self.assertBisect(expected, [['f'], ['b/d'], ['b/d/e']],
1948- state, ['f', 'b/d', 'b/d/e'])
1949- self.assertBisect(expected, [['b'], ['b-c'], ['b/c']],
1950- state, ['b', 'b-c', 'b/c'])
1951+ self.assertBisect(expected, [[b'a'], [b'b'], [b'f']],
1952+ state, [b'a', b'b', b'f'])
1953+ self.assertBisect(expected, [[b'f'], [b'b/d'], [b'b/d/e']],
1954+ state, [b'f', b'b/d', b'b/d/e'])
1955+ self.assertBisect(expected, [[b'b'], [b'b-c'], [b'b/c']],
1956+ state, [b'b', b'b-c', b'b/c'])
1957
1958 def test_bisect_one_page(self):
1959 """Test bisect when there is only 1 page to read"""
1960 tree, state, expected = self.create_basic_dirstate()
1961 state._bisect_page_size = 5000
1962- self.assertBisect(expected, [['']], state, [''])
1963- self.assertBisect(expected, [['a']], state, ['a'])
1964- self.assertBisect(expected, [['b']], state, ['b'])
1965- self.assertBisect(expected, [['b/c']], state, ['b/c'])
1966- self.assertBisect(expected, [['b/d']], state, ['b/d'])
1967- self.assertBisect(expected, [['b/d/e']], state, ['b/d/e'])
1968- self.assertBisect(expected, [['b-c']], state, ['b-c'])
1969- self.assertBisect(expected, [['f']], state, ['f'])
1970- self.assertBisect(expected, [['a'], ['b'], ['f']],
1971- state, ['a', 'b', 'f'])
1972- self.assertBisect(expected, [['b/d'], ['b/d/e'], ['f']],
1973- state, ['b/d', 'b/d/e', 'f'])
1974- self.assertBisect(expected, [['b'], ['b/c'], ['b-c']],
1975- state, ['b', 'b/c', 'b-c'])
1976+ self.assertBisect(expected, [[b'']], state, [b''])
1977+ self.assertBisect(expected, [[b'a']], state, [b'a'])
1978+ self.assertBisect(expected, [[b'b']], state, [b'b'])
1979+ self.assertBisect(expected, [[b'b/c']], state, [b'b/c'])
1980+ self.assertBisect(expected, [[b'b/d']], state, [b'b/d'])
1981+ self.assertBisect(expected, [[b'b/d/e']], state, [b'b/d/e'])
1982+ self.assertBisect(expected, [[b'b-c']], state, [b'b-c'])
1983+ self.assertBisect(expected, [[b'f']], state, [b'f'])
1984+ self.assertBisect(expected, [[b'a'], [b'b'], [b'f']],
1985+ state, [b'a', b'b', b'f'])
1986+ self.assertBisect(expected, [[b'b/d'], [b'b/d/e'], [b'f']],
1987+ state, [b'b/d', b'b/d/e', b'f'])
1988+ self.assertBisect(expected, [[b'b'], [b'b/c'], [b'b-c']],
1989+ state, [b'b', b'b/c', b'b-c'])
1990
1991 def test_bisect_duplicate_paths(self):
1992 """When bisecting for a path, handle multiple entries."""
1993 tree, state, expected = self.create_duplicated_dirstate()
1994
1995 # Now make sure that both records are properly returned.
1996- self.assertBisect(expected, [['']], state, [''])
1997- self.assertBisect(expected, [['a', 'a2']], state, ['a'])
1998- self.assertBisect(expected, [['b', 'b2']], state, ['b'])
1999- self.assertBisect(expected, [['b/c', 'b/c2']], state, ['b/c'])
2000- self.assertBisect(expected, [['b/d', 'b/d2']], state, ['b/d'])
2001- self.assertBisect(expected, [['b/d/e', 'b/d/e2']],
2002- state, ['b/d/e'])
2003- self.assertBisect(expected, [['b-c', 'b-c2']], state, ['b-c'])
2004- self.assertBisect(expected, [['f', 'f2']], state, ['f'])
2005+ self.assertBisect(expected, [[b'']], state, [b''])
2006+ self.assertBisect(expected, [[b'a', b'a2']], state, [b'a'])
2007+ self.assertBisect(expected, [[b'b', b'b2']], state, [b'b'])
2008+ self.assertBisect(expected, [[b'b/c', b'b/c2']], state, [b'b/c'])
2009+ self.assertBisect(expected, [[b'b/d', b'b/d2']], state, [b'b/d'])
2010+ self.assertBisect(expected, [[b'b/d/e', b'b/d/e2']],
2011+ state, [b'b/d/e'])
2012+ self.assertBisect(expected, [[b'b-c', b'b-c2']], state, [b'b-c'])
2013+ self.assertBisect(expected, [[b'f', b'f2']], state, [b'f'])
2014
2015 def test_bisect_page_size_too_small(self):
2016 """If the page size is too small, we will auto increase it."""
2017 tree, state, expected = self.create_basic_dirstate()
2018 state._bisect_page_size = 50
2019- self.assertBisect(expected, [None], state, ['b/e'])
2020- self.assertBisect(expected, [['a']], state, ['a'])
2021- self.assertBisect(expected, [['b']], state, ['b'])
2022- self.assertBisect(expected, [['b/c']], state, ['b/c'])
2023- self.assertBisect(expected, [['b/d']], state, ['b/d'])
2024- self.assertBisect(expected, [['b/d/e']], state, ['b/d/e'])
2025- self.assertBisect(expected, [['b-c']], state, ['b-c'])
2026- self.assertBisect(expected, [['f']], state, ['f'])
2027+ self.assertBisect(expected, [None], state, [b'b/e'])
2028+ self.assertBisect(expected, [[b'a']], state, [b'a'])
2029+ self.assertBisect(expected, [[b'b']], state, [b'b'])
2030+ self.assertBisect(expected, [[b'b/c']], state, [b'b/c'])
2031+ self.assertBisect(expected, [[b'b/d']], state, [b'b/d'])
2032+ self.assertBisect(expected, [[b'b/d/e']], state, [b'b/d/e'])
2033+ self.assertBisect(expected, [[b'b-c']], state, [b'b-c'])
2034+ self.assertBisect(expected, [[b'f']], state, [b'f'])
2035
2036 def test_bisect_missing(self):
2037 """Test that bisect return None if it cannot find a path."""
2038 tree, state, expected = self.create_basic_dirstate()
2039- self.assertBisect(expected, [None], state, ['foo'])
2040- self.assertBisect(expected, [None], state, ['b/foo'])
2041- self.assertBisect(expected, [None], state, ['bar/foo'])
2042- self.assertBisect(expected, [None], state, ['b-c/foo'])
2043+ self.assertBisect(expected, [None], state, [b'foo'])
2044+ self.assertBisect(expected, [None], state, [b'b/foo'])
2045+ self.assertBisect(expected, [None], state, [b'bar/foo'])
2046+ self.assertBisect(expected, [None], state, [b'b-c/foo'])
2047
2048- self.assertBisect(expected, [['a'], None, ['b/d']],
2049- state, ['a', 'foo', 'b/d'])
2050+ self.assertBisect(expected, [[b'a'], None, [b'b/d']],
2051+ state, [b'a', b'foo', b'b/d'])
2052
2053 def test_bisect_rename(self):
2054 """Check that we find a renamed row."""
2055 tree, state, expected = self.create_renamed_dirstate()
2056
2057 # Search for the pre and post renamed entries
2058- self.assertBisect(expected, [['a']], state, ['a'])
2059- self.assertBisect(expected, [['b/g']], state, ['b/g'])
2060- self.assertBisect(expected, [['b/d']], state, ['b/d'])
2061- self.assertBisect(expected, [['h']], state, ['h'])
2062+ self.assertBisect(expected, [[b'a']], state, [b'a'])
2063+ self.assertBisect(expected, [[b'b/g']], state, [b'b/g'])
2064+ self.assertBisect(expected, [[b'b/d']], state, [b'b/d'])
2065+ self.assertBisect(expected, [[b'h']], state, [b'h'])
2066
2067 # What about b/d/e? shouldn't that also get 2 directory entries?
2068- self.assertBisect(expected, [['b/d/e']], state, ['b/d/e'])
2069- self.assertBisect(expected, [['h/e']], state, ['h/e'])
2070+ self.assertBisect(expected, [[b'b/d/e']], state, [b'b/d/e'])
2071+ self.assertBisect(expected, [[b'h/e']], state, [b'h/e'])
2072
2073 def test_bisect_dirblocks(self):
2074 tree, state, expected = self.create_duplicated_dirstate()
2075 self.assertBisectDirBlocks(expected,
2076- [['', 'a', 'a2', 'b', 'b2', 'b-c', 'b-c2', 'f', 'f2']],
2077- state, [''])
2078- self.assertBisectDirBlocks(expected,
2079- [['b/c', 'b/c2', 'b/d', 'b/d2']], state, ['b'])
2080- self.assertBisectDirBlocks(expected,
2081- [['b/d/e', 'b/d/e2']], state, ['b/d'])
2082- self.assertBisectDirBlocks(expected,
2083- [['', 'a', 'a2', 'b', 'b2', 'b-c', 'b-c2', 'f', 'f2'],
2084- ['b/c', 'b/c2', 'b/d', 'b/d2'],
2085- ['b/d/e', 'b/d/e2'],
2086- ], state, ['', 'b', 'b/d'])
2087+ [[b'', b'a', b'a2', b'b', b'b2', b'b-c', b'b-c2', b'f', b'f2']],
2088+ state, [b''])
2089+ self.assertBisectDirBlocks(expected,
2090+ [[b'b/c', b'b/c2', b'b/d', b'b/d2']], state, [b'b'])
2091+ self.assertBisectDirBlocks(expected,
2092+ [[b'b/d/e', b'b/d/e2']], state, [b'b/d'])
2093+ self.assertBisectDirBlocks(expected,
2094+ [[b'', b'a', b'a2', b'b', b'b2', b'b-c', b'b-c2', b'f', b'f2'],
2095+ [b'b/c', b'b/c2', b'b/d', b'b/d2'],
2096+ [b'b/d/e', b'b/d/e2'],
2097+ ], state, [b'', b'b', b'b/d'])
2098
2099 def test_bisect_dirblocks_missing(self):
2100 tree, state, expected = self.create_basic_dirstate()
2101- self.assertBisectDirBlocks(expected, [['b/d/e'], None],
2102- state, ['b/d', 'b/e'])
2103+ self.assertBisectDirBlocks(expected, [[b'b/d/e'], None],
2104+ state, [b'b/d', b'b/e'])
2105 # Files don't show up in this search
2106- self.assertBisectDirBlocks(expected, [None], state, ['a'])
2107- self.assertBisectDirBlocks(expected, [None], state, ['b/c'])
2108- self.assertBisectDirBlocks(expected, [None], state, ['c'])
2109- self.assertBisectDirBlocks(expected, [None], state, ['b/d/e'])
2110- self.assertBisectDirBlocks(expected, [None], state, ['f'])
2111+ self.assertBisectDirBlocks(expected, [None], state, [b'a'])
2112+ self.assertBisectDirBlocks(expected, [None], state, [b'b/c'])
2113+ self.assertBisectDirBlocks(expected, [None], state, [b'c'])
2114+ self.assertBisectDirBlocks(expected, [None], state, [b'b/d/e'])
2115+ self.assertBisectDirBlocks(expected, [None], state, [b'f'])
2116
2117 def test_bisect_recursive_each(self):
2118 tree, state, expected = self.create_basic_dirstate()
2119- self.assertBisectRecursive(expected, ['a'], state, ['a'])
2120- self.assertBisectRecursive(expected, ['b/c'], state, ['b/c'])
2121- self.assertBisectRecursive(expected, ['b/d/e'], state, ['b/d/e'])
2122- self.assertBisectRecursive(expected, ['b-c'], state, ['b-c'])
2123- self.assertBisectRecursive(expected, ['b/d', 'b/d/e'],
2124- state, ['b/d'])
2125- self.assertBisectRecursive(expected, ['b', 'b/c', 'b/d', 'b/d/e'],
2126- state, ['b'])
2127- self.assertBisectRecursive(expected, ['', 'a', 'b', 'b-c', 'f', 'b/c',
2128- 'b/d', 'b/d/e'],
2129- state, [''])
2130+ self.assertBisectRecursive(expected, [b'a'], state, [b'a'])
2131+ self.assertBisectRecursive(expected, [b'b/c'], state, [b'b/c'])
2132+ self.assertBisectRecursive(expected, [b'b/d/e'], state, [b'b/d/e'])
2133+ self.assertBisectRecursive(expected, [b'b-c'], state, [b'b-c'])
2134+ self.assertBisectRecursive(expected, [b'b/d', b'b/d/e'],
2135+ state, [b'b/d'])
2136+ self.assertBisectRecursive(expected, [b'b', b'b/c', b'b/d', b'b/d/e'],
2137+ state, [b'b'])
2138+ self.assertBisectRecursive(expected, [b'', b'a', b'b', b'b-c', b'f', b'b/c',
2139+ b'b/d', b'b/d/e'],
2140+ state, [b''])
2141
2142 def test_bisect_recursive_multiple(self):
2143 tree, state, expected = self.create_basic_dirstate()
2144- self.assertBisectRecursive(expected, ['a', 'b/c'], state, ['a', 'b/c'])
2145- self.assertBisectRecursive(expected, ['b/d', 'b/d/e'],
2146- state, ['b/d', 'b/d/e'])
2147+ self.assertBisectRecursive(expected, [b'a', b'b/c'], state, [b'a', b'b/c'])
2148+ self.assertBisectRecursive(expected, [b'b/d', b'b/d/e'],
2149+ state, [b'b/d', b'b/d/e'])
2150
2151 def test_bisect_recursive_missing(self):
2152 tree, state, expected = self.create_basic_dirstate()
2153- self.assertBisectRecursive(expected, [], state, ['d'])
2154- self.assertBisectRecursive(expected, [], state, ['b/e'])
2155- self.assertBisectRecursive(expected, [], state, ['g'])
2156- self.assertBisectRecursive(expected, ['a'], state, ['a', 'g'])
2157+ self.assertBisectRecursive(expected, [], state, [b'd'])
2158+ self.assertBisectRecursive(expected, [], state, [b'b/e'])
2159+ self.assertBisectRecursive(expected, [], state, [b'g'])
2160+ self.assertBisectRecursive(expected, [b'a'], state, [b'a', b'g'])
2161
2162 def test_bisect_recursive_renamed(self):
2163 tree, state, expected = self.create_renamed_dirstate()
2164
2165 # Looking for either renamed item should find the other
2166- self.assertBisectRecursive(expected, ['a', 'b/g'], state, ['a'])
2167- self.assertBisectRecursive(expected, ['a', 'b/g'], state, ['b/g'])
2168+ self.assertBisectRecursive(expected, [b'a', b'b/g'], state, [b'a'])
2169+ self.assertBisectRecursive(expected, [b'a', b'b/g'], state, [b'b/g'])
2170 # Looking in the containing directory should find the rename target,
2171 # and anything in a subdir of the renamed target.
2172- self.assertBisectRecursive(expected, ['a', 'b', 'b/c', 'b/d',
2173- 'b/d/e', 'b/g', 'h', 'h/e'],
2174- state, ['b'])
2175+ self.assertBisectRecursive(expected, [b'a', b'b', b'b/c', b'b/d',
2176+ 'b/d/e', b'b/g', b'h', b'h/e'],
2177+ state, [b'b'])
2178
2179
2180 class TestDirstateValidation(TestCaseWithDirState):
2181@@ -2181,9 +2175,9 @@
2182 # we're appending to the dirblock, but this name comes before some of
2183 # the existing names; that's wrong
2184 last_dirblock[1].append(
2185- (('h', 'aaaa', 'a-id'),
2186- [('a', '', 0, False, ''),
2187- ('a', '', 0, False, '')]))
2188+ ((b'h', b'aaaa', b'a-id'),
2189+ [(b'a', b'', 0, False, b''),
2190+ (b'a', b'', 0, False, b'')]))
2191 e = self.assertRaises(AssertionError,
2192 state._validate)
2193 self.assertContainsRe(str(e), 'not sorted')
2194@@ -2194,9 +2188,9 @@
2195 last_dirblock = state._dirblocks[-1]
2196 # add an entry with the wrong directory name
2197 last_dirblock[1].append(
2198- (('', 'z', 'a-id'),
2199- [('a', '', 0, False, ''),
2200- ('a', '', 0, False, '')]))
2201+ ((b'', b'z', b'a-id'),
2202+ [(b'a', b'', 0, False, b''),
2203+ (b'a', b'', 0, False, b'')]))
2204 e = self.assertRaises(AssertionError,
2205 state._validate)
2206 self.assertContainsRe(str(e),
2207@@ -2209,9 +2203,9 @@
2208 # make another entry for a-id, without a correct 'r' pointer to
2209 # the real occurrence in the working tree
2210 last_dirblock[1].append(
2211- (('h', 'z', 'a-id'),
2212- [('a', '', 0, False, ''),
2213- ('a', '', 0, False, '')]))
2214+ ((b'h', b'z', b'a-id'),
2215+ [(b'a', b'', 0, False, b''),
2216+ (b'a', b'', 0, False, b'')]))
2217 e = self.assertRaises(AssertionError,
2218 state._validate)
2219 self.assertContainsRe(str(e),
2220@@ -2228,9 +2222,9 @@
2221 tree.add_reference(subtree)
2222 tree.add('subtree')
2223 state = dirstate.DirState.from_tree(tree, 'dirstate')
2224- key = ('', 'subtree', 'subtree')
2225- expected = ('', [(key,
2226- [('t', '', 0, False, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')])])
2227+ key = (b'', b'subtree', b'subtree')
2228+ expected = (b'', [(key,
2229+ [(b't', b'', 0, False, b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')])])
2230
2231 try:
2232 self.assertEqual(expected, state._find_block(key))
2233@@ -2249,18 +2243,18 @@
2234
2235 def test_discard_one_parent(self):
2236 # No-op
2237- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
2238- root_entry_direntry = ('', '', 'a-root-value'), [
2239- ('d', '', 0, False, packed_stat),
2240- ('d', '', 0, False, packed_stat),
2241+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
2242+ root_entry_direntry = (b'', b'', b'a-root-value'), [
2243+ (b'd', b'', 0, False, packed_stat),
2244+ (b'd', b'', 0, False, packed_stat),
2245 ]
2246 dirblocks = []
2247- dirblocks.append(('', [root_entry_direntry]))
2248- dirblocks.append(('', []))
2249+ dirblocks.append((b'', [root_entry_direntry]))
2250+ dirblocks.append((b'', []))
2251
2252 state = self.create_empty_dirstate()
2253 self.addCleanup(state.unlock)
2254- state._set_data(['parent-id'], dirblocks[:])
2255+ state._set_data([b'parent-id'], dirblocks[:])
2256 state._validate()
2257
2258 state._discard_merge_parents()
2259@@ -2269,42 +2263,42 @@
2260
2261 def test_discard_simple(self):
2262 # No-op
2263- packed_stat = 'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
2264- root_entry_direntry = ('', '', 'a-root-value'), [
2265- ('d', '', 0, False, packed_stat),
2266- ('d', '', 0, False, packed_stat),
2267- ('d', '', 0, False, packed_stat),
2268+ packed_stat = b'AAAAREUHaIpFB2iKAAADAQAtkqUAAIGk'
2269+ root_entry_direntry = (b'', b'', b'a-root-value'), [
2270+ (b'd', b'', 0, False, packed_stat),
2271+ (b'd', b'', 0, False, packed_stat),
2272+ (b'd', b'', 0, False, packed_stat),
2273 ]
2274- expected_root_entry_direntry = ('', '', 'a-root-value'), [
2275- ('d', '', 0, False, packed_stat),
2276- ('d', '', 0, False, packed_stat),
2277+ expected_root_entry_direntry = (b'', b'', b'a-root-value'), [
2278+ (b'd', b'', 0, False, packed_stat),
2279+ (b'd', b'', 0, False, packed_stat),
2280 ]
2281 dirblocks = []
2282- dirblocks.append(('', [root_entry_direntry]))
2283- dirblocks.append(('', []))
2284+ dirblocks.append((b'', [root_entry_direntry]))
2285+ dirblocks.append((b'', []))
2286
2287 state = self.create_empty_dirstate()
2288 self.addCleanup(state.unlock)
2289- state._set_data(['parent-id', 'merged-id'], dirblocks[:])
2290+ state._set_data([b'parent-id', b'merged-id'], dirblocks[:])
2291 state._validate()
2292
2293 # This should strip of the extra column
2294 state._discard_merge_parents()
2295 state._validate()
2296- expected_dirblocks = [('', [expected_root_entry_direntry]), ('', [])]
2297+ expected_dirblocks = [(b'', [expected_root_entry_direntry]), (b'', [])]
2298 self.assertEqual(expected_dirblocks, state._dirblocks)
2299
2300 def test_discard_absent(self):
2301 """If entries are only in a merge, discard should remove the entries"""
2302 null_stat = dirstate.DirState.NULLSTAT
2303- present_dir = ('d', '', 0, False, null_stat)
2304- present_file = ('f', '', 0, False, null_stat)
2305+ present_dir = (b'd', b'', 0, False, null_stat)
2306+ present_file = (b'f', b'', 0, False, null_stat)
2307 absent = dirstate.DirState.NULL_PARENT_DETAILS
2308- root_key = ('', '', 'a-root-value')
2309- file_in_root_key = ('', 'file-in-root', 'a-file-id')
2310- file_in_merged_key = ('', 'file-in-merged', 'b-file-id')
2311- dirblocks = [('', [(root_key, [present_dir, present_dir, present_dir])]),
2312- ('', [(file_in_merged_key,
2313+ root_key = (b'', b'', b'a-root-value')
2314+ file_in_root_key = (b'', b'file-in-root', b'a-file-id')
2315+ file_in_merged_key = (b'', b'file-in-merged', b'b-file-id')
2316+ dirblocks = [(b'', [(root_key, [present_dir, present_dir, present_dir])]),
2317+ (b'', [(file_in_merged_key,
2318 [absent, absent, present_file]),
2319 (file_in_root_key,
2320 [present_file, present_file, present_file]),
2321@@ -2313,11 +2307,11 @@
2322
2323 state = self.create_empty_dirstate()
2324 self.addCleanup(state.unlock)
2325- state._set_data(['parent-id', 'merged-id'], dirblocks[:])
2326+ state._set_data([b'parent-id', b'merged-id'], dirblocks[:])
2327 state._validate()
2328
2329- exp_dirblocks = [('', [(root_key, [present_dir, present_dir])]),
2330- ('', [(file_in_root_key,
2331+ exp_dirblocks = [(b'', [(root_key, [present_dir, present_dir])]),
2332+ (b'', [(file_in_root_key,
2333 [present_file, present_file]),
2334 ]),
2335 ]
2336@@ -2327,42 +2321,42 @@
2337
2338 def test_discard_renamed(self):
2339 null_stat = dirstate.DirState.NULLSTAT
2340- present_dir = ('d', '', 0, False, null_stat)
2341- present_file = ('f', '', 0, False, null_stat)
2342+ present_dir = (b'd', b'', 0, False, null_stat)
2343+ present_file = (b'f', b'', 0, False, null_stat)
2344 absent = dirstate.DirState.NULL_PARENT_DETAILS
2345- root_key = ('', '', 'a-root-value')
2346- file_in_root_key = ('', 'file-in-root', 'a-file-id')
2347+ root_key = (b'', b'', b'a-root-value')
2348+ file_in_root_key = (b'', b'file-in-root', b'a-file-id')
2349 # Renamed relative to parent
2350- file_rename_s_key = ('', 'file-s', 'b-file-id')
2351- file_rename_t_key = ('', 'file-t', 'b-file-id')
2352+ file_rename_s_key = (b'', b'file-s', b'b-file-id')
2353+ file_rename_t_key = (b'', b'file-t', b'b-file-id')
2354 # And one that is renamed between the parents, but absent in this
2355- key_in_1 = ('', 'file-in-1', 'c-file-id')
2356- key_in_2 = ('', 'file-in-2', 'c-file-id')
2357+ key_in_1 = (b'', b'file-in-1', b'c-file-id')
2358+ key_in_2 = (b'', b'file-in-2', b'c-file-id')
2359
2360 dirblocks = [
2361- ('', [(root_key, [present_dir, present_dir, present_dir])]),
2362- ('', [(key_in_1,
2363- [absent, present_file, ('r', 'file-in-2', 'c-file-id')]),
2364+ (b'', [(root_key, [present_dir, present_dir, present_dir])]),
2365+ (b'', [(key_in_1,
2366+ [absent, present_file, (b'r', b'file-in-2', b'c-file-id')]),
2367 (key_in_2,
2368- [absent, ('r', 'file-in-1', 'c-file-id'), present_file]),
2369+ [absent, (b'r', b'file-in-1', b'c-file-id'), present_file]),
2370 (file_in_root_key,
2371 [present_file, present_file, present_file]),
2372 (file_rename_s_key,
2373- [('r', 'file-t', 'b-file-id'), absent, present_file]),
2374+ [(b'r', b'file-t', b'b-file-id'), absent, present_file]),
2375 (file_rename_t_key,
2376- [present_file, absent, ('r', 'file-s', 'b-file-id')]),
2377+ [present_file, absent, (b'r', b'file-s', b'b-file-id')]),
2378 ]),
2379 ]
2380 exp_dirblocks = [
2381- ('', [(root_key, [present_dir, present_dir])]),
2382- ('', [(key_in_1, [absent, present_file]),
2383+ (b'', [(root_key, [present_dir, present_dir])]),
2384+ (b'', [(key_in_1, [absent, present_file]),
2385 (file_in_root_key, [present_file, present_file]),
2386 (file_rename_t_key, [present_file, absent]),
2387 ]),
2388 ]
2389 state = self.create_empty_dirstate()
2390 self.addCleanup(state.unlock)
2391- state._set_data(['parent-id', 'merged-id'], dirblocks[:])
2392+ state._set_data([b'parent-id', b'merged-id'], dirblocks[:])
2393 state._validate()
2394
2395 state._discard_merge_parents()
2396@@ -2371,31 +2365,31 @@
2397
2398 def test_discard_all_subdir(self):
2399 null_stat = dirstate.DirState.NULLSTAT
2400- present_dir = ('d', '', 0, False, null_stat)
2401- present_file = ('f', '', 0, False, null_stat)
2402+ present_dir = (b'd', b'', 0, False, null_stat)
2403+ present_file = (b'f', b'', 0, False, null_stat)
2404 absent = dirstate.DirState.NULL_PARENT_DETAILS
2405- root_key = ('', '', 'a-root-value')
2406- subdir_key = ('', 'sub', 'dir-id')
2407- child1_key = ('sub', 'child1', 'child1-id')
2408- child2_key = ('sub', 'child2', 'child2-id')
2409- child3_key = ('sub', 'child3', 'child3-id')
2410+ root_key = (b'', b'', b'a-root-value')
2411+ subdir_key = (b'', b'sub', b'dir-id')
2412+ child1_key = (b'sub', b'child1', b'child1-id')
2413+ child2_key = (b'sub', b'child2', b'child2-id')
2414+ child3_key = (b'sub', b'child3', b'child3-id')
2415
2416 dirblocks = [
2417- ('', [(root_key, [present_dir, present_dir, present_dir])]),
2418- ('', [(subdir_key, [present_dir, present_dir, present_dir])]),
2419- ('sub', [(child1_key, [absent, absent, present_file]),
2420+ (b'', [(root_key, [present_dir, present_dir, present_dir])]),
2421+ (b'', [(subdir_key, [present_dir, present_dir, present_dir])]),
2422+ (b'sub', [(child1_key, [absent, absent, present_file]),
2423 (child2_key, [absent, absent, present_file]),
2424 (child3_key, [absent, absent, present_file]),
2425 ]),
2426 ]
2427 exp_dirblocks = [
2428- ('', [(root_key, [present_dir, present_dir])]),
2429- ('', [(subdir_key, [present_dir, present_dir])]),
2430- ('sub', []),
2431+ (b'', [(root_key, [present_dir, present_dir])]),
2432+ (b'', [(subdir_key, [present_dir, present_dir])]),
2433+ (b'sub', []),
2434 ]
2435 state = self.create_empty_dirstate()
2436 self.addCleanup(state.unlock)
2437- state._set_data(['parent-id', 'merged-id'], dirblocks[:])
2438+ state._set_data([b'parent-id', b'merged-id'], dirblocks[:])
2439 state._validate()
2440
2441 state._discard_merge_parents()
2442@@ -2411,19 +2405,19 @@
2443 # details should always allow join() and always be a plain str when
2444 # finished
2445 (minikind, fingerprint, size, executable, tree_data) = details
2446- self.assertIsInstance(minikind, str)
2447- self.assertIsInstance(fingerprint, str)
2448- self.assertIsInstance(tree_data, str)
2449+ self.assertIsInstance(minikind, bytes)
2450+ self.assertIsInstance(fingerprint, bytes)
2451+ self.assertIsInstance(tree_data, bytes)
2452
2453 def test_unicode_symlink(self):
2454 inv_entry = inventory.InventoryLink(b'link-file-id',
2455 u'nam\N{Euro Sign}e',
2456 b'link-parent-id')
2457- inv_entry.revision = 'link-revision-id'
2458+ inv_entry.revision = b'link-revision-id'
2459 target = u'link-targ\N{Euro Sign}t'
2460 inv_entry.symlink_target = target
2461- self.assertDetails(('l', target.encode('UTF-8'), 0, False,
2462- 'link-revision-id'), inv_entry)
2463+ self.assertDetails((b'l', target.encode('UTF-8'), 0, False,
2464+ b'link-revision-id'), inv_entry)
2465
2466
2467 class TestSHA1Provider(tests.TestCaseInTempDir):
2468@@ -2477,20 +2471,20 @@
2469 try:
2470 dir_id = dir_ids[dirname]
2471 except KeyError:
2472- dir_id = osutils.basename(dirname) + '-id'
2473+ dir_id = osutils.basename(dirname).encode('utf-8') + b'-id'
2474 if is_dir:
2475 ie = inventory.InventoryDirectory(file_id, basename, dir_id)
2476 dir_ids[path] = file_id
2477 else:
2478 ie = inventory.InventoryFile(file_id, basename, dir_id)
2479 ie.text_size = 0
2480- ie.text_sha1 = ''
2481+ ie.text_sha1 = b''
2482 ie.revision = rev_id
2483 return ie
2484
2485 def create_tree_from_shape(self, rev_id, shape):
2486- dir_ids = {'': 'root-id'}
2487- inv = inventory.Inventory('root-id', rev_id)
2488+ dir_ids = {'': b'root-id'}
2489+ inv = inventory.Inventory(b'root-id', rev_id)
2490 for info in shape:
2491 if len(info) == 2:
2492 path, file_id = info
2493@@ -2517,7 +2511,7 @@
2494
2495 def create_inv_delta(self, delta, rev_id):
2496 """Translate a 'delta shape' into an actual InventoryDelta"""
2497- dir_ids = {'': 'root-id'}
2498+ dir_ids = {'': b'root-id'}
2499 inv_delta = []
2500 for old_path, new_path, file_id in delta:
2501 if old_path is not None and old_path.endswith('/'):
2502@@ -2539,18 +2533,18 @@
2503 and assert that the DirState is still valid, and that its stored
2504 content matches the target_shape.
2505 """
2506- active_tree = self.create_tree_from_shape('active', active)
2507- basis_tree = self.create_tree_from_shape('basis', basis)
2508- target_tree = self.create_tree_from_shape('target', target)
2509+ active_tree = self.create_tree_from_shape(b'active', active)
2510+ basis_tree = self.create_tree_from_shape(b'basis', basis)
2511+ target_tree = self.create_tree_from_shape(b'target', target)
2512 state = self.create_empty_dirstate()
2513 state.set_state_from_scratch(active_tree.root_inventory,
2514- [('basis', basis_tree)], [])
2515+ [(b'basis', basis_tree)], [])
2516 delta = target_tree.root_inventory._make_delta(
2517 basis_tree.root_inventory)
2518- state.update_basis_by_delta(delta, 'target')
2519+ state.update_basis_by_delta(delta, b'target')
2520 state._validate()
2521 dirstate_tree = workingtree_4.DirStateRevisionTree(state,
2522- 'target', _Repo())
2523+ b'target', _Repo())
2524 # The target now that delta has been applied should match the
2525 # RevisionTree
2526 self.assertEqual([], list(dirstate_tree.iter_changes(target_tree)))
2527@@ -2558,7 +2552,7 @@
2528 # it from scratch.
2529 state2 = self.create_empty_dirstate()
2530 state2.set_state_from_scratch(active_tree.root_inventory,
2531- [('target', target_tree)], [])
2532+ [(b'target', target_tree)], [])
2533 self.assertEqual(state2._dirblocks, state._dirblocks)
2534 return state
2535
2536@@ -2570,18 +2564,18 @@
2537 :param delta: A description of the delta to apply. Similar to the form
2538 for regular inventory deltas, but omitting the InventoryEntry.
2539 So adding a file is: (None, 'path', b'file-id')
2540- Adding a directory is: (None, 'path/', 'dir-id')
2541- Renaming a dir is: ('old/', 'new/', 'dir-id')
2542+ Adding a directory is: (None, 'path/', b'dir-id')
2543+ Renaming a dir is: ('old/', 'new/', b'dir-id')
2544 etc.
2545 """
2546- active_tree = self.create_tree_from_shape('active', active)
2547- basis_tree = self.create_tree_from_shape('basis', basis)
2548- inv_delta = self.create_inv_delta(delta, 'target')
2549+ active_tree = self.create_tree_from_shape(b'active', active)
2550+ basis_tree = self.create_tree_from_shape(b'basis', basis)
2551+ inv_delta = self.create_inv_delta(delta, b'target')
2552 state = self.create_empty_dirstate()
2553 state.set_state_from_scratch(active_tree.root_inventory,
2554- [('basis', basis_tree)], [])
2555+ [(b'basis', basis_tree)], [])
2556 self.assertRaises(errors.InconsistentDelta,
2557- state.update_basis_by_delta, inv_delta, 'target')
2558+ state.update_basis_by_delta, inv_delta, b'target')
2559 ## try:
2560 ## state.update_basis_by_delta(inv_delta, 'target')
2561 ## except errors.InconsistentDelta, e:
2562@@ -2636,8 +2630,8 @@
2563 def test_add_file_in_empty_dir_not_matching_active_state(self):
2564 state = self.assertUpdate(
2565 active=[],
2566- basis=[('dir/', 'dir-id')],
2567- target=[('dir/', 'dir-id', 'basis'), ('dir/file', b'file-id')],
2568+ basis=[('dir/', b'dir-id')],
2569+ target=[('dir/', b'dir-id', b'basis'), ('dir/file', b'file-id')],
2570 )
2571
2572 def test_add_file_missing_in_active_state(self):
2573@@ -2717,40 +2711,40 @@
2574
2575 def test_rename_directory_with_contents(self):
2576 state = self.assertUpdate( # active matches basis
2577- active=[('dir1/', 'dir-id'),
2578- ('dir1/file', b'file-id')],
2579- basis= [('dir1/', 'dir-id'),
2580- ('dir1/file', b'file-id')],
2581- target=[('dir2/', 'dir-id'),
2582+ active=[('dir1/', b'dir-id'),
2583+ ('dir1/file', b'file-id')],
2584+ basis= [('dir1/', b'dir-id'),
2585+ ('dir1/file', b'file-id')],
2586+ target=[('dir2/', b'dir-id'),
2587 ('dir2/file', b'file-id')])
2588 state = self.assertUpdate( # active matches target
2589- active=[('dir2/', 'dir-id'),
2590+ active=[('dir2/', b'dir-id'),
2591 ('dir2/file', b'file-id')],
2592- basis= [('dir1/', 'dir-id'),
2593+ basis= [('dir1/', b'dir-id'),
2594 ('dir1/file', b'file-id')],
2595- target=[('dir2/', 'dir-id'),
2596+ target=[('dir2/', b'dir-id'),
2597 ('dir2/file', b'file-id')])
2598 state = self.assertUpdate( # active empty
2599 active=[],
2600- basis= [('dir1/', 'dir-id'),
2601+ basis= [('dir1/', b'dir-id'),
2602 ('dir1/file', b'file-id')],
2603- target=[('dir2/', 'dir-id'),
2604+ target=[('dir2/', b'dir-id'),
2605 ('dir2/file', b'file-id')])
2606 state = self.assertUpdate( # active present at other location
2607- active=[('dir3/', 'dir-id'),
2608+ active=[('dir3/', b'dir-id'),
2609 ('dir3/file', b'file-id')],
2610- basis= [('dir1/', 'dir-id'),
2611+ basis= [('dir1/', b'dir-id'),
2612 ('dir1/file', b'file-id')],
2613- target=[('dir2/', 'dir-id'),
2614+ target=[('dir2/', b'dir-id'),
2615 ('dir2/file', b'file-id')])
2616 state = self.assertUpdate( # active has different ids
2617- active=[('dir1/', 'dir1-id'),
2618- ('dir1/file', 'file1-id'),
2619- ('dir2/', 'dir2-id'),
2620- ('dir2/file', 'file2-id')],
2621- basis= [('dir1/', 'dir-id'),
2622+ active=[('dir1/', b'dir1-id'),
2623+ ('dir1/file', b'file1-id'),
2624+ ('dir2/', b'dir2-id'),
2625+ ('dir2/file', b'file2-id')],
2626+ basis= [('dir1/', b'dir-id'),
2627 ('dir1/file', b'file-id')],
2628- target=[('dir2/', 'dir-id'),
2629+ target=[('dir2/', b'dir-id'),
2630 ('dir2/file', b'file-id')])
2631
2632 def test_invalid_file_not_present(self):
2633@@ -2785,11 +2779,11 @@
2634 # Note: we force the active tree to have the directory, by knowing how
2635 # path_to_ie handles entries with missing parents
2636 state = self.assertBadDelta(
2637- active=[('path/', 'path-id')],
2638+ active=[('path/', b'path-id')],
2639 basis= [],
2640 delta=[(None, 'path/path2', b'file-id')])
2641 state = self.assertBadDelta(
2642- active=[('path/', 'path-id'),
2643+ active=[('path/', b'path-id'),
2644 ('path/path2', b'file-id')],
2645 basis= [],
2646 delta=[(None, 'path/path2', b'file-id')])
2647@@ -2798,95 +2792,95 @@
2648 # We replace the parent directory, with another parent dir. But the C
2649 # file doesn't look like it has been moved.
2650 state = self.assertUpdate(# Same as basis
2651- active=[('dir/', 'A-id'),
2652- ('dir/B', 'B-id')],
2653- basis= [('dir/', 'A-id'),
2654- ('dir/B', 'B-id')],
2655- target=[('dir/', 'C-id'),
2656- ('dir/B', 'B-id')])
2657+ active=[('dir/', b'A-id'),
2658+ ('dir/B', b'B-id')],
2659+ basis= [('dir/', b'A-id'),
2660+ ('dir/B', b'B-id')],
2661+ target=[('dir/', b'C-id'),
2662+ ('dir/B', b'B-id')])
2663 state = self.assertUpdate(# Same as target
2664- active=[('dir/', 'C-id'),
2665- ('dir/B', 'B-id')],
2666- basis= [('dir/', 'A-id'),
2667- ('dir/B', 'B-id')],
2668- target=[('dir/', 'C-id'),
2669- ('dir/B', 'B-id')])
2670+ active=[('dir/', b'C-id'),
2671+ ('dir/B', b'B-id')],
2672+ basis= [('dir/', b'A-id'),
2673+ ('dir/B', b'B-id')],
2674+ target=[('dir/', b'C-id'),
2675+ ('dir/B', b'B-id')])
2676 state = self.assertUpdate(# empty active
2677 active=[],
2678- basis= [('dir/', 'A-id'),
2679- ('dir/B', 'B-id')],
2680- target=[('dir/', 'C-id'),
2681- ('dir/B', 'B-id')])
2682+ basis= [('dir/', b'A-id'),
2683+ ('dir/B', b'B-id')],
2684+ target=[('dir/', b'C-id'),
2685+ ('dir/B', b'B-id')])
2686 state = self.assertUpdate(# different active
2687- active=[('dir/', 'D-id'),
2688- ('dir/B', 'B-id')],
2689- basis= [('dir/', 'A-id'),
2690- ('dir/B', 'B-id')],
2691- target=[('dir/', 'C-id'),
2692- ('dir/B', 'B-id')])
2693+ active=[('dir/', b'D-id'),
2694+ ('dir/B', b'B-id')],
2695+ basis= [('dir/', b'A-id'),
2696+ ('dir/B', b'B-id')],
2697+ target=[('dir/', b'C-id'),
2698+ ('dir/B', b'B-id')])
2699
2700 def test_parent_child_swap(self):
2701 state = self.assertUpdate(# Same as basis
2702- active=[('A/', 'A-id'),
2703- ('A/B/', 'B-id'),
2704- ('A/B/C', 'C-id')],
2705- basis= [('A/', 'A-id'),
2706- ('A/B/', 'B-id'),
2707- ('A/B/C', 'C-id')],
2708- target=[('A/', 'B-id'),
2709- ('A/B/', 'A-id'),
2710- ('A/B/C', 'C-id')])
2711+ active=[('A/', b'A-id'),
2712+ ('A/B/', b'B-id'),
2713+ ('A/B/C', b'C-id')],
2714+ basis= [('A/', b'A-id'),
2715+ ('A/B/', b'B-id'),
2716+ ('A/B/C', b'C-id')],
2717+ target=[('A/', b'B-id'),
2718+ ('A/B/', b'A-id'),
2719+ ('A/B/C', b'C-id')])
2720 state = self.assertUpdate(# Same as target
2721- active=[('A/', 'B-id'),
2722- ('A/B/', 'A-id'),
2723- ('A/B/C', 'C-id')],
2724- basis= [('A/', 'A-id'),
2725- ('A/B/', 'B-id'),
2726- ('A/B/C', 'C-id')],
2727- target=[('A/', 'B-id'),
2728- ('A/B/', 'A-id'),
2729- ('A/B/C', 'C-id')])
2730+ active=[('A/', b'B-id'),
2731+ ('A/B/', b'A-id'),
2732+ ('A/B/C', b'C-id')],
2733+ basis= [('A/', b'A-id'),
2734+ ('A/B/', b'B-id'),
2735+ ('A/B/C', b'C-id')],
2736+ target=[('A/', b'B-id'),
2737+ ('A/B/', b'A-id'),
2738+ ('A/B/C', b'C-id')])
2739 state = self.assertUpdate(# empty active
2740 active=[],
2741- basis= [('A/', 'A-id'),
2742- ('A/B/', 'B-id'),
2743- ('A/B/C', 'C-id')],
2744- target=[('A/', 'B-id'),
2745- ('A/B/', 'A-id'),
2746- ('A/B/C', 'C-id')])
2747+ basis= [('A/', b'A-id'),
2748+ ('A/B/', b'B-id'),
2749+ ('A/B/C', b'C-id')],
2750+ target=[('A/', b'B-id'),
2751+ ('A/B/', b'A-id'),
2752+ ('A/B/C', b'C-id')])
2753 state = self.assertUpdate(# different active
2754- active=[('D/', 'A-id'),
2755- ('D/E/', 'B-id'),
2756- ('F', 'C-id')],
2757- basis= [('A/', 'A-id'),
2758- ('A/B/', 'B-id'),
2759- ('A/B/C', 'C-id')],
2760- target=[('A/', 'B-id'),
2761- ('A/B/', 'A-id'),
2762- ('A/B/C', 'C-id')])
2763+ active=[('D/', b'A-id'),
2764+ ('D/E/', b'B-id'),
2765+ ('F', b'C-id')],
2766+ basis= [('A/', b'A-id'),
2767+ ('A/B/', b'B-id'),
2768+ ('A/B/C', b'C-id')],
2769+ target=[('A/', b'B-id'),
2770+ ('A/B/', b'A-id'),
2771+ ('A/B/C', b'C-id')])
2772
2773 def test_change_root_id(self):
2774 state = self.assertUpdate( # same as basis
2775- active=[('', 'root-id'),
2776- ('file', b'file-id')],
2777- basis= [('', 'root-id'),
2778- ('file', b'file-id')],
2779- target=[('', 'target-root-id'),
2780+ active=[('', b'root-id'),
2781+ ('file', b'file-id')],
2782+ basis= [('', b'root-id'),
2783+ ('file', b'file-id')],
2784+ target=[('', b'target-root-id'),
2785 ('file', b'file-id')])
2786 state = self.assertUpdate( # same as target
2787- active=[('', 'target-root-id'),
2788- ('file', b'file-id')],
2789- basis= [('', 'root-id'),
2790- ('file', b'file-id')],
2791- target=[('', 'target-root-id'),
2792- ('file', 'root-id')])
2793+ active=[('', b'target-root-id'),
2794+ ('file', b'file-id')],
2795+ basis= [('', b'root-id'),
2796+ ('file', b'file-id')],
2797+ target=[('', b'target-root-id'),
2798+ ('file', b'root-id')])
2799 state = self.assertUpdate( # all different
2800- active=[('', 'active-root-id'),
2801- ('file', b'file-id')],
2802- basis= [('', 'root-id'),
2803- ('file', b'file-id')],
2804- target=[('', 'target-root-id'),
2805- ('file', 'root-id')])
2806+ active=[('', b'active-root-id'),
2807+ ('file', b'file-id')],
2808+ basis= [('', b'root-id'),
2809+ ('file', b'file-id')],
2810+ target=[('', b'target-root-id'),
2811+ ('file', b'root-id')])
2812
2813 def test_change_file_absent_in_active(self):
2814 state = self.assertUpdate(
2815
2816=== modified file 'python3.passing'
2817--- python3.passing 2018-07-01 10:40:19 +0000
2818+++ python3.passing 2018-07-01 11:20:52 +0000
2819@@ -374,9 +374,15 @@
2820 breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(RemoteBranchFormat-default)
2821 breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(RemoteBranchFormat-v2)
2822 breezy.plugins.upload.tests.test_upload.TestBranchUploadLocations.test_set_push_location(RemoteGitBranchFormat)
2823+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_file_in_dir(SFTPTransport,SFTPAbsoluteServer)
2824+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_file_in_dir(SFTPTransport,SFTPHomeDirServer)
2825+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_file_in_dir(SFTPTransport,SFTPSiblingAbsoluteServer)
2826 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_file(SFTPTransport,SFTPAbsoluteServer)
2827 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_file(SFTPTransport,SFTPHomeDirServer)
2828 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_file(SFTPTransport,SFTPSiblingAbsoluteServer)
2829+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_remote_dir_twice(SFTPTransport,SFTPAbsoluteServer)
2830+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_remote_dir_twice(SFTPTransport,SFTPHomeDirServer)
2831+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_remote_dir_twice(SFTPTransport,SFTPSiblingAbsoluteServer)
2832 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_symlink(SFTPTransport,SFTPAbsoluteServer)
2833 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_symlink(SFTPTransport,SFTPHomeDirServer)
2834 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_create_symlink(SFTPTransport,SFTPSiblingAbsoluteServer)
2835@@ -389,6 +395,9 @@
2836 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_file(SFTPTransport,SFTPAbsoluteServer)
2837 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_file(SFTPTransport,SFTPHomeDirServer)
2838 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_file(SFTPTransport,SFTPSiblingAbsoluteServer)
2839+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_nested_directory(SFTPTransport,SFTPAbsoluteServer)
2840+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_nested_directory(SFTPTransport,SFTPHomeDirServer)
2841+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_nested_directory(SFTPTransport,SFTPSiblingAbsoluteServer)
2842 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_regexp(SFTPTransport,SFTPAbsoluteServer)
2843 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_regexp(SFTPTransport,SFTPHomeDirServer)
2844 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_ignore_regexp(SFTPTransport,SFTPSiblingAbsoluteServer)
2845@@ -407,12 +416,21 @@
2846 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_auto(SFTPTransport,SFTPAbsoluteServer)
2847 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_auto(SFTPTransport,SFTPHomeDirServer)
2848 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_auto(SFTPTransport,SFTPSiblingAbsoluteServer)
2849+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_from_subdir(SFTPTransport,SFTPAbsoluteServer)
2850+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_from_subdir(SFTPTransport,SFTPHomeDirServer)
2851+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_from_subdir(SFTPTransport,SFTPSiblingAbsoluteServer)
2852 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_noauto(SFTPTransport,SFTPAbsoluteServer)
2853 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_noauto(SFTPTransport,SFTPHomeDirServer)
2854 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_noauto(SFTPTransport,SFTPSiblingAbsoluteServer)
2855+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_revid_path_in_dir(SFTPTransport,SFTPAbsoluteServer)
2856+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_revid_path_in_dir(SFTPTransport,SFTPHomeDirServer)
2857+breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_revid_path_in_dir(SFTPTransport,SFTPSiblingAbsoluteServer)
2858 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_revision(SFTPTransport,SFTPAbsoluteServer)
2859 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_revision(SFTPTransport,SFTPHomeDirServer)
2860 breezy.plugins.upload.tests.test_upload.TestFullUpload.test_upload_revision(SFTPTransport,SFTPSiblingAbsoluteServer)
2861+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_create_file_in_dir(SFTPTransport,SFTPAbsoluteServer)
2862+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_create_file_in_dir(SFTPTransport,SFTPHomeDirServer)
2863+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_create_file_in_dir(SFTPTransport,SFTPSiblingAbsoluteServer)
2864 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_create_file(SFTPTransport,SFTPAbsoluteServer)
2865 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_create_file(SFTPTransport,SFTPHomeDirServer)
2866 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_create_file(SFTPTransport,SFTPSiblingAbsoluteServer)
2867@@ -434,6 +452,9 @@
2868 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_file(SFTPTransport,SFTPAbsoluteServer)
2869 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_file(SFTPTransport,SFTPHomeDirServer)
2870 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_file(SFTPTransport,SFTPSiblingAbsoluteServer)
2871+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_nested_directory(SFTPTransport,SFTPAbsoluteServer)
2872+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_nested_directory(SFTPTransport,SFTPHomeDirServer)
2873+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_nested_directory(SFTPTransport,SFTPSiblingAbsoluteServer)
2874 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_regexp(SFTPTransport,SFTPAbsoluteServer)
2875 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_regexp(SFTPTransport,SFTPHomeDirServer)
2876 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_ignore_regexp(SFTPTransport,SFTPSiblingAbsoluteServer)
2877@@ -452,9 +473,15 @@
2878 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_for_the_first_time_do_a_full_upload(SFTPTransport,SFTPAbsoluteServer)
2879 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_for_the_first_time_do_a_full_upload(SFTPTransport,SFTPHomeDirServer)
2880 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_for_the_first_time_do_a_full_upload(SFTPTransport,SFTPSiblingAbsoluteServer)
2881+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_from_subdir(SFTPTransport,SFTPAbsoluteServer)
2882+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_from_subdir(SFTPTransport,SFTPHomeDirServer)
2883+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_from_subdir(SFTPTransport,SFTPSiblingAbsoluteServer)
2884 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_noauto(SFTPTransport,SFTPAbsoluteServer)
2885 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_noauto(SFTPTransport,SFTPHomeDirServer)
2886 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_noauto(SFTPTransport,SFTPSiblingAbsoluteServer)
2887+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_revid_path_in_dir(SFTPTransport,SFTPAbsoluteServer)
2888+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_revid_path_in_dir(SFTPTransport,SFTPHomeDirServer)
2889+breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_revid_path_in_dir(SFTPTransport,SFTPSiblingAbsoluteServer)
2890 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_revision(SFTPTransport,SFTPAbsoluteServer)
2891 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_revision(SFTPTransport,SFTPHomeDirServer)
2892 breezy.plugins.upload.tests.test_upload.TestIncrementalUpload.test_upload_revision(SFTPTransport,SFTPSiblingAbsoluteServer)
2893@@ -4888,7 +4915,9 @@
2894 breezy.tests.per_interrepository.test_interrepository.TestInterRepository.test_interrepository_get_returns_correct_optimiser(InterSameDataRepository,RepositoryFormatKnit3,RepositoryFormatKnit3)
2895 breezy.tests.per_interrepository.test_interrepository.TestInterRepository.test_interrepository_get_returns_correct_optimiser(InterToLocalGitRepository,RepositoryFormat2a,GitRepositoryFormat)
2896 breezy.tests.per_intertree.test_compare.TestCompare.test_abc_content_to_empty(InterDirStateTree(C))
2897+breezy.tests.per_intertree.test_compare.TestCompare.test_abc_content_to_empty(InterDirStateTree(PY))
2898 breezy.tests.per_intertree.test_compare.TestCompare.test_abc_content_to_empty(InterTree)
2899+breezy.tests.per_intertree.test_compare.TestCompare.test_abc_content_to_empty(InterTree(CHKInventory))
2900 breezy.tests.per_intertree.test_compare.TestCompare.test_abc_content_to_empty(InterTree(PreviewTree))
2901 breezy.tests.per_intertree.test_compare.TestCompare.test_compare_empty_trees(InterDirStateTree(C))
2902 breezy.tests.per_intertree.test_compare.TestCompare.test_compare_empty_trees(InterDirStateTree(PY))
2903@@ -4896,7 +4925,9 @@
2904 breezy.tests.per_intertree.test_compare.TestCompare.test_compare_empty_trees(InterTree(CHKInventory))
2905 breezy.tests.per_intertree.test_compare.TestCompare.test_compare_empty_trees(InterTree(PreviewTree))
2906 breezy.tests.per_intertree.test_compare.TestCompare.test_content_modification(InterDirStateTree(C))
2907+breezy.tests.per_intertree.test_compare.TestCompare.test_content_modification(InterDirStateTree(PY))
2908 breezy.tests.per_intertree.test_compare.TestCompare.test_content_modification(InterTree)
2909+breezy.tests.per_intertree.test_compare.TestCompare.test_content_modification(InterTree(CHKInventory))
2910 breezy.tests.per_intertree.test_compare.TestCompare.test_content_modification(InterTree(PreviewTree))
2911 breezy.tests.per_intertree.test_compare.TestCompare.test_dangling(InterDirStateTree(C))
2912 breezy.tests.per_intertree.test_compare.TestCompare.test_dangling(InterDirStateTree(PY))
2913@@ -4908,35 +4939,49 @@
2914 breezy.tests.per_intertree.test_compare.TestCompare.test_default_ignores_unversioned_files(InterTree(PreviewTree))
2915 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_and_c_only(InterDirStateTree(C))
2916 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_and_c_only(InterTree)
2917+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_and_c_only(InterTree(CHKInventory))
2918 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_and_c_only(InterTree(PreviewTree))
2919 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_only(InterDirStateTree(C))
2920+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_only(InterDirStateTree(PY))
2921 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_only(InterTree)
2922+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_only(InterTree(CHKInventory))
2923 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_a_only(InterTree(PreviewTree))
2924 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_b_only(InterDirStateTree(C))
2925+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_b_only(InterDirStateTree(PY))
2926 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_b_only(InterTree)
2927+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_b_only(InterTree(CHKInventory))
2928 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_b_only(InterTree(PreviewTree))
2929 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_c_only(InterDirStateTree(C))
2930+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_c_only(InterDirStateTree(PY))
2931 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_c_only(InterTree)
2932+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_c_only(InterTree(CHKInventory))
2933 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content_c_only(InterTree(PreviewTree))
2934 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content(InterDirStateTree(C))
2935+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content(InterDirStateTree(PY))
2936 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content(InterTree)
2937+breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content(InterTree(CHKInventory))
2938 breezy.tests.per_intertree.test_compare.TestCompare.test_empty_to_abc_content(InterTree(PreviewTree))
2939 breezy.tests.per_intertree.test_compare.TestCompare.test_extra_trees_finds_ids(InterDirStateTree(C))
2940 breezy.tests.per_intertree.test_compare.TestCompare.test_extra_trees_finds_ids(InterTree)
2941 breezy.tests.per_intertree.test_compare.TestCompare.test_extra_trees_finds_ids(InterTree(PreviewTree))
2942 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_meta_modification(InterDirStateTree(C))
2943+breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_meta_modification(InterDirStateTree(PY))
2944 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_meta_modification(InterTree)
2945+breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_meta_modification(InterTree(CHKInventory))
2946 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_meta_modification(InterTree(PreviewTree))
2947 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_modification(InterTree)
2948 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename_and_modification(InterTree(PreviewTree))
2949 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename(InterTree)
2950 breezy.tests.per_intertree.test_compare.TestCompare.test_file_rename(InterTree(PreviewTree))
2951 breezy.tests.per_intertree.test_compare.TestCompare.test_meta_modification(InterDirStateTree(C))
2952+breezy.tests.per_intertree.test_compare.TestCompare.test_meta_modification(InterDirStateTree(PY))
2953 breezy.tests.per_intertree.test_compare.TestCompare.test_meta_modification(InterTree)
2954+breezy.tests.per_intertree.test_compare.TestCompare.test_meta_modification(InterTree(CHKInventory))
2955 breezy.tests.per_intertree.test_compare.TestCompare.test_meta_modification(InterTree(PreviewTree))
2956 breezy.tests.per_intertree.test_compare.TestCompare.test_require_versioned(InterDirStateTree(C))
2957 breezy.tests.per_intertree.test_compare.TestCompare.test_require_versioned(InterDirStateTree(PY))
2958 breezy.tests.per_intertree.test_compare.TestCompare.test_require_versioned(InterTree)
2959+breezy.tests.per_intertree.test_compare.TestCompare.test_require_versioned(InterTree(CHKInventory))
2960 breezy.tests.per_intertree.test_compare.TestCompare.test_require_versioned(InterTree(PreviewTree))
2961 breezy.tests.per_intertree.test_compare.TestCompare.test_unchanged_with_renames_and_modifications(InterTree)
2962 breezy.tests.per_intertree.test_compare.TestCompare.test_unchanged_with_renames_and_modifications(InterTree(PreviewTree))
2963@@ -4947,12 +4992,15 @@
2964 breezy.tests.per_intertree.test_compare.TestCompare.test_unversioned_paths_in_tree(InterTree(PreviewTree))
2965 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_a_only(InterDirStateTree(C))
2966 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_a_only(InterTree)
2967+breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_a_only(InterTree(CHKInventory))
2968 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_a_only(InterTree(PreviewTree))
2969 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_b_only(InterDirStateTree(C))
2970 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_b_only(InterTree)
2971+breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_b_only(InterTree(CHKInventory))
2972 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty_b_only(InterTree(PreviewTree))
2973 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty(InterDirStateTree(C))
2974 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty(InterTree)
2975+breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty(InterTree(CHKInventory))
2976 breezy.tests.per_intertree.test_compare.TestIterChanges.test_abc_content_to_empty(InterTree(PreviewTree))
2977 breezy.tests.per_intertree.test_compare.TestIterChanges.test_compare_empty_trees(InterDirStateTree(C))
2978 breezy.tests.per_intertree.test_compare.TestIterChanges.test_compare_empty_trees(InterDirStateTree(PY))
2979@@ -4965,7 +5013,9 @@
2980 breezy.tests.per_intertree.test_compare.TestIterChanges.test_compare_subtrees(InterTree(CHKInventory))
2981 breezy.tests.per_intertree.test_compare.TestIterChanges.test_compare_subtrees(InterTree(PreviewTree))
2982 breezy.tests.per_intertree.test_compare.TestIterChanges.test_content_modification(InterDirStateTree(C))
2983+breezy.tests.per_intertree.test_compare.TestIterChanges.test_content_modification(InterDirStateTree(PY))
2984 breezy.tests.per_intertree.test_compare.TestIterChanges.test_content_modification(InterTree)
2985+breezy.tests.per_intertree.test_compare.TestIterChanges.test_content_modification(InterTree(CHKInventory))
2986 breezy.tests.per_intertree.test_compare.TestIterChanges.test_content_modification(InterTree(PreviewTree))
2987 breezy.tests.per_intertree.test_compare.TestIterChanges.test_default_ignores_unversioned_files(InterDirStateTree(C))
2988 breezy.tests.per_intertree.test_compare.TestIterChanges.test_default_ignores_unversioned_files(InterTree)
2989@@ -4983,13 +5033,16 @@
2990 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_specific_files(InterDirStateTree(C))
2991 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_specific_files(InterDirStateTree(PY))
2992 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_specific_files(InterTree)
2993+breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_specific_files(InterTree(CHKInventory))
2994 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_specific_files(InterTree(PreviewTree))
2995 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content_a_and_c_only(InterDirStateTree(C))
2996 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content_a_only(InterDirStateTree(C))
2997 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content_a_only(InterTree)
2998+breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content_a_only(InterTree(CHKInventory))
2999 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content_a_only(InterTree(PreviewTree))
3000 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content(InterDirStateTree(C))
3001 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content(InterTree)
3002+breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content(InterTree(CHKInventory))
3003 breezy.tests.per_intertree.test_compare.TestIterChanges.test_empty_to_abc_content(InterTree(PreviewTree))
3004 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_becomes_unversionable_bug_438569(InterDirStateTree(C))
3005 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_becomes_unversionable_bug_438569(InterDirStateTree(PY))
3006@@ -4997,22 +5050,29 @@
3007 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_becomes_unversionable_bug_438569(InterTree(CHKInventory))
3008 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_becomes_unversionable_bug_438569(InterTree(PreviewTree))
3009 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_meta_modification(InterDirStateTree(C))
3010+breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_meta_modification(InterDirStateTree(PY))
3011 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_meta_modification(InterTree)
3012+breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_meta_modification(InterTree(CHKInventory))
3013 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_meta_modification(InterTree(PreviewTree))
3014 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_modification(InterTree)
3015 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename_and_modification(InterTree(PreviewTree))
3016 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename(InterTree)
3017 breezy.tests.per_intertree.test_compare.TestIterChanges.test_file_rename(InterTree(PreviewTree))
3018 breezy.tests.per_intertree.test_compare.TestIterChanges.test_meta_modification(InterDirStateTree(C))
3019+breezy.tests.per_intertree.test_compare.TestIterChanges.test_meta_modification(InterDirStateTree(PY))
3020 breezy.tests.per_intertree.test_compare.TestIterChanges.test_meta_modification(InterTree)
3021+breezy.tests.per_intertree.test_compare.TestIterChanges.test_meta_modification(InterTree(CHKInventory))
3022 breezy.tests.per_intertree.test_compare.TestIterChanges.test_meta_modification(InterTree(PreviewTree))
3023 breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_and_renamed(InterDirStateTree(C))
3024 breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_and_renamed(InterTree(CHKInventory))
3025 breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_in_target(InterDirStateTree(C))
3026+breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_in_target(InterDirStateTree(PY))
3027 breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_in_target(InterTree)
3028+breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_in_target(InterTree(CHKInventory))
3029 breezy.tests.per_intertree.test_compare.TestIterChanges.test_missing_in_target(InterTree(PreviewTree))
3030 breezy.tests.per_intertree.test_compare.TestIterChanges.test_no_specific_files(InterDirStateTree(C))
3031 breezy.tests.per_intertree.test_compare.TestIterChanges.test_no_specific_files(InterTree)
3032+breezy.tests.per_intertree.test_compare.TestIterChanges.test_no_specific_files(InterTree(CHKInventory))
3033 breezy.tests.per_intertree.test_compare.TestIterChanges.test_no_specific_files(InterTree(PreviewTree))
3034 breezy.tests.per_intertree.test_compare.TestIterChanges.test_only_in_source_and_missing(InterDirStateTree(C))
3035 breezy.tests.per_intertree.test_compare.TestIterChanges.test_only_in_source_and_missing(InterDirStateTree(PY))
3036@@ -5020,6 +5080,7 @@
3037 breezy.tests.per_intertree.test_compare.TestIterChanges.test_only_in_target_and_missing(InterDirStateTree(C))
3038 breezy.tests.per_intertree.test_compare.TestIterChanges.test_only_in_target_and_missing(InterTree(CHKInventory))
3039 breezy.tests.per_intertree.test_compare.TestIterChanges.test_only_in_target_missing_subtree_specific_bug_367632(InterDirStateTree(C))
3040+breezy.tests.per_intertree.test_compare.TestIterChanges.test_only_in_target_missing_subtree_specific_bug_367632(InterTree(CHKInventory))
3041 breezy.tests.per_intertree.test_compare.TestIterChanges.test_renamed_and_added(InterDirStateTree(C))
3042 breezy.tests.per_intertree.test_compare.TestIterChanges.test_renamed_and_added(InterTree)
3043 breezy.tests.per_intertree.test_compare.TestIterChanges.test_renamed_and_added(InterTree(CHKInventory))
3044@@ -5032,35 +5093,47 @@
3045 breezy.tests.per_intertree.test_compare.TestIterChanges.test_rename_over_deleted(InterTree(PreviewTree))
3046 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents(InterDirStateTree(C))
3047 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents(InterTree)
3048+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents(InterTree(CHKInventory))
3049 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents(InterTree(PreviewTree))
3050 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents_root_changes(InterDirStateTree(C))
3051 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents_root_changes(InterTree)
3052+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents_root_changes(InterTree(CHKInventory))
3053 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_content_modification_grabs_parents_root_changes(InterTree(PreviewTree))
3054 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_becomes_file(InterDirStateTree(C))
3055 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_becomes_file(InterTree)
3056+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_becomes_file(InterTree(CHKInventory))
3057 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_becomes_file(InterTree(PreviewTree))
3058 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_collides_with_unselected_new(InterDirStateTree(C))
3059 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_collides_with_unselected_new(InterTree)
3060+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_collides_with_unselected_new(InterTree(CHKInventory))
3061 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_collides_with_unselected_new(InterTree(PreviewTree))
3062 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_dir_stops_being_dir(InterDirStateTree(C))
3063 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_dir_stops_being_dir(InterTree)
3064+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_dir_stops_being_dir(InterTree(CHKInventory))
3065 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_child_dir_stops_being_dir(InterTree(PreviewTree))
3066 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_same_path_new_parent(InterDirStateTree(C))
3067 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_same_path_new_parent(InterTree)
3068+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_same_path_new_parent(InterTree(CHKInventory))
3069 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_old_parent_same_path_new_parent(InterTree(PreviewTree))
3070 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_with_rename_under_dir_under_new_dir_reports_new_dir(InterTree)
3071 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_with_rename_under_dir_under_new_dir_reports_new_dir(InterTree(PreviewTree))
3072 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_with_rename_under_new_dir_reports_new_dir(InterDirStateTree(C))
3073 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_with_rename_under_new_dir_reports_new_dir(InterTree)
3074+breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_with_rename_under_new_dir_reports_new_dir(InterTree(CHKInventory))
3075 breezy.tests.per_intertree.test_compare.TestIterChanges.test_specific_with_rename_under_new_dir_reports_new_dir(InterTree(PreviewTree))
3076 breezy.tests.per_intertree.test_compare.TestIterChanges.test_trees_with_deleted_dir(InterDirStateTree(C))
3077 breezy.tests.per_intertree.test_compare.TestIterChanges.test_trees_with_deleted_dir(InterTree)
3078+breezy.tests.per_intertree.test_compare.TestIterChanges.test_trees_with_deleted_dir(InterTree(CHKInventory))
3079 breezy.tests.per_intertree.test_compare.TestIterChanges.test_trees_with_deleted_dir(InterTree(PreviewTree))
3080 breezy.tests.per_intertree.test_compare.TestIterChanges.test_trees_with_special_names(InterDirStateTree(C))
3081+breezy.tests.per_intertree.test_compare.TestIterChanges.test_tree_with_special_names(InterDirStateTree(C))
3082 breezy.tests.per_intertree.test_compare.TestIterChanges.test_tree_with_special_names(InterTree)
3083+breezy.tests.per_intertree.test_compare.TestIterChanges.test_tree_with_special_names(InterTree(CHKInventory))
3084 breezy.tests.per_intertree.test_compare.TestIterChanges.test_tree_with_special_names(InterTree(PreviewTree))
3085 breezy.tests.per_intertree.test_compare.TestIterChanges.test_unknown_empty_dir(InterDirStateTree(C))
3086+breezy.tests.per_intertree.test_compare.TestIterChanges.test_unknown_empty_dir(InterDirStateTree(PY))
3087 breezy.tests.per_intertree.test_compare.TestIterChanges.test_unknown_empty_dir(InterTree)
3088+breezy.tests.per_intertree.test_compare.TestIterChanges.test_unknown_empty_dir(InterTree(CHKInventory))
3089 breezy.tests.per_intertree.test_compare.TestIterChanges.test_unknown_empty_dir(InterTree(PreviewTree))
3090 breezy.tests.per_intertree.test_compare.TestIterChanges.test_unversioned_paths_in_target_matching_source_old_names(InterDirStateTree(C))
3091 breezy.tests.per_intertree.test_compare.TestIterChanges.test_unversioned_paths_in_target_matching_source_old_names(InterTree(CHKInventory))
3092@@ -5829,9 +5902,12 @@
3093 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_dir_link(RepositoryFormatKnitPack6RichRoot)
3094 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_dir_link(RepositoryFormatPackDevelopment2Subtree)
3095 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(GitRepositoryFormat)
3096+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(RepositoryFormat2a)
3097+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(RepositoryFormat2aSubtree)
3098 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(RepositoryFormat4)
3099 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(RepositoryFormat5)
3100 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(RepositoryFormat6)
3101+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_dir(RepositoryFormat7)
3102 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_link(RepositoryFormat2a)
3103 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_link(RepositoryFormat2aSubtree)
3104 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_link(RepositoryFormat4)
3105@@ -5848,9 +5924,12 @@
3106 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_link(RepositoryFormatKnitPack6RichRoot)
3107 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_file_link(RepositoryFormatPackDevelopment2Subtree)
3108 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(GitRepositoryFormat)
3109+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(RepositoryFormat2a)
3110+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(RepositoryFormat2aSubtree)
3111 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(RepositoryFormat4)
3112 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(RepositoryFormat5)
3113 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(RepositoryFormat6)
3114+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_dir(RepositoryFormat7)
3115 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_file(RepositoryFormat2a)
3116 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_file(RepositoryFormat2aSubtree)
3117 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_link_file(RepositoryFormat4)
3118@@ -5887,6 +5966,8 @@
3119 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_rev_after_content_unicode_link_changes(RepositoryFormat5)
3120 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_rev_after_content_unicode_link_changes(RepositoryFormat6)
3121 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_rev_after_content_unicode_link_changes(RepositoryFormat7)
3122+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_revision_after_commit_dir_contents_unchanged(RepositoryFormat2a)
3123+breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_revision_after_commit_dir_contents_unchanged(RepositoryFormat2aSubtree)
3124 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_rev_after_content_unicode_link_changes(RepositoryFormatKnitPack1)
3125 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_rev_after_content_unicode_link_changes(RepositoryFormatKnitPack3)
3126 breezy.tests.per_repository.test_commit_builder.TestCommitBuilder.test_last_modified_rev_after_content_unicode_link_changes(RepositoryFormatKnitPack4)
3127@@ -6949,16 +7030,24 @@
3128 breezy.tests.per_repository.test_refresh_data.TestRefreshData.test_refresh_data_write_locked(RepositoryFormatKnitPack6)
3129 breezy.tests.per_repository.test_refresh_data.TestRefreshData.test_refresh_data_write_locked(RepositoryFormatKnitPack6RichRoot)
3130 breezy.tests.per_repository.test_refresh_data.TestRefreshData.test_refresh_data_write_locked(RepositoryFormatPackDevelopment2Subtree)
3131+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_directory(RepositoryFormat2a)
3132+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_directory(RepositoryFormat2aSubtree)
3133 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_directory(RepositoryFormat4)
3134 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_directory(RepositoryFormat5)
3135 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_directory(RepositoryFormat6)
3136+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_file_in_directory(RepositoryFormat2a)
3137+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_file_in_directory(RepositoryFormat2aSubtree)
3138 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_file_in_directory(RepositoryFormat4)
3139 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_file_in_directory(RepositoryFormat5)
3140 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_file_in_directory(RepositoryFormat6)
3141 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_file_in_unchanged_directory(RepositoryFormat4)
3142+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_multiple_files(RepositoryFormat2a)
3143+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_multiple_files(RepositoryFormat2aSubtree)
3144 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_multiple_files(RepositoryFormat4)
3145 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_multiple_files(RepositoryFormat5)
3146 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_multiple_files(RepositoryFormat6)
3147+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_unrelated(RepositoryFormat2a)
3148+breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_unrelated(RepositoryFormat2aSubtree)
3149 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_unrelated(RepositoryFormat4)
3150 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_unrelated(RepositoryFormat5)
3151 breezy.tests.per_repository.test_repository.TestDeltaRevisionFiltered.test_unrelated(RepositoryFormat6)
3152@@ -11446,29 +11535,68 @@
3153 breezy.tests.per_tree.test_get_symlink_target.TestGetSymlinkTarget.test_get_unicode_symlink_target(WorkingTreeFormat5)
3154 breezy.tests.per_tree.test_get_symlink_target.TestGetSymlinkTarget.test_get_unicode_symlink_target(WorkingTreeFormat6)
3155 breezy.tests.per_tree.test_get_symlink_target.TestGetSymlinkTarget.test_get_unicode_symlink_target(WorkingTreeFormat6,remote)
3156+breezy.tests.per_tree.test_ids.IdTests.test_id2path(DirStateRevisionTree,WT4)
3157+breezy.tests.per_tree.test_ids.IdTests.test_id2path(DirStateRevisionTree,WT5)
3158 breezy.tests.per_tree.test_ids.IdTests.test_id2path(GitWorkingTreeFormat)
3159+breezy.tests.per_tree.test_ids.IdTests.test_id2path(PreviewTree)
3160+breezy.tests.per_tree.test_ids.IdTests.test_id2path(PreviewTreePost)
3161+breezy.tests.per_tree.test_ids.IdTests.test_id2path(RevisionTree)
3162 breezy.tests.per_tree.test_ids.IdTests.test_id2path(WorkingTreeFormat2)
3163 breezy.tests.per_tree.test_ids.IdTests.test_id2path(WorkingTreeFormat3)
3164+breezy.tests.per_tree.test_ids.IdTests.test_id2path(WorkingTreeFormat4)
3165+breezy.tests.per_tree.test_ids.IdTests.test_id2path(WorkingTreeFormat5)
3166+breezy.tests.per_tree.test_ids.IdTests.test_id2path(WorkingTreeFormat6)
3167+breezy.tests.per_tree.test_ids.IdTests.test_path2id(DirStateRevisionTree,WT4)
3168+breezy.tests.per_tree.test_ids.IdTests.test_path2id(DirStateRevisionTree,WT5)
3169 breezy.tests.per_tree.test_ids.IdTests.test_path2id(GitWorkingTreeFormat)
3170+breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(DirStateRevisionTree,WT4)
3171+breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(DirStateRevisionTree,WT5)
3172 breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(GitWorkingTreeFormat)
3173+breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(RevisionTree)
3174 breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(WorkingTreeFormat2)
3175 breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(WorkingTreeFormat3)
3176+breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(WorkingTreeFormat4)
3177+breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(WorkingTreeFormat5)
3178+breezy.tests.per_tree.test_ids.IdTests.test_path2id_list(WorkingTreeFormat6)
3179+breezy.tests.per_tree.test_ids.IdTests.test_path2id(RevisionTree)
3180 breezy.tests.per_tree.test_ids.IdTests.test_path2id(WorkingTreeFormat2)
3181 breezy.tests.per_tree.test_ids.IdTests.test_path2id(WorkingTreeFormat3)
3182+breezy.tests.per_tree.test_ids.IdTests.test_path2id(WorkingTreeFormat4)
3183+breezy.tests.per_tree.test_ids.IdTests.test_path2id(WorkingTreeFormat5)
3184+breezy.tests.per_tree.test_ids.IdTests.test_path2id(WorkingTreeFormat6)
3185 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_invalid_child(WorkingTreeFormat2)
3186 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_invalid_child(WorkingTreeFormat3)
3187 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_before_commit(WorkingTreeFormat2)
3188 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_before_commit(WorkingTreeFormat3)
3189 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_dir(WorkingTreeFormat2)
3190 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_dir(WorkingTreeFormat3)
3191+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(DirStateRevisionTree,WT4)
3192+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(DirStateRevisionTree,WT5)
3193+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(PreviewTree)
3194+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(PreviewTreePost)
3195+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(RevisionTree)
3196 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(WorkingTreeFormat2)
3197 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(WorkingTreeFormat3)
3198+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(WorkingTreeFormat4)
3199+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(WorkingTreeFormat5)
3200+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_invalid_all(WorkingTreeFormat6)
3201+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(DirStateRevisionTree,WT4)
3202+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(DirStateRevisionTree,WT5)
3203+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(PreviewTree)
3204+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(PreviewTreePost)
3205+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(RevisionTree)
3206 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(WorkingTreeFormat2)
3207 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(WorkingTreeFormat3)
3208+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(WorkingTreeFormat4)
3209+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(WorkingTreeFormat5)
3210+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path_root(WorkingTreeFormat6)
3211 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path(WorkingTreeFormat2)
3212 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_path(WorkingTreeFormat3)
3213+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(DirStateRevisionTree,WT4)
3214+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(DirStateRevisionTree,WT5)
3215 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(PreviewTree)
3216 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(PreviewTreePost)
3217+breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(RevisionTree)
3218 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(WorkingTreeFormat2)
3219 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(WorkingTreeFormat3)
3220 breezy.tests.per_tree.test_inv.TestInventory.test_canonical_tree_name_mismatch(WorkingTreeFormat4)
3221@@ -11485,6 +11613,7 @@
3222 breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_forget_old(WorkingTreeFormat4)
3223 breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_forget_old(WorkingTreeFormat5)
3224 breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_forget_old(WorkingTreeFormat6)
3225+breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_recursive(RevisionTree)
3226 breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_recursive(WorkingTreeFormat2)
3227 breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_recursive(WorkingTreeFormat3)
3228 breezy.tests.per_tree.test_inv.TestInventory.test_paths2ids_recursive(WorkingTreeFormat4)
3229@@ -11503,16 +11632,22 @@
3230 breezy.tests.per_tree.test_iter_search_rules.TestIterSearchRules.test_iter_search_rules_no_tree(WorkingTreeFormat5)
3231 breezy.tests.per_tree.test_iter_search_rules.TestIterSearchRules.test_iter_search_rules_no_tree(WorkingTreeFormat6)
3232 breezy.tests.per_tree.test_iter_search_rules.TestIterSearchRules.test_iter_search_rules_no_tree(WorkingTreeFormat6,remote)
3233+breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_from_dir_no_recurse(RevisionTree)
3234 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_from_dir_no_recurse(WorkingTreeFormat2)
3235 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_from_dir_no_recurse(WorkingTreeFormat3)
3236+breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_from_dir(RevisionTree)
3237 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_from_dir(WorkingTreeFormat2)
3238 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_from_dir(WorkingTreeFormat3)
3239+breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_no_root_no_recurse(RevisionTree)
3240 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_no_root_no_recurse(WorkingTreeFormat2)
3241 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_no_root_no_recurse(WorkingTreeFormat3)
3242+breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_no_root(RevisionTree)
3243 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_no_root(WorkingTreeFormat2)
3244 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_no_root(WorkingTreeFormat3)
3245+breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_with_root_no_recurse(RevisionTree)
3246 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_with_root_no_recurse(WorkingTreeFormat2)
3247 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_with_root_no_recurse(WorkingTreeFormat3)
3248+breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_with_root(RevisionTree)
3249 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_with_root(WorkingTreeFormat2)
3250 breezy.tests.per_tree.test_list_files.TestListFiles.test_list_files_with_root(WorkingTreeFormat3)
3251 breezy.tests.per_tree.test_locking.TestLocking.test_lock_read(DirStateRevisionTree,WT4)
3252@@ -11609,9 +11744,11 @@
3253 breezy.tests.per_tree.test_revision_tree.TestRevisionTree.test_get_random_tree_raises(WorkingTreeFormat6)
3254 breezy.tests.per_tree.test_revision_tree.TestRevisionTree.test_get_random_tree_raises(WorkingTreeFormat6,remote)
3255 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_2_no_parents(PreviewTree)
3256+breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_2_no_parents(RevisionTree)
3257 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_2_no_parents(WorkingTreeFormat2)
3258 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_2_no_parents(WorkingTreeFormat3)
3259 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_3_no_parents(PreviewTree)
3260+breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_3_no_parents(RevisionTree)
3261 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_3_no_parents(WorkingTreeFormat2)
3262 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_3_no_parents(WorkingTreeFormat3)
3263 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_4_no_parents(WorkingTreeFormat2)
3264@@ -11623,6 +11760,7 @@
3265 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_6_no_parents(WorkingTreeFormat2)
3266 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_content_6_no_parents(WorkingTreeFormat3)
3267 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_no_parents(PreviewTree)
3268+breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_no_parents(RevisionTree)
3269 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_no_parents(WorkingTreeFormat2)
3270 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_abc_tree_no_parents(WorkingTreeFormat3)
3271 breezy.tests.per_tree.test_test_trees.TestTreeShapes.test_empty_tree_no_parents(DirStateRevisionTree,WT4)
3272@@ -11666,13 +11804,20 @@
3273 breezy.tests.per_tree.test_tree.TestExtras.test_extras(RevisionTree)
3274 breezy.tests.per_tree.test_tree.TestExtras.test_extras(WorkingTreeFormat2)
3275 breezy.tests.per_tree.test_tree.TestExtras.test_extras(WorkingTreeFormat3)
3276+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(DirStateRevisionTree,WT4)
3277+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(DirStateRevisionTree,WT5)
3278 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(PreviewTree)
3279+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(RevisionTree)
3280 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(WorkingTreeFormat2)
3281 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(WorkingTreeFormat3)
3282 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(WorkingTreeFormat4)
3283 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(WorkingTreeFormat5)
3284 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(WorkingTreeFormat6)
3285 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_context_manager(WorkingTreeFormat6,remote)
3286+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(DirStateRevisionTree,WT4)
3287+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(DirStateRevisionTree,WT5)
3288+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(DirStateRevisionTree,WT4)
3289+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(DirStateRevisionTree,WT5)
3290 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines_multi_line_breaks(DirStateRevisionTree,WT4)
3291 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines_multi_line_breaks(DirStateRevisionTree,WT5)
3292 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines_multi_line_breaks(PreviewTree)
3293@@ -11684,6 +11829,7 @@
3294 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines_multi_line_breaks(WorkingTreeFormat6)
3295 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines_multi_line_breaks(WorkingTreeFormat6,remote)
3296 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(PreviewTree)
3297+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(RevisionTree)
3298 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(WorkingTreeFormat2)
3299 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(WorkingTreeFormat3)
3300 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(WorkingTreeFormat4)
3301@@ -11691,7 +11837,11 @@
3302 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(WorkingTreeFormat6)
3303 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_lines(WorkingTreeFormat6,remote)
3304 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(PreviewTree)
3305+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(RevisionTree)
3306+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(DirStateRevisionTree,WT4)
3307+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(DirStateRevisionTree,WT5)
3308 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(PreviewTree)
3309+breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(RevisionTree)
3310 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(WorkingTreeFormat2)
3311 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(WorkingTreeFormat3)
3312 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file_text(WorkingTreeFormat4)
3313@@ -11704,12 +11854,16 @@
3314 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(WorkingTreeFormat5)
3315 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(WorkingTreeFormat6)
3316 breezy.tests.per_tree.test_tree.TestFileContent.test_get_file(WorkingTreeFormat6,remote)
3317+breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(RevisionTree)
3318 breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(WorkingTreeFormat2)
3319 breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(WorkingTreeFormat3)
3320 breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(WorkingTreeFormat4)
3321 breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(WorkingTreeFormat5)
3322 breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(WorkingTreeFormat6)
3323 breezy.tests.per_tree.test_tree.TestFileIds.test_all_file_ids(WorkingTreeFormat6,remote)
3324+breezy.tests.per_tree.test_tree.TestFileIds.test_id2path(DirStateRevisionTree,WT4)
3325+breezy.tests.per_tree.test_tree.TestFileIds.test_id2path(DirStateRevisionTree,WT5)
3326+breezy.tests.per_tree.test_tree.TestFileIds.test_id2path(RevisionTree)
3327 breezy.tests.per_tree.test_tree.TestFileIds.test_id2path(WorkingTreeFormat2)
3328 breezy.tests.per_tree.test_tree.TestFileIds.test_id2path(WorkingTreeFormat3)
3329 breezy.tests.per_tree.test_tree.TestFileIds.test_id2path(WorkingTreeFormat4)
3330@@ -11748,8 +11902,10 @@
3331 breezy.tests.per_tree.test_tree.TestIterChildEntries.test_does_not_exist(WorkingTreeFormat5)
3332 breezy.tests.per_tree.test_tree.TestIterChildEntries.test_does_not_exist(WorkingTreeFormat6)
3333 breezy.tests.per_tree.test_tree.TestIterChildEntries.test_does_not_exist(WorkingTreeFormat6,remote)
3334+breezy.tests.per_tree.test_tree.TestIterChildEntries.test_iteration_order(RevisionTree)
3335 breezy.tests.per_tree.test_tree.TestIterChildEntries.test_iteration_order(WorkingTreeFormat2)
3336 breezy.tests.per_tree.test_tree.TestIterChildEntries.test_iteration_order(WorkingTreeFormat3)
3337+breezy.tests.per_tree.test_tree.TestIterEntriesByDir.test_iteration_order(RevisionTree)
3338 breezy.tests.per_tree.test_tree.TestIterEntriesByDir.test_iteration_order(WorkingTreeFormat2)
3339 breezy.tests.per_tree.test_tree.TestIterEntriesByDir.test_iteration_order(WorkingTreeFormat3)
3340 breezy.tests.per_tree.test_tree.TestPlanFileMerge.test_plan_file_merge(RevisionTree)
3341@@ -11794,6 +11950,9 @@
3342 breezy.tests.per_tree.test_tree.TestReference.test_iter_references(WorkingTreeFormat5)
3343 breezy.tests.per_tree.test_tree.TestReference.test_iter_references(WorkingTreeFormat6)
3344 breezy.tests.per_tree.test_tree.TestReference.test_iter_references(WorkingTreeFormat6,remote)
3345+breezy.tests.per_tree.test_tree.TestStoredKind.test_stored_kind(DirStateRevisionTree,WT4)
3346+breezy.tests.per_tree.test_tree.TestStoredKind.test_stored_kind(DirStateRevisionTree,WT5)
3347+breezy.tests.per_tree.test_tree.TestStoredKind.test_stored_kind(RevisionTree)
3348 breezy.tests.per_tree.test_tree.TestStoredKind.test_stored_kind(WorkingTreeFormat2)
3349 breezy.tests.per_tree.test_tree.TestStoredKind.test_stored_kind(WorkingTreeFormat3)
3350 breezy.tests.per_tree.test_tree.TestSupportsRenameTracking.test_supports_rename_tracking(DirStateRevisionTree,WT4)
3351@@ -12382,8 +12541,14 @@
3352 breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis_with_file_ids(GitWorkingTreeFormat)
3353 breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis_with_file_ids(WorkingTreeFormat2)
3354 breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis_with_file_ids(WorkingTreeFormat3)
3355+breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis_with_file_ids(WorkingTreeFormat4)
3356+breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis_with_file_ids(WorkingTreeFormat5)
3357+breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis_with_file_ids(WorkingTreeFormat6)
3358 breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis(WorkingTreeFormat2)
3359 breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis(WorkingTreeFormat3)
3360+breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis(WorkingTreeFormat4)
3361+breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis(WorkingTreeFormat5)
3362+breezy.tests.per_workingtree.test_add.TestAdd.test_add_present_in_basis(WorkingTreeFormat6)
3363 breezy.tests.per_workingtree.test_add.TestAdd.test_add_previously_added_with_file_id(GitWorkingTreeFormat)
3364 breezy.tests.per_workingtree.test_add.TestAdd.test_add_previously_added_with_file_id(WorkingTreeFormat2)
3365 breezy.tests.per_workingtree.test_add.TestAdd.test_add_previously_added_with_file_id(WorkingTreeFormat3)
3366@@ -12454,8 +12619,14 @@
3367 breezy.tests.per_workingtree.test_break_lock.TestBreakLock.test_unlocked(WorkingTreeFormat6,remote)
3368 breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown_specific_file(WorkingTreeFormat2)
3369 breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown_specific_file(WorkingTreeFormat3)
3370+breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown_specific_file(WorkingTreeFormat4)
3371+breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown_specific_file(WorkingTreeFormat5)
3372+breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown_specific_file(WorkingTreeFormat6)
3373 breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown(WorkingTreeFormat2)
3374 breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown(WorkingTreeFormat3)
3375+breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown(WorkingTreeFormat4)
3376+breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown(WorkingTreeFormat5)
3377+breezy.tests.per_workingtree.test_changes_from.TestChangesFrom.test_unknown(WorkingTreeFormat6)
3378 breezy.tests.per_workingtree.test_check_state.TestCheckState.test_check_broken_dirstate(GitWorkingTreeFormat)
3379 breezy.tests.per_workingtree.test_check_state.TestCheckState.test_check_broken_dirstate(WorkingTreeFormat2)
3380 breezy.tests.per_workingtree.test_check_state.TestCheckState.test_check_broken_dirstate(WorkingTreeFormat3)
3381@@ -12501,6 +12672,9 @@
3382 breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_commit_progress_shows_pre_hook_names(WorkingTreeFormat6)
3383 breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_commit_progress_steps(WorkingTreeFormat2)
3384 breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_commit_progress_steps(WorkingTreeFormat3)
3385+breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_commit_progress_steps(WorkingTreeFormat4)
3386+breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_commit_progress_steps(WorkingTreeFormat5)
3387+breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_commit_progress_steps(WorkingTreeFormat6)
3388 breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_post_commit_hook(WorkingTreeFormat2)
3389 breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_post_commit_hook(WorkingTreeFormat3)
3390 breezy.tests.per_workingtree.test_commit.TestCommitProgress.test_post_commit_hook(WorkingTreeFormat4)
3391@@ -12521,8 +12695,14 @@
3392 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_aborted_does_not_apply_automatic_changes_bug_282402(WorkingTreeFormat6,remote)
3393 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_and_files_updates_workingtree(WorkingTreeFormat2)
3394 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_and_files_updates_workingtree(WorkingTreeFormat3)
3395+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_and_files_updates_workingtree(WorkingTreeFormat4)
3396+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_and_files_updates_workingtree(WorkingTreeFormat5)
3397+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_and_files_updates_workingtree(WorkingTreeFormat6)
3398 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_with_removed(WorkingTreeFormat2)
3399 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_with_removed(WorkingTreeFormat3)
3400+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_with_removed(WorkingTreeFormat4)
3401+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_with_removed(WorkingTreeFormat5)
3402+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_deleted_subtree_with_removed(WorkingTreeFormat6)
3403 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_exclude_changed_is_pointless(WorkingTreeFormat2)
3404 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_exclude_changed_is_pointless(WorkingTreeFormat3)
3405 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_exclude_changed_is_pointless(WorkingTreeFormat4)
3406@@ -12539,6 +12719,9 @@
3407 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_pending_merge_fails(WorkingTreeFormat6)
3408 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_subtree_of_selected(WorkingTreeFormat2)
3409 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_subtree_of_selected(WorkingTreeFormat3)
3410+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_subtree_of_selected(WorkingTreeFormat4)
3411+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_subtree_of_selected(WorkingTreeFormat5)
3412+breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_exclude_subtree_of_selected(WorkingTreeFormat6)
3413 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_local_unbound(GitWorkingTreeFormat)
3414 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_local_unbound(WorkingTreeFormat2)
3415 breezy.tests.per_workingtree.test_commit.TestCommit.test_commit_local_unbound(WorkingTreeFormat3)
3416@@ -12834,6 +13017,10 @@
3417 breezy.tests.per_workingtree.test_executable.TestExecutable.test_commit_with_exec_from_basis(WorkingTreeFormat6)
3418 breezy.tests.per_workingtree.test_executable.TestExecutable.test_use_exec_from_basis(WorkingTreeFormat2)
3419 breezy.tests.per_workingtree.test_executable.TestExecutable.test_use_exec_from_basis(WorkingTreeFormat3)
3420+breezy.tests.per_workingtree.test_executable.TestExecutable.test_use_exec_from_basis(WorkingTreeFormat4)
3421+breezy.tests.per_workingtree.test_executable.TestExecutable.test_use_exec_from_basis(WorkingTreeFormat5)
3422+breezy.tests.per_workingtree.test_executable.TestExecutable.test_use_exec_from_basis(WorkingTreeFormat6)
3423+breezy.tests.per_workingtree.test_executable.TestExecutable.test_use_exec_from_basis(WorkingTreeFormat6,remote)
3424 breezy.tests.per_workingtree.test_flush.TestFlush.test_flush_fresh_tree(GitWorkingTreeFormat)
3425 breezy.tests.per_workingtree.test_flush.TestFlush.test_flush_fresh_tree(WorkingTreeFormat2)
3426 breezy.tests.per_workingtree.test_flush.TestFlush.test_flush_fresh_tree(WorkingTreeFormat3)
3427@@ -12933,6 +13120,8 @@
3428 breezy.tests.per_workingtree.test_inv.TestApplyInventoryDelta.test_rename_swap(WorkingTreeFormat6)
3429 breezy.tests.per_workingtree.test_inv.TestApplyInventoryDelta.test_rename_swap(WorkingTreeFormat6,remote)
3430 breezy.tests.per_workingtree.test_inv.TestApplyInventoryDelta.test_replace_root(GitWorkingTreeFormat)
3431+breezy.tests.per_workingtree.test_inv.TestApplyInventoryDelta.test_replace_root(WorkingTreeFormat2)
3432+breezy.tests.per_workingtree.test_inv.TestApplyInventoryDelta.test_replace_root(WorkingTreeFormat3)
3433 breezy.tests.per_workingtree.test_inv.TestRevert.test_dangling_id(WorkingTreeFormat2)
3434 breezy.tests.per_workingtree.test_inv.TestRevert.test_dangling_id(WorkingTreeFormat3)
3435 breezy.tests.per_workingtree.test_inv.TestTreeReference.test_tree_reference_matches_inv(WorkingTreeFormat2)
3436@@ -13152,6 +13341,9 @@
3437 breezy.tests.per_workingtree.test_move.TestMove.test_move_onto_self_root(WorkingTreeFormat6)
3438 breezy.tests.per_workingtree.test_move.TestMove.test_move_onto_self(WorkingTreeFormat2)
3439 breezy.tests.per_workingtree.test_move.TestMove.test_move_onto_self(WorkingTreeFormat3)
3440+breezy.tests.per_workingtree.test_move.TestMove.test_move_onto_self(WorkingTreeFormat4)
3441+breezy.tests.per_workingtree.test_move.TestMove.test_move_onto_self(WorkingTreeFormat5)
3442+breezy.tests.per_workingtree.test_move.TestMove.test_move_onto_self(WorkingTreeFormat6)
3443 breezy.tests.per_workingtree.test_move.TestMove.test_move_over_deleted(WorkingTreeFormat2)
3444 breezy.tests.per_workingtree.test_move.TestMove.test_move_over_deleted(WorkingTreeFormat3)
3445 breezy.tests.per_workingtree.test_move.TestMove.test_move_parent_dir(WorkingTreeFormat2)
3446@@ -13175,6 +13367,9 @@
3447 breezy.tests.per_workingtree.test_move.TestMove.test_move_unversioned(WorkingTreeFormat6)
3448 breezy.tests.per_workingtree.test_move.TestMove.test_move_via_rm_and_add(WorkingTreeFormat2)
3449 breezy.tests.per_workingtree.test_move.TestMove.test_move_via_rm_and_add(WorkingTreeFormat3)
3450+breezy.tests.per_workingtree.test_move.TestMove.test_move_via_rm_and_add(WorkingTreeFormat4)
3451+breezy.tests.per_workingtree.test_move.TestMove.test_move_via_rm_and_add(WorkingTreeFormat5)
3452+breezy.tests.per_workingtree.test_move.TestMove.test_move_via_rm_and_add(WorkingTreeFormat6)
3453 breezy.tests.per_workingtree.test_nested_specifics.TestNestedSupport.test_comparison_data_does_not_autodetect_subtree(WorkingTreeFormat2)
3454 breezy.tests.per_workingtree.test_nested_specifics.TestNestedSupport.test_comparison_data_does_not_autodetect_subtree(WorkingTreeFormat3)
3455 breezy.tests.per_workingtree.test_nested_specifics.TestNestedSupport.test_comparison_data_does_not_autodetect_subtree(WorkingTreeFormat4)
3456@@ -13435,6 +13630,9 @@
3457 breezy.tests.per_workingtree.test_put_file.TestPutFileBytesNonAtomic.test_put_new_file(WorkingTreeFormat5)
3458 breezy.tests.per_workingtree.test_put_file.TestPutFileBytesNonAtomic.test_put_new_file(WorkingTreeFormat6)
3459 breezy.tests.per_workingtree.test_put_file.TestPutFileBytesNonAtomic.test_put_new_file(WorkingTreeFormat6,remote)
3460+breezy.tests.per_workingtree.test_readonly.TestReadonly.test_readonly_unclean(WorkingTreeFormat4)
3461+breezy.tests.per_workingtree.test_readonly.TestReadonly.test_readonly_unclean(WorkingTreeFormat5)
3462+breezy.tests.per_workingtree.test_readonly.TestReadonly.test_readonly_unclean(WorkingTreeFormat6)
3463 breezy.tests.per_workingtree.test_read_working_inventory.TestReadWorkingInventory.test_read_after_inventory_modification(GitWorkingTreeFormat)
3464 breezy.tests.per_workingtree.test_read_working_inventory.TestReadWorkingInventory.test_read_after_inventory_modification(WorkingTreeFormat2)
3465 breezy.tests.per_workingtree.test_read_working_inventory.TestReadWorkingInventory.test_read_after_inventory_modification(WorkingTreeFormat3)
3466@@ -13455,6 +13653,9 @@
3467 breezy.tests.per_workingtree.test_remove.TestRemove.test_force_remove_changed_files(WorkingTreeFormat6,remote)
3468 breezy.tests.per_workingtree.test_remove.TestRemove.test_force_remove_directory_with_unknowns(WorkingTreeFormat2)
3469 breezy.tests.per_workingtree.test_remove.TestRemove.test_force_remove_directory_with_unknowns(WorkingTreeFormat3)
3470+breezy.tests.per_workingtree.test_remove.TestRemove.test_force_remove_directory_with_unknowns(WorkingTreeFormat4)
3471+breezy.tests.per_workingtree.test_remove.TestRemove.test_force_remove_directory_with_unknowns(WorkingTreeFormat5)
3472+breezy.tests.per_workingtree.test_remove.TestRemove.test_force_remove_directory_with_unknowns(WorkingTreeFormat6)
3473 breezy.tests.per_workingtree.test_remove.TestRemove.test_non_cwd(WorkingTreeFormat2)
3474 breezy.tests.per_workingtree.test_remove.TestRemove.test_non_cwd(WorkingTreeFormat3)
3475 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_absent_directory(WorkingTreeFormat2)
3476@@ -13463,8 +13664,15 @@
3477 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_added_files(WorkingTreeFormat3)
3478 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_file(WorkingTreeFormat2)
3479 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_file(WorkingTreeFormat3)
3480+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_file(WorkingTreeFormat4)
3481+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_file(WorkingTreeFormat5)
3482+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_file(WorkingTreeFormat6)
3483 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_ignored_files(WorkingTreeFormat2)
3484 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_ignored_files(WorkingTreeFormat3)
3485+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_ignored_files(WorkingTreeFormat4)
3486+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_ignored_files(WorkingTreeFormat5)
3487+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_ignored_files(WorkingTreeFormat6)
3488+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_changed_ignored_files(WorkingTreeFormat6,remote)
3489 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_deleted_files(WorkingTreeFormat2)
3490 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_deleted_files(WorkingTreeFormat3)
3491 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_dir_before_bzr(WorkingTreeFormat2)
3492@@ -13477,8 +13685,14 @@
3493 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_directory_with_renames(WorkingTreeFormat3)
3494 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_file_and_containing_dir(WorkingTreeFormat2)
3495 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_file_and_containing_dir(WorkingTreeFormat3)
3496+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_file_and_containing_dir(WorkingTreeFormat4)
3497+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_file_and_containing_dir(WorkingTreeFormat5)
3498+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_file_and_containing_dir(WorkingTreeFormat6)
3499 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_force_directory_with_changed_file(WorkingTreeFormat2)
3500 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_force_directory_with_changed_file(WorkingTreeFormat3)
3501+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_force_directory_with_changed_file(WorkingTreeFormat4)
3502+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_force_directory_with_changed_file(WorkingTreeFormat5)
3503+breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_force_directory_with_changed_file(WorkingTreeFormat6)
3504 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_keep_subtree(WorkingTreeFormat2)
3505 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_keep_subtree(WorkingTreeFormat3)
3506 breezy.tests.per_workingtree.test_remove.TestRemove.test_remove_keep_subtree(WorkingTreeFormat4)
3507@@ -13709,6 +13923,9 @@
3508 breezy.tests.per_workingtree.test_smart_add.TestSmartAddTree.test_skip_nested_trees(WorkingTreeFormat6,remote)
3509 breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_dir_changes_to_symlink(WorkingTreeFormat2)
3510 breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_dir_changes_to_symlink(WorkingTreeFormat3)
3511+breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_dir_changes_to_symlink(WorkingTreeFormat4)
3512+breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_dir_changes_to_symlink(WorkingTreeFormat5)
3513+breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_dir_changes_to_symlink(WorkingTreeFormat6)
3514 breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_symlink_changes_to_dir(WorkingTreeFormat2)
3515 breezy.tests.per_workingtree.test_symlinks.TestKindChanges.test_symlink_changes_to_dir(WorkingTreeFormat3)
3516 breezy.tests.per_workingtree.test_symlinks.TestOpenTree.test_open_containing_through_symlink(GitWorkingTreeFormat)
3517@@ -14724,6 +14941,8 @@
3518 breezy.tests.test_commit.TestCommit.test_commit_failed_signature
3519 breezy.tests.test_commit.TestCommit.test_commit_has_1ms_resolution
3520 breezy.tests.test_commit.TestCommit.test_commit_invokes_hooks
3521+breezy.tests.test_commit.TestCommit.test_commit_kind_changes
3522+breezy.tests.test_commit.TestCommit.test_commit_new_subdir_child_selective
3523 breezy.tests.test_commit.TestCommit.test_commit_no_author
3524 breezy.tests.test_commit.TestCommit.test_commit_object_doesnt_set_nick
3525 breezy.tests.test_commit.TestCommit.test_commit_removals_respects_filespec
3526@@ -14741,6 +14960,7 @@
3527 breezy.tests.test_commit.TestCommit.test_reused_rev_id
3528 breezy.tests.test_commit.TestCommit.test_safe_master_lock
3529 breezy.tests.test_commit.TestCommit.test_selected_file_merge_commit
3530+breezy.tests.test_commit.TestCommit.test_selective_delete
3531 breezy.tests.test_commit.TestCommit.test_simple_commit
3532 breezy.tests.test_commit.TestCommit.test_strict_commit
3533 breezy.tests.test_config.EmailOptionTests.test_default_email_uses_EMAIL
3534@@ -15644,6 +15864,8 @@
3535 breezy.tests.test__dirstate_helpers.TestPackStat.test_giant_size(dirstate_Python)
3536 breezy.tests.test__dirstate_helpers.TestPackStat.test_negative_dev(dirstate_Python)
3537 breezy.tests.test__dirstate_helpers.TestProcessEntry.test_simple_changes(unicode,dirstate_Python)
3538+breezy.tests.test__dirstate_helpers.TestReadDirblocks.test_smoketest(unicode)
3539+breezy.tests.test__dirstate_helpers.TestReadDirblocks.test_trailing_garbage(unicode)
3540 breezy.tests.test__dirstate_helpers.TestUpdateEntry.test_update_entry_dir_unchanged(unicode,dirstate_Python)
3541 breezy.tests.test__dirstate_helpers.TestUpdateEntry.test_update_entry_dir(unicode,dirstate_Python)
3542 breezy.tests.test__dirstate_helpers.TestUsingCompiledIfAvailable.test_bisect_dirblock
3543@@ -15654,14 +15876,62 @@
3544 breezy.tests.test__dirstate_helpers.TestUsingCompiledIfAvailable.test__read_dirblocks
3545 breezy.tests.test__dirstate_helpers.TestUsingCompiledIfAvailable.test_update_entry
3546 breezy.tests.test_dirstate.TestDirStateHashUpdates.test_worth_saving_limit_avoids_writing(unicode)
3547+breezy.tests.test_dirstate.TestDirStateInitialize.test_initialize(unicode)
3548+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_directory_and_child_no_parents_all_data(unicode)
3549+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_directory_to_root_no_parents_all_data(unicode)
3550 breezy.tests.test_dirstate.TestDirStateManipulations.test_add_forbidden_names(unicode)
3551+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_path_to_root_no_parents_all_data(unicode)
3552+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_path_to_unversioned_directory(unicode)
3553+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_symlink_to_root_no_parents_all_data(unicode)
3554+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_symlink_unicode_to_root_no_parents_all_data(unicode)
3555+breezy.tests.test_dirstate.TestDirStateManipulations.test_add_tree_reference(unicode)
3556+breezy.tests.test_dirstate.TestDirStateManipulations.test_set_parent_trees_no_content(unicode)
3557+breezy.tests.test_dirstate.TestDirStateManipulations.test_set_path_id_with_parents(unicode)
3558+breezy.tests.test_dirstate.TestDirStateManipulations.test_set_state_from_inventory_no_content_no_parents(unicode)
3559+breezy.tests.test_dirstate.TestDirStateManipulations.test_set_state_from_scratch_identical_parent(unicode)
3560+breezy.tests.test_dirstate.TestDirStateManipulations.test_set_state_from_scratch_no_parents(unicode)
3561+breezy.tests.test_dirstate.TestDirStateManipulations.test_update_minimal_updates_id_index(unicode)
3562 breezy.tests.test_dirstate.TestDirStateOnFile.test_can_save_clean_on_file(unicode)
3563+breezy.tests.test_dirstate.TestDirStateOnFile.test_construct_with_path(unicode)
3564+breezy.tests.test_dirstate.TestDirStateOnFile.test_save_refuses_if_changes_aborted(unicode)
3565+breezy.tests.test_dirstate.TestDirstateSortOrder.test_set_parent_trees_correct_order
3566+breezy.tests.test_dirstate.TestDirstateValidation.test_validate_correct_dirstate(unicode)
3567+breezy.tests.test_dirstate.TestDiscardMergeParents.test_discard_absent(unicode)
3568+breezy.tests.test_dirstate.TestDiscardMergeParents.test_discard_all_subdir(unicode)
3569 breezy.tests.test_dirstate.TestDiscardMergeParents.test_discard_no_parents(unicode)
3570+breezy.tests.test_dirstate.TestDiscardMergeParents.test_discard_one_parent(unicode)
3571+breezy.tests.test_dirstate.TestDiscardMergeParents.test_discard_renamed(unicode)
3572+breezy.tests.test_dirstate.TestDiscardMergeParents.test_discard_simple(unicode)
3573 breezy.tests.test_dirstate.TestErrors.test_dirstate_corrupt
3574+breezy.tests.test_dirstate.TestGetEntry.test_complex_structure_exists(unicode)
3575+breezy.tests.test_dirstate.TestGetEntry.test_complex_structure_missing(unicode)
3576+breezy.tests.test_dirstate.TestGetEntry.test_get_entry_uninitialized(unicode)
3577+breezy.tests.test_dirstate.TestGetEntry.test_simple_structure(unicode)
3578+breezy.tests.test_dirstate.TestGetLines.test_entry_to_line(unicode)
3579+breezy.tests.test_dirstate.TestGetLines.test_entry_to_line_with_parent(unicode)
3580+breezy.tests.test_dirstate.TestGetLines.test_get_line_with_2_rows(unicode)
3581 breezy.tests.test_dirstate.TestGetLines.test_iter_entries(unicode)
3582+breezy.tests.test_dirstate.Test_InvEntryToDetails.test_unicode_symlink
3583+breezy.tests.test_dirstate.TestPackStat.test_pack_stat_float
3584+breezy.tests.test_dirstate.TestPackStat.test_pack_stat_int
3585 breezy.tests.test_dirstate.TestSHA1Provider.test_defaultsha1provider_sha1
3586 breezy.tests.test_dirstate.TestSHA1Provider.test_defaultsha1provider_stat_and_sha1
3587 breezy.tests.test_dirstate.TestSHA1Provider.test_sha1provider_is_an_interface
3588+breezy.tests.test_dirstate.TestTreeToDirState.test_1_parents_empty_to_dirstate(unicode)
3589+breezy.tests.test_dirstate.TestTreeToDirState.test_2_parents_empty_to_dirstate(unicode)
3590+breezy.tests.test_dirstate.TestTreeToDirState.test_colliding_fileids(unicode)
3591+breezy.tests.test_dirstate.TestTreeToDirState.test_empty_to_dirstate(unicode)
3592+breezy.tests.test_dirstate.TestTreeToDirState.test_empty_unknowns_are_ignored_to_dirstate(unicode)
3593+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_invalid_changed_file
3594+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_invalid_existing_id
3595+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_invalid_file_not_present
3596+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_invalid_new_id_same_path
3597+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_invalid_parent_missing
3598+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_remove_file_active_state_has_diff_file
3599+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_remove_file_active_state_has_diff_file_and_file_elsewhere
3600+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_remove_file_matching_active_state
3601+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_remove_file_present_elsewhere_in_active_state
3602+breezy.tests.test_dirstate.TestUpdateBasisByDelta.test_remove_file_present_in_active_state
3603 breezy.tests.test_email_message.TestEmailMessage.test_empty_message
3604 breezy.tests.test_email_message.TestEmailMessage.test_multipart_message_complex
3605 breezy.tests.test_email_message.TestEmailMessage.test_multipart_message_simple
3606@@ -15783,6 +16053,8 @@
3607 breezy.tests.test_export.TarExporterTests.test_tgz_ignores_dest_path
3608 breezy.tests.test_export.TarExporterTests.test_xz_stdout
3609 breezy.tests.test_export.TestDirExport.test_empty
3610+breezy.tests.test_export.TestDirExport.test_to_existing_nonempty_dir_fail
3611+breezy.tests.test_extract.TestExtract.test_bad_repo_format
3612 breezy.tests.test_export.TestDirExport.test_files_per_file_timestamps
3613 breezy.tests.test_export.TestDirExport.test_files_same_timestamp
3614 breezy.tests.test_export.TestDirExport.test_subdir_files_per_timestamps
3615@@ -18761,6 +19033,8 @@
3616 breezy.tests.test__simple_set.TestSimpleSet.test__sizeof__
3617 breezy.tests.test_smart_add.TestAddActions.test__print
3618 breezy.tests.test_smart_add.TestAddActions.test_quiet
3619+breezy.tests.test_smart_add.TestAddFrom.test_copy_all
3620+breezy.tests.test_smart_add.TestAddFrom.test_copy_from_dir
3621 breezy.tests.test_smart_request.TestErrors.test_disabled_method
3622 breezy.tests.test_smart_request.TestJailHook.test_jail_hook
3623 breezy.tests.test_smart_request.TestJailHook.test_open_bzrdir_in_non_main_thread
3624@@ -19395,6 +19669,9 @@
3625 breezy.tests.test_tag.TestTagsInCheckouts.test_tag_copied_by_initial_checkout
3626 breezy.tests.test_tag.TestTagsInCheckouts.test_update_tag_into_checkout
3627 breezy.tests.test_tag.TestTagsInCheckouts.test_update_updates_tags
3628+breezy.tests.test_testament.TestamentTestsStrict2.testament_class
3629+breezy.tests.test_testament.TestamentTestsStrict.testament_class
3630+breezy.tests.test_testament.TestamentTests.testament_class
3631 breezy.tests.test_test_server.TestTCPServerInAThread.test_client_talks_server_respond(TestingTCPServer)
3632 breezy.tests.test_test_server.TestTCPServerInAThread.test_client_talks_server_respond(TestingThreadingTCPServer)
3633 breezy.tests.test_test_server.TestTCPServerInAThread.test_exception_swallowed_while_serving(TestingTCPServer)
3634@@ -19485,6 +19762,7 @@
3635 breezy.tests.test_transactions.TestWriteTransaction.test_small_cache_with_references
3636 breezy.tests.test_transactions.TestWriteTransaction.test_writable
3637 breezy.tests.test_transform.TestBuildTree.test_build_tree_accelerator_tree_missing_file
3638+breezy.tests.test_transform.TestBuildTree.test_build_tree_accelerator_wrong_kind
3639 breezy.tests.test_transform.TestBuildTree.test_build_tree_hardlinks_preserve_execute
3640 breezy.tests.test_transform.TestBuildTree.test_build_with_references
3641 breezy.tests.test_transform.TestCommitTransform.test_add_files
3642@@ -19974,6 +20252,7 @@
3643 breezy.tests.test_win32utils.TestWin32UtilsGlobExpand.test_empty_tree
3644 breezy.tests.test_win32utils.TestWin32UtilsGlobExpand.test_tree_ascii
3645 breezy.tests.test_win32utils.TestWin32UtilsGlobExpand.test_unicode_backslashes
3646+breezy.tests.test_workingtree_4.TestWorkingTreeFormat4.test_commit_updates_hash_cache
3647 breezy.tests.test_workingtree_4.TestWorkingTreeFormat4.test_constructing_invalid_interdirstate_raises
3648 breezy.tests.test_workingtree_4.TestWorkingTreeFormat4.test_default_root_id
3649 breezy.tests.test_workingtree_4.TestWorkingTreeFormat4.test_dirstate_doesnt_cache_non_parent_trees

Subscribers

People subscribed via source and target branches