Merge lp:~jelmer/brz/delta-copied into lp:brz
- delta-copied
- Merge into trunk
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/delta-copied |
Merge into: | lp:brz |
Prerequisite: | lp:~jelmer/brz/tree-change-without-file-id |
Diff against target: |
1018 lines (+146/-67) 19 files modified
breezy/bzr/bundle/serializer/v08.py (+2/-1) breezy/delta.py (+36/-16) breezy/info.py (+1/-0) breezy/log.py (+2/-3) breezy/plugins/fastimport/exporter.py (+1/-1) breezy/plugins/fastimport/tests/test_generic_processor.py (+1/-1) breezy/plugins/fastimport/tests/test_revision_store.py (+3/-3) breezy/plugins/upload/cmds.py (+1/-1) breezy/plugins/weave_fmt/test_bzrdir.py (+2/-0) breezy/tests/blackbox/test_info.py (+21/-0) breezy/tests/per_intertree/test_compare.py (+22/-5) breezy/tests/per_repository_vf/test_fileid_involved.py (+2/-1) breezy/tests/per_workingtree/test_changes_from.py (+2/-0) breezy/tests/test_delta.py (+15/-12) breezy/tests/test_missing.py (+4/-0) breezy/tests/test_transform.py (+18/-16) breezy/tests/test_workingtree_4.py (+3/-3) breezy/tree.py (+6/-4) breezy/version_info_formats/__init__.py (+4/-0) |
To merge this branch: | bzr merge lp:~jelmer/brz/delta-copied |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Martin Packman | Approve | ||
Review via email: mp+369485@code.launchpad.net |
Commit message
Add TreeDelta.copied and TreeChange.copied fields.
Description of the change
Add TreeDelta.copied and TreeChange.copied fields.
This in preparation of copy tracking support in Git and Svn backends.
To post a comment you must log in.
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote : | # |
Running landing tests failed
https:/
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote : | # |
Running landing tests failed
https:/
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'breezy/bzr/bundle/serializer/v08.py' | |||
2 | --- breezy/bzr/bundle/serializer/v08.py 2019-09-21 15:38:35 +0000 | |||
3 | +++ breezy/bzr/bundle/serializer/v08.py 2019-09-21 23:05:30 +0000 | |||
4 | @@ -312,7 +312,8 @@ | |||
5 | 312 | for change in delta.removed: | 312 | for change in delta.removed: |
6 | 313 | action = Action('removed', [change.kind[0], change.path[0]]).write(self.to_file) | 313 | action = Action('removed', [change.kind[0], change.path[0]]).write(self.to_file) |
7 | 314 | 314 | ||
9 | 315 | for change in delta.added: | 315 | # TODO(jelmer): Treat copied specially here? |
10 | 316 | for change in delta.added + delta.copied: | ||
11 | 316 | action = Action( | 317 | action = Action( |
12 | 317 | 'added', [change.kind[1], change.path[1]], | 318 | 'added', [change.kind[1], change.path[1]], |
13 | 318 | [('file-id', change.file_id.decode('utf-8'))]) | 319 | [('file-id', change.file_id.decode('utf-8'))]) |
14 | 319 | 320 | ||
15 | === modified file 'breezy/delta.py' | |||
16 | --- breezy/delta.py 2019-06-29 19:50:18 +0000 | |||
17 | +++ breezy/delta.py 2019-09-21 23:05:30 +0000 | |||
18 | @@ -34,6 +34,7 @@ | |||
19 | 34 | added | 34 | added |
20 | 35 | removed | 35 | removed |
21 | 36 | renamed | 36 | renamed |
22 | 37 | copied | ||
23 | 37 | kind_changed | 38 | kind_changed |
24 | 38 | modified | 39 | modified |
25 | 39 | unchanged | 40 | unchanged |
26 | @@ -41,8 +42,8 @@ | |||
27 | 41 | 42 | ||
28 | 42 | Each id is listed only once. | 43 | Each id is listed only once. |
29 | 43 | 44 | ||
32 | 44 | Files that are both modified and renamed are listed only in | 45 | Files that are both modified and renamed or copied are listed only in |
33 | 45 | renamed, with the text_modified flag true. The text_modified | 46 | renamed or copied, with the text_modified flag true. The text_modified |
34 | 46 | applies either to the content of the file or the target of the | 47 | applies either to the content of the file or the target of the |
35 | 47 | symbolic link, depending of the kind of file. | 48 | symbolic link, depending of the kind of file. |
36 | 48 | 49 | ||
37 | @@ -57,6 +58,7 @@ | |||
38 | 57 | self.added = [] | 58 | self.added = [] |
39 | 58 | self.removed = [] | 59 | self.removed = [] |
40 | 59 | self.renamed = [] | 60 | self.renamed = [] |
41 | 61 | self.copied = [] | ||
42 | 60 | self.kind_changed = [] | 62 | self.kind_changed = [] |
43 | 61 | self.modified = [] | 63 | self.modified = [] |
44 | 62 | self.unchanged = [] | 64 | self.unchanged = [] |
45 | @@ -69,6 +71,7 @@ | |||
46 | 69 | return self.added == other.added \ | 71 | return self.added == other.added \ |
47 | 70 | and self.removed == other.removed \ | 72 | and self.removed == other.removed \ |
48 | 71 | and self.renamed == other.renamed \ | 73 | and self.renamed == other.renamed \ |
49 | 74 | and self.copied == other.copied \ | ||
50 | 72 | and self.modified == other.modified \ | 75 | and self.modified == other.modified \ |
51 | 73 | and self.unchanged == other.unchanged \ | 76 | and self.unchanged == other.unchanged \ |
52 | 74 | and self.kind_changed == other.kind_changed \ | 77 | and self.kind_changed == other.kind_changed \ |
53 | @@ -79,16 +82,18 @@ | |||
54 | 79 | 82 | ||
55 | 80 | def __repr__(self): | 83 | def __repr__(self): |
56 | 81 | return "TreeDelta(added=%r, removed=%r, renamed=%r," \ | 84 | return "TreeDelta(added=%r, removed=%r, renamed=%r," \ |
61 | 82 | " kind_changed=%r, modified=%r, unchanged=%r," \ | 85 | " copied=%r, kind_changed=%r, modified=%r, unchanged=%r," \ |
62 | 83 | " unversioned=%r)" % (self.added, | 86 | " unversioned=%r)" % ( |
63 | 84 | self.removed, self.renamed, self.kind_changed, self.modified, | 87 | self.added, self.removed, self.renamed, self.copied, |
64 | 85 | self.unchanged, self.unversioned) | 88 | self.kind_changed, self.modified, self.unchanged, |
65 | 89 | self.unversioned) | ||
66 | 86 | 90 | ||
67 | 87 | def has_changed(self): | 91 | def has_changed(self): |
68 | 88 | return bool(self.modified | 92 | return bool(self.modified |
69 | 89 | or self.added | 93 | or self.added |
70 | 90 | or self.removed | 94 | or self.removed |
71 | 91 | or self.renamed | 95 | or self.renamed |
72 | 96 | or self.copied | ||
73 | 92 | or self.kind_changed) | 97 | or self.kind_changed) |
74 | 93 | 98 | ||
75 | 94 | def get_changes_as_text(self, show_ids=False, show_unchanged=False, | 99 | def get_changes_as_text(self, show_ids=False, show_unchanged=False, |
76 | @@ -130,10 +135,13 @@ | |||
77 | 130 | elif fully_present[0] is False: | 135 | elif fully_present[0] is False: |
78 | 131 | delta.missing.append(change) | 136 | delta.missing.append(change) |
79 | 132 | elif change.name[0] != change.name[1] or change.parent_id[0] != change.parent_id[1]: | 137 | elif change.name[0] != change.name[1] or change.parent_id[0] != change.parent_id[1]: |
81 | 133 | # If the name changes, or the parent_id changes, we have a rename | 138 | # If the name changes, or the parent_id changes, we have a rename or copy |
82 | 134 | # (if we move a parent, that doesn't count as a rename for the | 139 | # (if we move a parent, that doesn't count as a rename for the |
83 | 135 | # file) | 140 | # file) |
85 | 136 | delta.renamed.append(change) | 141 | if change.copied: |
86 | 142 | delta.copied.append(change) | ||
87 | 143 | else: | ||
88 | 144 | delta.renamed.append(change) | ||
89 | 137 | elif change.kind[0] != change.kind[1]: | 145 | elif change.kind[0] != change.kind[1]: |
90 | 138 | delta.kind_changed.append(change) | 146 | delta.kind_changed.append(change) |
91 | 139 | elif change.changed_content or change.executable[0] != change.executable[1]: | 147 | elif change.changed_content or change.executable[0] != change.executable[1]: |
92 | @@ -151,6 +159,7 @@ | |||
93 | 151 | delta.removed.sort(key=change_key) | 159 | delta.removed.sort(key=change_key) |
94 | 152 | delta.added.sort(key=change_key) | 160 | delta.added.sort(key=change_key) |
95 | 153 | delta.renamed.sort(key=change_key) | 161 | delta.renamed.sort(key=change_key) |
96 | 162 | delta.copied.sort(key=change_key) | ||
97 | 154 | delta.missing.sort(key=change_key) | 163 | delta.missing.sort(key=change_key) |
98 | 155 | # TODO: jam 20060529 These lists shouldn't need to be sorted | 164 | # TODO: jam 20060529 These lists shouldn't need to be sorted |
99 | 156 | # since we added them in alphabetical order. | 165 | # since we added them in alphabetical order. |
100 | @@ -220,7 +229,7 @@ | |||
101 | 220 | self.output("Operating on whole tree but only reporting on " | 229 | self.output("Operating on whole tree but only reporting on " |
102 | 221 | "'%s' view." % (self.view_name,)) | 230 | "'%s' view." % (self.view_name,)) |
103 | 222 | 231 | ||
105 | 223 | def report(self, paths, versioned, renamed, modified, exe_change, | 232 | def report(self, paths, versioned, renamed, copied, modified, exe_change, |
106 | 224 | kind): | 233 | kind): |
107 | 225 | """Report one change to a file | 234 | """Report one change to a file |
108 | 226 | 235 | ||
109 | @@ -228,6 +237,7 @@ | |||
110 | 228 | :param versioned: may be 'added', 'removed', 'unchanged', or | 237 | :param versioned: may be 'added', 'removed', 'unchanged', or |
111 | 229 | 'unversioned. | 238 | 'unversioned. |
112 | 230 | :param renamed: may be True or False | 239 | :param renamed: may be True or False |
113 | 240 | :param copied: may be True or False | ||
114 | 231 | :param modified: may be 'created', 'deleted', 'kind changed', | 241 | :param modified: may be 'created', 'deleted', 'kind changed', |
115 | 232 | 'modified' or 'unchanged'. | 242 | 'modified' or 'unchanged'. |
116 | 233 | :param exe_change: True if the execute bit has changed | 243 | :param exe_change: True if the execute bit has changed |
117 | @@ -253,13 +263,13 @@ | |||
118 | 253 | # ( the path is different OR | 263 | # ( the path is different OR |
119 | 254 | # the kind is different) | 264 | # the kind is different) |
120 | 255 | if (versioned == 'unchanged' and | 265 | if (versioned == 'unchanged' and |
124 | 256 | (renamed or modified == 'kind changed')): | 266 | (renamed or copied or modified == 'kind changed')): |
125 | 257 | if renamed: | 267 | if renamed or copied: |
126 | 258 | # on a rename, we show old and new | 268 | # on a rename or copy, we show old and new |
127 | 259 | old_path, path = paths | 269 | old_path, path = paths |
128 | 260 | else: | 270 | else: |
131 | 261 | # if it's not renamed, we're showing both for kind changes | 271 | # if it's not renamed or copied, we're showing both for kind |
132 | 262 | # so only show the new path | 272 | # changes so only show the new path |
133 | 263 | old_path, path = paths[1], paths[1] | 273 | old_path, path = paths[1], paths[1] |
134 | 264 | # if the file is not missing in the source, we show its kind | 274 | # if the file is not missing in the source, we show its kind |
135 | 265 | # when we show two paths. | 275 | # when we show two paths. |
136 | @@ -275,6 +285,8 @@ | |||
137 | 275 | path = paths[1] | 285 | path = paths[1] |
138 | 276 | if renamed: | 286 | if renamed: |
139 | 277 | rename = "R" | 287 | rename = "R" |
140 | 288 | elif copied: | ||
141 | 289 | rename = "C" | ||
142 | 278 | else: | 290 | else: |
143 | 279 | rename = self.versioned_map[versioned] | 291 | rename = self.versioned_map[versioned] |
144 | 280 | # we show the old kind on the new path when the content is deleted. | 292 | # we show the old kind on the new path when the content is deleted. |
145 | @@ -320,8 +332,14 @@ | |||
146 | 320 | # as it had a value | 332 | # as it had a value |
147 | 321 | if None not in change.name and None not in change.parent_id and\ | 333 | if None not in change.name and None not in change.parent_id and\ |
148 | 322 | (change.name[0] != change.name[1] or change.parent_id[0] != change.parent_id[1]): | 334 | (change.name[0] != change.name[1] or change.parent_id[0] != change.parent_id[1]): |
150 | 323 | renamed = True | 335 | if change.copied: |
151 | 336 | copied = True | ||
152 | 337 | renamed = False | ||
153 | 338 | else: | ||
154 | 339 | renamed = True | ||
155 | 340 | copied = False | ||
156 | 324 | else: | 341 | else: |
157 | 342 | copied = False | ||
158 | 325 | renamed = False | 343 | renamed = False |
159 | 326 | if change.kind[0] != change.kind[1]: | 344 | if change.kind[0] != change.kind[1]: |
160 | 327 | if change.kind[0] is None: | 345 | if change.kind[0] is None: |
161 | @@ -340,7 +358,7 @@ | |||
162 | 340 | if change.kind[1] == "file": | 358 | if change.kind[1] == "file": |
163 | 341 | exe_change = (change.executable[0] != change.executable[1]) | 359 | exe_change = (change.executable[0] != change.executable[1]) |
164 | 342 | versioned_change = versioned_change_map[change.versioned] | 360 | versioned_change = versioned_change_map[change.versioned] |
166 | 343 | reporter.report(change.path, versioned_change, renamed, modified, | 361 | reporter.report(change.path, versioned_change, renamed, copied, modified, |
167 | 344 | exe_change, change.kind) | 362 | exe_change, change.kind) |
168 | 345 | 363 | ||
169 | 346 | 364 | ||
170 | @@ -440,6 +458,8 @@ | |||
171 | 440 | extra_modified = [] | 458 | extra_modified = [] |
172 | 441 | show_list(delta.renamed, 'renamed', 'R', with_file_id_format='%s', | 459 | show_list(delta.renamed, 'renamed', 'R', with_file_id_format='%s', |
173 | 442 | show_more=show_more_renamed) | 460 | show_more=show_more_renamed) |
174 | 461 | show_list(delta.copied, 'copied', 'C', with_file_id_format='%s', | ||
175 | 462 | show_more=show_more_renamed) | ||
176 | 443 | show_list(delta.kind_changed, 'kind changed', 'K', | 463 | show_list(delta.kind_changed, 'kind changed', 'K', |
177 | 444 | with_file_id_format='%s', | 464 | with_file_id_format='%s', |
178 | 445 | show_more=show_more_kind_changed) | 465 | show_more=show_more_kind_changed) |
179 | 446 | 466 | ||
180 | === modified file 'breezy/info.py' | |||
181 | --- breezy/info.py 2019-09-05 01:42:51 +0000 | |||
182 | +++ breezy/info.py 2019-09-21 23:05:30 +0000 | |||
183 | @@ -284,6 +284,7 @@ | |||
184 | 284 | outfile.write(' %8d added\n' % len(delta.added)) | 284 | outfile.write(' %8d added\n' % len(delta.added)) |
185 | 285 | outfile.write(' %8d removed\n' % len(delta.removed)) | 285 | outfile.write(' %8d removed\n' % len(delta.removed)) |
186 | 286 | outfile.write(' %8d renamed\n' % len(delta.renamed)) | 286 | outfile.write(' %8d renamed\n' % len(delta.renamed)) |
187 | 287 | outfile.write(' %8d copied\n' % len(delta.copied)) | ||
188 | 287 | 288 | ||
189 | 288 | ignore_cnt = unknown_cnt = 0 | 289 | ignore_cnt = unknown_cnt = 0 |
190 | 289 | for path in working.extras(): | 290 | for path in working.extras(): |
191 | 290 | 291 | ||
192 | === modified file 'breezy/log.py' | |||
193 | --- breezy/log.py 2019-09-21 17:08:09 +0000 | |||
194 | +++ breezy/log.py 2019-09-21 23:05:30 +0000 | |||
195 | @@ -1016,7 +1016,7 @@ | |||
196 | 1016 | fileids set once their add or remove entry is detected respectively | 1016 | fileids set once their add or remove entry is detected respectively |
197 | 1017 | """ | 1017 | """ |
198 | 1018 | if stop_on == 'add': | 1018 | if stop_on == 'add': |
200 | 1019 | for item in delta.added: | 1019 | for item in delta.added + delta.copied: |
201 | 1020 | if item.file_id in fileids: | 1020 | if item.file_id in fileids: |
202 | 1021 | fileids.remove(item.file_id) | 1021 | fileids.remove(item.file_id) |
203 | 1022 | elif stop_on == 'delete': | 1022 | elif stop_on == 'delete': |
204 | @@ -1799,8 +1799,7 @@ | |||
205 | 1799 | else: | 1799 | else: |
206 | 1800 | path = c.path[0] | 1800 | path = c.path[0] |
207 | 1801 | to_file.write('\t* %s:\n' % (path,)) | 1801 | to_file.write('\t* %s:\n' % (path,)) |
210 | 1802 | for c in revision.delta.renamed: | 1802 | for c in revision.delta.renamed + revision.delta.copied: |
209 | 1803 | oldpath, newpath = c[:2] | ||
211 | 1804 | # For renamed files, show both the old and the new path | 1803 | # For renamed files, show both the old and the new path |
212 | 1805 | to_file.write('\t* %s:\n\t* %s:\n' % (c.path[0], c.path[1])) | 1804 | to_file.write('\t* %s:\n\t* %s:\n' % (c.path[0], c.path[1])) |
213 | 1806 | to_file.write('\n') | 1805 | to_file.write('\n') |
214 | 1807 | 1806 | ||
215 | === modified file 'breezy/plugins/fastimport/exporter.py' | |||
216 | --- breezy/plugins/fastimport/exporter.py 2019-06-29 19:50:18 +0000 | |||
217 | +++ breezy/plugins/fastimport/exporter.py 2019-09-21 23:05:30 +0000 | |||
218 | @@ -502,7 +502,7 @@ | |||
219 | 502 | 502 | ||
220 | 503 | # Record modifications | 503 | # Record modifications |
221 | 504 | files_to_get = [] | 504 | files_to_get = [] |
223 | 505 | for change in changes.added + my_modified + rd_modifies: | 505 | for change in changes.added + changes.copied + my_modified + rd_modifies: |
224 | 506 | if change.kind[1] == 'file': | 506 | if change.kind[1] == 'file': |
225 | 507 | files_to_get.append( | 507 | files_to_get.append( |
226 | 508 | (change.path[1], | 508 | (change.path[1], |
227 | 509 | 509 | ||
228 | === modified file 'breezy/plugins/fastimport/tests/test_generic_processor.py' | |||
229 | --- breezy/plugins/fastimport/tests/test_generic_processor.py 2019-06-29 19:50:18 +0000 | |||
230 | +++ breezy/plugins/fastimport/tests/test_generic_processor.py 2019-09-21 23:05:30 +0000 | |||
231 | @@ -125,7 +125,7 @@ | |||
232 | 125 | that must have been changed in the delta. | 125 | that must have been changed in the delta. |
233 | 126 | """ | 126 | """ |
234 | 127 | renamed = changes.renamed | 127 | renamed = changes.renamed |
236 | 128 | added = changes.added | 128 | added = changes.added + changes.copied |
237 | 129 | removed = changes.removed | 129 | removed = changes.removed |
238 | 130 | modified = changes.modified | 130 | modified = changes.modified |
239 | 131 | kind_changed = changes.kind_changed | 131 | kind_changed = changes.kind_changed |
240 | 132 | 132 | ||
241 | === modified file 'breezy/plugins/fastimport/tests/test_revision_store.py' | |||
242 | --- breezy/plugins/fastimport/tests/test_revision_store.py 2018-11-16 18:33:17 +0000 | |||
243 | +++ breezy/plugins/fastimport/tests/test_revision_store.py 2019-09-21 23:05:30 +0000 | |||
244 | @@ -141,13 +141,13 @@ | |||
245 | 141 | changes = list(shim._delta_to_iter_changes()) | 141 | changes = list(shim._delta_to_iter_changes()) |
246 | 142 | expected = [(b'foo-id', ('foo', 'bar/foo2'), False, (True, True), | 142 | expected = [(b'foo-id', ('foo', 'bar/foo2'), False, (True, True), |
247 | 143 | (b'TREE_ROOT', b'bar-id'), ('foo', 'foo2'), | 143 | (b'TREE_ROOT', b'bar-id'), ('foo', 'foo2'), |
249 | 144 | ('file', 'file'), (False, False)), | 144 | ('file', 'file'), (False, False), False), |
250 | 145 | (b'baz-id', ('bar/baz', None), True, (True, False), | 145 | (b'baz-id', ('bar/baz', None), True, (True, False), |
251 | 146 | (b'bar-id', None), ('baz', None), | 146 | (b'bar-id', None), ('baz', None), |
253 | 147 | ('file', None), (False, None)), | 147 | ('file', None), (False, None), False), |
254 | 148 | (b'link-id', (None, 'link'), True, (False, True), | 148 | (b'link-id', (None, 'link'), True, (False, True), |
255 | 149 | (None, b'TREE_ROOT'), (None, 'link'), | 149 | (None, b'TREE_ROOT'), (None, 'link'), |
257 | 150 | (None, 'symlink'), (None, False)), | 150 | (None, 'symlink'), (None, False), False), |
258 | 151 | ] | 151 | ] |
259 | 152 | # from pprint import pformat | 152 | # from pprint import pformat |
260 | 153 | # self.assertEqualDiff(pformat(expected), pformat(changes)) | 153 | # self.assertEqualDiff(pformat(expected), pformat(changes)) |
261 | 154 | 154 | ||
262 | === modified file 'breezy/plugins/upload/cmds.py' | |||
263 | --- breezy/plugins/upload/cmds.py 2019-08-11 13:33:45 +0000 | |||
264 | +++ breezy/plugins/upload/cmds.py 2019-09-21 23:05:30 +0000 | |||
265 | @@ -414,7 +414,7 @@ | |||
266 | 414 | else: | 414 | else: |
267 | 415 | raise NotImplementedError | 415 | raise NotImplementedError |
268 | 416 | 416 | ||
270 | 417 | for change in changes.added: | 417 | for change in changes.added + changes.copied: |
271 | 418 | if self.is_ignored(change.path[1]): | 418 | if self.is_ignored(change.path[1]): |
272 | 419 | if not self.quiet: | 419 | if not self.quiet: |
273 | 420 | self.outf.write('Ignoring %s\n' % change.path[1]) | 420 | self.outf.write('Ignoring %s\n' % change.path[1]) |
274 | 421 | 421 | ||
275 | === modified file 'breezy/plugins/weave_fmt/test_bzrdir.py' | |||
276 | --- breezy/plugins/weave_fmt/test_bzrdir.py 2018-11-16 18:33:17 +0000 | |||
277 | +++ breezy/plugins/weave_fmt/test_bzrdir.py 2019-09-21 23:05:30 +0000 | |||
278 | @@ -477,6 +477,7 @@ | |||
279 | 477 | 0 added | 477 | 0 added |
280 | 478 | 0 removed | 478 | 0 removed |
281 | 479 | 0 renamed | 479 | 0 renamed |
282 | 480 | 0 copied | ||
283 | 480 | 0 unknown | 481 | 0 unknown |
284 | 481 | 0 ignored | 482 | 0 ignored |
285 | 482 | 0 versioned subdirectories | 483 | 0 versioned subdirectories |
286 | @@ -509,6 +510,7 @@ | |||
287 | 509 | 0 added | 510 | 0 added |
288 | 510 | 0 removed | 511 | 0 removed |
289 | 511 | 0 renamed | 512 | 0 renamed |
290 | 513 | 0 copied | ||
291 | 512 | 0 unknown | 514 | 0 unknown |
292 | 513 | 0 ignored | 515 | 0 ignored |
293 | 514 | 0 versioned subdirectories | 516 | 0 versioned subdirectories |
294 | 515 | 517 | ||
295 | === modified file 'breezy/tests/blackbox/test_info.py' | |||
296 | --- breezy/tests/blackbox/test_info.py 2019-06-29 19:54:32 +0000 | |||
297 | +++ breezy/tests/blackbox/test_info.py 2019-09-21 23:05:30 +0000 | |||
298 | @@ -135,6 +135,7 @@ | |||
299 | 135 | 1 added | 135 | 1 added |
300 | 136 | 0 removed | 136 | 0 removed |
301 | 137 | 0 renamed | 137 | 0 renamed |
302 | 138 | 0 copied | ||
303 | 138 | 0 unknown | 139 | 0 unknown |
304 | 139 | 0 ignored | 140 | 0 ignored |
305 | 140 | 0 versioned subdirectories | 141 | 0 versioned subdirectories |
306 | @@ -169,6 +170,7 @@ | |||
307 | 169 | 1 added | 170 | 1 added |
308 | 170 | 0 removed | 171 | 0 removed |
309 | 171 | 0 renamed | 172 | 0 renamed |
310 | 173 | 0 copied | ||
311 | 172 | 0 unknown | 174 | 0 unknown |
312 | 173 | 0 ignored | 175 | 0 ignored |
313 | 174 | 0 versioned subdirectories | 176 | 0 versioned subdirectories |
314 | @@ -226,6 +228,7 @@ | |||
315 | 226 | 0 added | 228 | 0 added |
316 | 227 | 0 removed | 229 | 0 removed |
317 | 228 | 0 renamed | 230 | 0 renamed |
318 | 231 | 0 copied | ||
319 | 229 | 0 unknown | 232 | 0 unknown |
320 | 230 | 0 ignored | 233 | 0 ignored |
321 | 231 | 0 versioned subdirectories | 234 | 0 versioned subdirectories |
322 | @@ -275,6 +278,7 @@ | |||
323 | 275 | 0 added | 278 | 0 added |
324 | 276 | 0 removed | 279 | 0 removed |
325 | 277 | 0 renamed | 280 | 0 renamed |
326 | 281 | 0 copied | ||
327 | 278 | 0 unknown | 282 | 0 unknown |
328 | 279 | 0 ignored | 283 | 0 ignored |
329 | 280 | 0 versioned subdirectories | 284 | 0 versioned subdirectories |
330 | @@ -321,6 +325,7 @@ | |||
331 | 321 | 0 added | 325 | 0 added |
332 | 322 | 0 removed | 326 | 0 removed |
333 | 323 | 0 renamed | 327 | 0 renamed |
334 | 328 | 0 copied | ||
335 | 324 | 0 unknown | 329 | 0 unknown |
336 | 325 | 0 ignored | 330 | 0 ignored |
337 | 326 | 0 versioned subdirectories | 331 | 0 versioned subdirectories |
338 | @@ -367,6 +372,7 @@ | |||
339 | 367 | 0 added | 372 | 0 added |
340 | 368 | 0 removed | 373 | 0 removed |
341 | 369 | 0 renamed | 374 | 0 renamed |
342 | 375 | 0 copied | ||
343 | 370 | 0 unknown | 376 | 0 unknown |
344 | 371 | 0 ignored | 377 | 0 ignored |
345 | 372 | 0 versioned subdirectories | 378 | 0 versioned subdirectories |
346 | @@ -415,6 +421,7 @@ | |||
347 | 415 | 0 added | 421 | 0 added |
348 | 416 | 0 removed | 422 | 0 removed |
349 | 417 | 0 renamed | 423 | 0 renamed |
350 | 424 | 0 copied | ||
351 | 418 | 0 unknown | 425 | 0 unknown |
352 | 419 | 0 ignored | 426 | 0 ignored |
353 | 420 | 0 versioned subdirectories | 427 | 0 versioned subdirectories |
354 | @@ -459,6 +466,7 @@ | |||
355 | 459 | 0 added | 466 | 0 added |
356 | 460 | 0 removed | 467 | 0 removed |
357 | 461 | 0 renamed | 468 | 0 renamed |
358 | 469 | 0 copied | ||
359 | 462 | 0 unknown | 470 | 0 unknown |
360 | 463 | 0 ignored | 471 | 0 ignored |
361 | 464 | 0 versioned subdirectories | 472 | 0 versioned subdirectories |
362 | @@ -501,6 +509,7 @@ | |||
363 | 501 | 0 added | 509 | 0 added |
364 | 502 | 0 removed | 510 | 0 removed |
365 | 503 | 0 renamed | 511 | 0 renamed |
366 | 512 | 0 copied | ||
367 | 504 | 0 unknown | 513 | 0 unknown |
368 | 505 | 0 ignored | 514 | 0 ignored |
369 | 506 | 0 versioned subdirectories | 515 | 0 versioned subdirectories |
370 | @@ -543,6 +552,7 @@ | |||
371 | 543 | 0 added | 552 | 0 added |
372 | 544 | 0 removed | 553 | 0 removed |
373 | 545 | 0 renamed | 554 | 0 renamed |
374 | 555 | 0 copied | ||
375 | 546 | 0 unknown | 556 | 0 unknown |
376 | 547 | 0 ignored | 557 | 0 ignored |
377 | 548 | 0 versioned subdirectories | 558 | 0 versioned subdirectories |
378 | @@ -686,6 +696,7 @@ | |||
379 | 686 | 0 added | 696 | 0 added |
380 | 687 | 0 removed | 697 | 0 removed |
381 | 688 | 0 renamed | 698 | 0 renamed |
382 | 699 | 0 copied | ||
383 | 689 | 0 unknown | 700 | 0 unknown |
384 | 690 | 0 ignored | 701 | 0 ignored |
385 | 691 | 0 versioned subdirectories | 702 | 0 versioned subdirectories |
386 | @@ -729,6 +740,7 @@ | |||
387 | 729 | 0 added | 740 | 0 added |
388 | 730 | 0 removed | 741 | 0 removed |
389 | 731 | 0 renamed | 742 | 0 renamed |
390 | 743 | 0 copied | ||
391 | 732 | 0 unknown | 744 | 0 unknown |
392 | 733 | 0 ignored | 745 | 0 ignored |
393 | 734 | 0 versioned subdirectories | 746 | 0 versioned subdirectories |
394 | @@ -769,6 +781,7 @@ | |||
395 | 769 | 1 added | 781 | 1 added |
396 | 770 | 0 removed | 782 | 0 removed |
397 | 771 | 0 renamed | 783 | 0 renamed |
398 | 784 | 0 copied | ||
399 | 772 | 0 unknown | 785 | 0 unknown |
400 | 773 | 0 ignored | 786 | 0 ignored |
401 | 774 | 0 versioned subdirectories | 787 | 0 versioned subdirectories |
402 | @@ -816,6 +829,7 @@ | |||
403 | 816 | 0 added | 829 | 0 added |
404 | 817 | 0 removed | 830 | 0 removed |
405 | 818 | 0 renamed | 831 | 0 renamed |
406 | 832 | 0 copied | ||
407 | 819 | 0 unknown | 833 | 0 unknown |
408 | 820 | 0 ignored | 834 | 0 ignored |
409 | 821 | 0 versioned subdirectories | 835 | 0 versioned subdirectories |
410 | @@ -941,6 +955,7 @@ | |||
411 | 941 | 0 added | 955 | 0 added |
412 | 942 | 0 removed | 956 | 0 removed |
413 | 943 | 0 renamed | 957 | 0 renamed |
414 | 958 | 0 copied | ||
415 | 944 | 0 unknown | 959 | 0 unknown |
416 | 945 | 0 ignored | 960 | 0 ignored |
417 | 946 | 0 versioned subdirectories | 961 | 0 versioned subdirectories |
418 | @@ -984,6 +999,7 @@ | |||
419 | 984 | 0 added | 999 | 0 added |
420 | 985 | 0 removed | 1000 | 0 removed |
421 | 986 | 0 renamed | 1001 | 0 renamed |
422 | 1002 | 0 copied | ||
423 | 987 | 0 unknown | 1003 | 0 unknown |
424 | 988 | 0 ignored | 1004 | 0 ignored |
425 | 989 | 0 versioned subdirectories | 1005 | 0 versioned subdirectories |
426 | @@ -1028,6 +1044,7 @@ | |||
427 | 1028 | 0 added | 1044 | 0 added |
428 | 1029 | 0 removed | 1045 | 0 removed |
429 | 1030 | 0 renamed | 1046 | 0 renamed |
430 | 1047 | 0 copied | ||
431 | 1031 | 0 unknown | 1048 | 0 unknown |
432 | 1032 | 0 ignored | 1049 | 0 ignored |
433 | 1033 | 0 versioned subdirectories | 1050 | 0 versioned subdirectories |
434 | @@ -1070,6 +1087,7 @@ | |||
435 | 1070 | 0 added | 1087 | 0 added |
436 | 1071 | 0 removed | 1088 | 0 removed |
437 | 1072 | 0 renamed | 1089 | 0 renamed |
438 | 1090 | 0 copied | ||
439 | 1073 | 0 unknown | 1091 | 0 unknown |
440 | 1074 | 0 ignored | 1092 | 0 ignored |
441 | 1075 | 0 versioned subdirectories | 1093 | 0 versioned subdirectories |
442 | @@ -1165,6 +1183,7 @@ | |||
443 | 1165 | 0 added | 1183 | 0 added |
444 | 1166 | 0 removed | 1184 | 0 removed |
445 | 1167 | 0 renamed | 1185 | 0 renamed |
446 | 1186 | 0 copied | ||
447 | 1168 | 0 unknown | 1187 | 0 unknown |
448 | 1169 | 0 ignored | 1188 | 0 ignored |
449 | 1170 | 0 versioned subdirectories | 1189 | 0 versioned subdirectories |
450 | @@ -1348,6 +1367,7 @@ | |||
451 | 1348 | 0 added | 1367 | 0 added |
452 | 1349 | 0 removed | 1368 | 0 removed |
453 | 1350 | 0 renamed | 1369 | 0 renamed |
454 | 1370 | 0 copied | ||
455 | 1351 | 0 unknown | 1371 | 0 unknown |
456 | 1352 | 0 ignored | 1372 | 0 ignored |
457 | 1353 | 0 versioned subdirectories | 1373 | 0 versioned subdirectories |
458 | @@ -1498,6 +1518,7 @@ | |||
459 | 1498 | 0 added | 1518 | 0 added |
460 | 1499 | 0 removed | 1519 | 0 removed |
461 | 1500 | 0 renamed | 1520 | 0 renamed |
462 | 1521 | 0 copied | ||
463 | 1501 | 0 unknown | 1522 | 0 unknown |
464 | 1502 | 0 ignored | 1523 | 0 ignored |
465 | 1503 | 0 versioned subdirectories | 1524 | 0 versioned subdirectories |
466 | 1504 | 1525 | ||
467 | === modified file 'breezy/tests/per_intertree/test_compare.py' | |||
468 | --- breezy/tests/per_intertree/test_compare.py 2019-08-11 13:33:45 +0000 | |||
469 | +++ breezy/tests/per_intertree/test_compare.py 2019-09-21 23:05:30 +0000 | |||
470 | @@ -82,6 +82,7 @@ | |||
471 | 82 | self.assertEqual([], d.modified) | 82 | self.assertEqual([], d.modified) |
472 | 83 | self.assertEqual([], d.removed) | 83 | self.assertEqual([], d.removed) |
473 | 84 | self.assertEqual([], d.renamed) | 84 | self.assertEqual([], d.renamed) |
474 | 85 | self.assertEqual([], d.copied) | ||
475 | 85 | self.assertEqual([], d.unchanged) | 86 | self.assertEqual([], d.unchanged) |
476 | 86 | 87 | ||
477 | 87 | def test_empty_to_abc_content(self): | 88 | def test_empty_to_abc_content(self): |
478 | @@ -98,6 +99,7 @@ | |||
479 | 98 | self.assertEqual([], d.modified) | 99 | self.assertEqual([], d.modified) |
480 | 99 | self.assertEqual([], d.removed) | 100 | self.assertEqual([], d.removed) |
481 | 100 | self.assertEqual([], d.renamed) | 101 | self.assertEqual([], d.renamed) |
482 | 102 | self.assertEqual([], d.copied) | ||
483 | 101 | self.assertEqual([], d.unchanged) | 103 | self.assertEqual([], d.unchanged) |
484 | 102 | 104 | ||
485 | 103 | def test_dangling(self): | 105 | def test_dangling(self): |
486 | @@ -125,6 +127,7 @@ | |||
487 | 125 | self.assertEqual([], d.modified) | 127 | self.assertEqual([], d.modified) |
488 | 126 | self.assertEqual([], d.removed) | 128 | self.assertEqual([], d.removed) |
489 | 127 | self.assertEqual([], d.renamed) | 129 | self.assertEqual([], d.renamed) |
490 | 130 | self.assertEqual([], d.copied) | ||
491 | 128 | self.assertEqual([], d.unchanged) | 131 | self.assertEqual([], d.unchanged) |
492 | 129 | 132 | ||
493 | 130 | def test_abc_content_to_empty(self): | 133 | def test_abc_content_to_empty(self): |
494 | @@ -142,6 +145,7 @@ | |||
495 | 142 | ('b/c', 'file'), | 145 | ('b/c', 'file'), |
496 | 143 | ], [(c.path[0], c.kind[0]) for c in d.removed]) | 146 | ], [(c.path[0], c.kind[0]) for c in d.removed]) |
497 | 144 | self.assertEqual([], d.renamed) | 147 | self.assertEqual([], d.renamed) |
498 | 148 | self.assertEqual([], d.copied) | ||
499 | 145 | self.assertEqual([], d.unchanged) | 149 | self.assertEqual([], d.unchanged) |
500 | 146 | 150 | ||
501 | 147 | def test_content_modification(self): | 151 | def test_content_modification(self): |
502 | @@ -159,6 +163,7 @@ | |||
503 | 159 | for c in d.modified]) | 163 | for c in d.modified]) |
504 | 160 | self.assertEqual([], d.removed) | 164 | self.assertEqual([], d.removed) |
505 | 161 | self.assertEqual([], d.renamed) | 165 | self.assertEqual([], d.renamed) |
506 | 166 | self.assertEqual([], d.copied) | ||
507 | 162 | self.assertEqual([], d.unchanged) | 167 | self.assertEqual([], d.unchanged) |
508 | 163 | 168 | ||
509 | 164 | def test_meta_modification(self): | 169 | def test_meta_modification(self): |
510 | @@ -176,6 +181,7 @@ | |||
511 | 176 | for c in d.modified]) | 181 | for c in d.modified]) |
512 | 177 | self.assertEqual([], d.removed) | 182 | self.assertEqual([], d.removed) |
513 | 178 | self.assertEqual([], d.renamed) | 183 | self.assertEqual([], d.renamed) |
514 | 184 | self.assertEqual([], d.copied) | ||
515 | 179 | self.assertEqual([], d.unchanged) | 185 | self.assertEqual([], d.unchanged) |
516 | 180 | 186 | ||
517 | 181 | def test_file_rename(self): | 187 | def test_file_rename(self): |
518 | @@ -189,6 +195,7 @@ | |||
519 | 189 | self.assertEqual([], d.added) | 195 | self.assertEqual([], d.added) |
520 | 190 | self.assertEqual([], d.modified) | 196 | self.assertEqual([], d.modified) |
521 | 191 | self.assertEqual([], d.removed) | 197 | self.assertEqual([], d.removed) |
522 | 198 | self.assertEqual([], d.copied) | ||
523 | 192 | self.assertEqual( | 199 | self.assertEqual( |
524 | 193 | [('a', 'd', 'file', False, False)], | 200 | [('a', 'd', 'file', False, False)], |
525 | 194 | [(c.path[0], c.path[1], c.kind[1], c.changed_content, c.meta_modified()) | 201 | [(c.path[0], c.path[1], c.kind[1], c.changed_content, c.meta_modified()) |
526 | @@ -206,6 +213,7 @@ | |||
527 | 206 | self.assertEqual([], d.added) | 213 | self.assertEqual([], d.added) |
528 | 207 | self.assertEqual([], d.modified) | 214 | self.assertEqual([], d.modified) |
529 | 208 | self.assertEqual([], d.removed) | 215 | self.assertEqual([], d.removed) |
530 | 216 | self.assertEqual([], d.copied) | ||
531 | 209 | self.assertEqual( | 217 | self.assertEqual( |
532 | 210 | [('a', 'd', 'file', True, False)], | 218 | [('a', 'd', 'file', True, False)], |
533 | 211 | [(c.path[0], c.path[1], c.kind[1], c.changed_content, c.meta_modified()) | 219 | [(c.path[0], c.path[1], c.kind[1], c.changed_content, c.meta_modified()) |
534 | @@ -227,6 +235,7 @@ | |||
535 | 227 | [('b/c', 'e', 'file', False, True)], | 235 | [('b/c', 'e', 'file', False, True)], |
536 | 228 | [(c.path[0], c.path[1], c.kind[1], c.changed_content, c.meta_modified()) | 236 | [(c.path[0], c.path[1], c.kind[1], c.changed_content, c.meta_modified()) |
537 | 229 | for c in d.renamed]) | 237 | for c in d.renamed]) |
538 | 238 | self.assertEqual([], d.copied) | ||
539 | 230 | self.assertEqual([], d.unchanged) | 239 | self.assertEqual([], d.unchanged) |
540 | 231 | 240 | ||
541 | 232 | def test_empty_to_abc_content_a_only(self): | 241 | def test_empty_to_abc_content_a_only(self): |
542 | @@ -243,6 +252,7 @@ | |||
543 | 243 | self.assertEqual([], d.modified) | 252 | self.assertEqual([], d.modified) |
544 | 244 | self.assertEqual([], d.removed) | 253 | self.assertEqual([], d.removed) |
545 | 245 | self.assertEqual([], d.renamed) | 254 | self.assertEqual([], d.renamed) |
546 | 255 | self.assertEqual([], d.copied) | ||
547 | 246 | self.assertEqual([], d.unchanged) | 256 | self.assertEqual([], d.unchanged) |
548 | 247 | 257 | ||
549 | 248 | def test_empty_to_abc_content_a_and_c_only(self): | 258 | def test_empty_to_abc_content_a_and_c_only(self): |
550 | @@ -261,6 +271,7 @@ | |||
551 | 261 | self.assertEqual([], d.modified) | 271 | self.assertEqual([], d.modified) |
552 | 262 | self.assertEqual([], d.removed) | 272 | self.assertEqual([], d.removed) |
553 | 263 | self.assertEqual([], d.renamed) | 273 | self.assertEqual([], d.renamed) |
554 | 274 | self.assertEqual([], d.copied) | ||
555 | 264 | self.assertEqual([], d.unchanged) | 275 | self.assertEqual([], d.unchanged) |
556 | 265 | 276 | ||
557 | 266 | def test_empty_to_abc_content_c_only(self): | 277 | def test_empty_to_abc_content_c_only(self): |
558 | @@ -277,6 +288,7 @@ | |||
559 | 277 | self.assertEqual([], d.modified) | 288 | self.assertEqual([], d.modified) |
560 | 278 | self.assertEqual([], d.removed) | 289 | self.assertEqual([], d.removed) |
561 | 279 | self.assertEqual([], d.renamed) | 290 | self.assertEqual([], d.renamed) |
562 | 291 | self.assertEqual([], d.copied) | ||
563 | 280 | self.assertEqual([], d.unchanged) | 292 | self.assertEqual([], d.unchanged) |
564 | 281 | 293 | ||
565 | 282 | def test_empty_to_abc_content_b_only(self): | 294 | def test_empty_to_abc_content_b_only(self): |
566 | @@ -293,6 +305,7 @@ | |||
567 | 293 | self.assertEqual([], d.modified) | 305 | self.assertEqual([], d.modified) |
568 | 294 | self.assertEqual([], d.removed) | 306 | self.assertEqual([], d.removed) |
569 | 295 | self.assertEqual([], d.renamed) | 307 | self.assertEqual([], d.renamed) |
570 | 308 | self.assertEqual([], d.copied) | ||
571 | 296 | self.assertEqual([], d.unchanged) | 309 | self.assertEqual([], d.unchanged) |
572 | 297 | 310 | ||
573 | 298 | def test_unchanged_with_renames_and_modifications(self): | 311 | def test_unchanged_with_renames_and_modifications(self): |
574 | @@ -312,6 +325,7 @@ | |||
575 | 312 | self.assertEqual( | 325 | self.assertEqual( |
576 | 313 | [(u'b', 'directory'), (u'b/c', 'file')], | 326 | [(u'b', 'directory'), (u'b/c', 'file')], |
577 | 314 | [(c.path[0], c.kind[0]) for c in d.unchanged]) | 327 | [(c.path[0], c.kind[0]) for c in d.unchanged]) |
578 | 328 | self.assertEqual([], d.copied) | ||
579 | 315 | 329 | ||
580 | 316 | def test_extra_trees_finds_ids(self): | 330 | def test_extra_trees_finds_ids(self): |
581 | 317 | """Ask for a delta between two trees with a path present in a third.""" | 331 | """Ask for a delta between two trees with a path present in a third.""" |
582 | @@ -345,6 +359,7 @@ | |||
583 | 345 | [(c.path[1], c.kind[1], c.changed_content, c.meta_modified()) for c in d.modified]) | 359 | [(c.path[1], c.kind[1], c.changed_content, c.meta_modified()) for c in d.modified]) |
584 | 346 | self.assertEqual([], d.removed) | 360 | self.assertEqual([], d.removed) |
585 | 347 | self.assertEqual([], d.renamed) | 361 | self.assertEqual([], d.renamed) |
586 | 362 | self.assertEqual([], d.copied) | ||
587 | 348 | self.assertEqual([], d.unchanged) | 363 | self.assertEqual([], d.unchanged) |
588 | 349 | 364 | ||
589 | 350 | def test_require_versioned(self): | 365 | def test_require_versioned(self): |
590 | @@ -380,6 +395,7 @@ | |||
591 | 380 | for c in d.modified]) | 395 | for c in d.modified]) |
592 | 381 | self.assertEqual([], d.removed) | 396 | self.assertEqual([], d.removed) |
593 | 382 | self.assertEqual([], d.renamed) | 397 | self.assertEqual([], d.renamed) |
594 | 398 | self.assertEqual([], d.copied) | ||
595 | 383 | self.assertEqual([], d.unchanged) | 399 | self.assertEqual([], d.unchanged) |
596 | 384 | self.assertEqual([], d.unversioned) | 400 | self.assertEqual([], d.unversioned) |
597 | 385 | 401 | ||
598 | @@ -400,6 +416,7 @@ | |||
599 | 400 | self.assertEqual([], d.modified) | 416 | self.assertEqual([], d.modified) |
600 | 401 | self.assertEqual([], d.removed) | 417 | self.assertEqual([], d.removed) |
601 | 402 | self.assertEqual([], d.renamed) | 418 | self.assertEqual([], d.renamed) |
602 | 419 | self.assertEqual([], d.copied) | ||
603 | 403 | self.assertEqual([], d.unchanged) | 420 | self.assertEqual([], d.unchanged) |
604 | 404 | expected_unversioned = [(u'dir', 'directory'), | 421 | expected_unversioned = [(u'dir', 'directory'), |
605 | 405 | (u'file', 'file')] | 422 | (u'file', 'file')] |
606 | @@ -765,7 +782,7 @@ | |||
607 | 765 | root_id = tree1.path2id('') | 782 | root_id = tree1.path2id('') |
608 | 766 | self.assertEqual([(b'a-id', ('a', 'a'), True, (True, True), | 783 | self.assertEqual([(b'a-id', ('a', 'a'), True, (True, True), |
609 | 767 | (root_id, root_id), ('a', 'a'), | 784 | (root_id, root_id), ('a', 'a'), |
611 | 768 | ('file', 'file'), (False, False))], | 785 | ('file', 'file'), (False, False), False)], |
612 | 769 | self.do_iter_changes(tree1, tree2)) | 786 | self.do_iter_changes(tree1, tree2)) |
613 | 770 | self.check_has_changes(True, tree1, tree2) | 787 | self.check_has_changes(True, tree1, tree2) |
614 | 771 | 788 | ||
615 | @@ -777,7 +794,7 @@ | |||
616 | 777 | tree1, tree2 = self.mutable_trees_to_test_trees(self, tree1, tree2) | 794 | tree1, tree2 = self.mutable_trees_to_test_trees(self, tree1, tree2) |
617 | 778 | self.assertEqual([(b'c-id', ('b/c', 'b/c'), False, (True, True), | 795 | self.assertEqual([(b'c-id', ('b/c', 'b/c'), False, (True, True), |
618 | 779 | (b'b-id', b'b-id'), ('c', 'c'), ('file', 'file'), | 796 | (b'b-id', b'b-id'), ('c', 'c'), ('file', 'file'), |
620 | 780 | (False, True))], | 797 | (False, True), False)], |
621 | 781 | self.do_iter_changes(tree1, tree2)) | 798 | self.do_iter_changes(tree1, tree2)) |
622 | 782 | 799 | ||
623 | 783 | def test_empty_dir(self): | 800 | def test_empty_dir(self): |
624 | @@ -803,7 +820,7 @@ | |||
625 | 803 | root_id = tree1.path2id('') | 820 | root_id = tree1.path2id('') |
626 | 804 | self.assertEqual([(tree1.path2id('a'), ('a', 'd'), False, (True, True), | 821 | self.assertEqual([(tree1.path2id('a'), ('a', 'd'), False, (True, True), |
627 | 805 | (root_id, root_id), ('a', 'd'), ('file', 'file'), | 822 | (root_id, root_id), ('a', 'd'), ('file', 'file'), |
629 | 806 | (False, False))], | 823 | (False, False), False)], |
630 | 807 | self.do_iter_changes(tree1, tree2)) | 824 | self.do_iter_changes(tree1, tree2)) |
631 | 808 | 825 | ||
632 | 809 | def test_file_rename_and_modification(self): | 826 | def test_file_rename_and_modification(self): |
633 | @@ -815,7 +832,7 @@ | |||
634 | 815 | root_id = tree1.path2id('') | 832 | root_id = tree1.path2id('') |
635 | 816 | self.assertEqual([(b'a-id', ('a', 'd'), True, (True, True), | 833 | self.assertEqual([(b'a-id', ('a', 'd'), True, (True, True), |
636 | 817 | (root_id, root_id), ('a', 'd'), ('file', 'file'), | 834 | (root_id, root_id), ('a', 'd'), ('file', 'file'), |
638 | 818 | (False, False))], | 835 | (False, False), False)], |
639 | 819 | self.do_iter_changes(tree1, tree2)) | 836 | self.do_iter_changes(tree1, tree2)) |
640 | 820 | 837 | ||
641 | 821 | def test_specific_content_modification_grabs_parents(self): | 838 | def test_specific_content_modification_grabs_parents(self): |
642 | @@ -1030,7 +1047,7 @@ | |||
643 | 1030 | root_id = tree1.path2id('') | 1047 | root_id = tree1.path2id('') |
644 | 1031 | self.assertEqual([(b'c-id', ('b/c', 'e'), False, (True, True), | 1048 | self.assertEqual([(b'c-id', ('b/c', 'e'), False, (True, True), |
645 | 1032 | (b'b-id', root_id), ('c', 'e'), ('file', 'file'), | 1049 | (b'b-id', root_id), ('c', 'e'), ('file', 'file'), |
647 | 1033 | (False, True))], | 1050 | (False, True), False)], |
648 | 1034 | self.do_iter_changes(tree1, tree2)) | 1051 | self.do_iter_changes(tree1, tree2)) |
649 | 1035 | 1052 | ||
650 | 1036 | def test_file_becomes_unversionable_bug_438569(self): | 1053 | def test_file_becomes_unversionable_bug_438569(self): |
651 | 1037 | 1054 | ||
652 | === modified file 'breezy/tests/per_repository_vf/test_fileid_involved.py' | |||
653 | --- breezy/tests/per_repository_vf/test_fileid_involved.py 2019-08-11 13:33:45 +0000 | |||
654 | +++ breezy/tests/per_repository_vf/test_fileid_involved.py 2019-09-21 23:05:30 +0000 | |||
655 | @@ -138,7 +138,8 @@ | |||
656 | 138 | 138 | ||
657 | 139 | l2 = [change.file_id for change in delta.added] + \ | 139 | l2 = [change.file_id for change in delta.added] + \ |
658 | 140 | [change.file_id for change in delta.renamed] + \ | 140 | [change.file_id for change in delta.renamed] + \ |
660 | 141 | [change.file_id for change in delta.modified] | 141 | [change.file_id for change in delta.modified] + \ |
661 | 142 | [change.file_id for change in delta.copied] | ||
662 | 142 | return set(l2) | 143 | return set(l2) |
663 | 143 | 144 | ||
664 | 144 | 145 | ||
665 | 145 | 146 | ||
666 | === modified file 'breezy/tests/per_workingtree/test_changes_from.py' | |||
667 | --- breezy/tests/per_workingtree/test_changes_from.py 2018-11-11 04:08:32 +0000 | |||
668 | +++ breezy/tests/per_workingtree/test_changes_from.py 2019-09-21 23:05:30 +0000 | |||
669 | @@ -37,6 +37,7 @@ | |||
670 | 37 | self.assertEqual([], d.added) | 37 | self.assertEqual([], d.added) |
671 | 38 | self.assertEqual([], d.removed) | 38 | self.assertEqual([], d.removed) |
672 | 39 | self.assertEqual([], d.renamed) | 39 | self.assertEqual([], d.renamed) |
673 | 40 | self.assertEqual([], d.copied) | ||
674 | 40 | self.assertEqual([], d.modified) | 41 | self.assertEqual([], d.modified) |
675 | 41 | 42 | ||
676 | 42 | def test_unknown_specific_file(self): | 43 | def test_unknown_specific_file(self): |
677 | @@ -51,4 +52,5 @@ | |||
678 | 51 | self.assertEqual([], d.added) | 52 | self.assertEqual([], d.added) |
679 | 52 | self.assertEqual([], d.removed) | 53 | self.assertEqual([], d.removed) |
680 | 53 | self.assertEqual([], d.renamed) | 54 | self.assertEqual([], d.renamed) |
681 | 55 | self.assertEqual([], d.copied) | ||
682 | 54 | self.assertEqual([], d.modified) | 56 | self.assertEqual([], d.modified) |
683 | 55 | 57 | ||
684 | === modified file 'breezy/tests/test_delta.py' | |||
685 | --- breezy/tests/test_delta.py 2019-06-29 19:50:18 +0000 | |||
686 | +++ breezy/tests/test_delta.py 2019-09-21 23:05:30 +0000 | |||
687 | @@ -32,10 +32,10 @@ | |||
688 | 32 | def __init__(self): | 32 | def __init__(self): |
689 | 33 | self.calls = [] | 33 | self.calls = [] |
690 | 34 | 34 | ||
692 | 35 | def report(self, path, versioned, renamed, modified, exe_change, | 35 | def report(self, path, versioned, renamed, copied, modified, exe_change, |
693 | 36 | kind): | 36 | kind): |
694 | 37 | self.calls.append( | 37 | self.calls.append( |
696 | 38 | (path, versioned, renamed, modified, exe_change, kind)) | 38 | (path, versioned, renamed, copied, modified, exe_change, kind)) |
697 | 39 | 39 | ||
698 | 40 | 40 | ||
699 | 41 | class TestReportChanges(tests.TestCase): | 41 | class TestReportChanges(tests.TestCase): |
700 | @@ -43,7 +43,7 @@ | |||
701 | 43 | 43 | ||
702 | 44 | def assertReport(self, expected, file_id=b'fid', path='path', | 44 | def assertReport(self, expected, file_id=b'fid', path='path', |
703 | 45 | versioned_change='unchanged', renamed=False, | 45 | versioned_change='unchanged', renamed=False, |
705 | 46 | modified='unchanged', exe_change=False, | 46 | copied=False, modified='unchanged', exe_change=False, |
706 | 47 | kind=('file', 'file'), old_path=None, | 47 | kind=('file', 'file'), old_path=None, |
707 | 48 | unversioned_filter=None, view_info=None): | 48 | unversioned_filter=None, view_info=None): |
708 | 49 | if expected is None: | 49 | if expected is None: |
709 | @@ -52,12 +52,12 @@ | |||
710 | 52 | expected_lines = [expected] | 52 | expected_lines = [expected] |
711 | 53 | self.assertReportLines(expected_lines, file_id, path, | 53 | self.assertReportLines(expected_lines, file_id, path, |
712 | 54 | versioned_change, renamed, | 54 | versioned_change, renamed, |
714 | 55 | modified, exe_change, | 55 | copied, modified, exe_change, |
715 | 56 | kind, old_path, | 56 | kind, old_path, |
716 | 57 | unversioned_filter, view_info) | 57 | unversioned_filter, view_info) |
717 | 58 | 58 | ||
718 | 59 | def assertReportLines(self, expected_lines, file_id=b'fid', path='path', | 59 | def assertReportLines(self, expected_lines, file_id=b'fid', path='path', |
720 | 60 | versioned_change='unchanged', renamed=False, | 60 | versioned_change='unchanged', renamed=False, copied=False, |
721 | 61 | modified='unchanged', exe_change=False, | 61 | modified='unchanged', exe_change=False, |
722 | 62 | kind=('file', 'file'), old_path=None, | 62 | kind=('file', 'file'), old_path=None, |
723 | 63 | unversioned_filter=None, view_info=None): | 63 | unversioned_filter=None, view_info=None): |
724 | @@ -65,9 +65,10 @@ | |||
725 | 65 | 65 | ||
726 | 66 | def result_line(format, *args): | 66 | def result_line(format, *args): |
727 | 67 | result.append(format % args) | 67 | result.append(format % args) |
731 | 68 | reporter = _mod_delta._ChangeReporter(result_line, | 68 | reporter = _mod_delta._ChangeReporter( |
732 | 69 | unversioned_filter=unversioned_filter, view_info=view_info) | 69 | result_line, unversioned_filter=unversioned_filter, |
733 | 70 | reporter.report((old_path, path), versioned_change, renamed, | 70 | view_info=view_info) |
734 | 71 | reporter.report((old_path, path), versioned_change, renamed, copied, | ||
735 | 71 | modified, exe_change, kind) | 72 | modified, exe_change, kind) |
736 | 72 | if expected_lines is not None: | 73 | if expected_lines is not None: |
737 | 73 | self.assertEqualDiff('\n'.join(expected_lines), '\n'.join(result)) | 74 | self.assertEqualDiff('\n'.join(expected_lines), '\n'.join(result)) |
738 | @@ -158,20 +159,22 @@ | |||
739 | 158 | executable=(False, False), | 159 | executable=(False, False), |
740 | 159 | versioned_change='unchanged', | 160 | versioned_change='unchanged', |
741 | 160 | renamed=False, | 161 | renamed=False, |
742 | 162 | copied=False, | ||
743 | 161 | modified='unchanged', | 163 | modified='unchanged', |
744 | 162 | exe_change=False): | 164 | exe_change=False): |
745 | 163 | reporter = InstrumentedReporter() | 165 | reporter = InstrumentedReporter() |
746 | 164 | _mod_delta.report_changes([ | 166 | _mod_delta.report_changes([ |
747 | 165 | TreeChange( | 167 | TreeChange( |
748 | 166 | file_id, paths, content_change, versioned, parent_id, | 168 | file_id, paths, content_change, versioned, parent_id, |
750 | 167 | name, kind, executable)], reporter) | 169 | name, kind, executable, copied)], reporter) |
751 | 168 | output = reporter.calls[0] | 170 | output = reporter.calls[0] |
752 | 169 | self.assertEqual(paths, output[0]) | 171 | self.assertEqual(paths, output[0]) |
753 | 170 | self.assertEqual(versioned_change, output[1]) | 172 | self.assertEqual(versioned_change, output[1]) |
754 | 171 | self.assertEqual(renamed, output[2]) | 173 | self.assertEqual(renamed, output[2]) |
758 | 172 | self.assertEqual(modified, output[3]) | 174 | self.assertEqual(copied, output[3]) |
759 | 173 | self.assertEqual(exe_change, output[4]) | 175 | self.assertEqual(modified, output[4]) |
760 | 174 | self.assertEqual(kind, output[5]) | 176 | self.assertEqual(exe_change, output[5]) |
761 | 177 | self.assertEqual(kind, output[6]) | ||
762 | 175 | 178 | ||
763 | 176 | def test_report_changes(self): | 179 | def test_report_changes(self): |
764 | 177 | """Test change detection of report_changes""" | 180 | """Test change detection of report_changes""" |
765 | 178 | 181 | ||
766 | === modified file 'breezy/tests/test_missing.py' | |||
767 | --- breezy/tests/test_missing.py 2019-06-29 19:50:18 +0000 | |||
768 | +++ breezy/tests/test_missing.py 2019-09-21 23:05:30 +0000 | |||
769 | @@ -106,6 +106,7 @@ | |||
770 | 106 | self.assertEqual([('b', 'file')], [(c.path[1], c.kind[1]) for c in delta0.added]) | 106 | self.assertEqual([('b', 'file')], [(c.path[1], c.kind[1]) for c in delta0.added]) |
771 | 107 | self.assertEqual([], delta0.removed) | 107 | self.assertEqual([], delta0.removed) |
772 | 108 | self.assertEqual([], delta0.renamed) | 108 | self.assertEqual([], delta0.renamed) |
773 | 109 | self.assertEqual([], delta0.copied) | ||
774 | 109 | self.assertEqual([], delta0.modified) | 110 | self.assertEqual([], delta0.modified) |
775 | 110 | 111 | ||
776 | 111 | delta1 = r1.delta | 112 | delta1 = r1.delta |
777 | @@ -113,6 +114,7 @@ | |||
778 | 113 | self.assertEqual([], delta1.added) | 114 | self.assertEqual([], delta1.added) |
779 | 114 | self.assertEqual([('a', 'file')], [(c.path[0], c.kind[0]) for c in delta1.removed]) | 115 | self.assertEqual([('a', 'file')], [(c.path[0], c.kind[0]) for c in delta1.removed]) |
780 | 115 | self.assertEqual([], delta1.renamed) | 116 | self.assertEqual([], delta1.renamed) |
781 | 117 | self.assertEqual([], delta1.copied) | ||
782 | 116 | self.assertEqual([], delta1.modified) | 118 | self.assertEqual([], delta1.modified) |
783 | 117 | 119 | ||
784 | 118 | delta2 = r2.delta | 120 | delta2 = r2.delta |
785 | @@ -120,6 +122,7 @@ | |||
786 | 120 | self.assertEqual([], delta2.added) | 122 | self.assertEqual([], delta2.added) |
787 | 121 | self.assertEqual([], delta2.removed) | 123 | self.assertEqual([], delta2.removed) |
788 | 122 | self.assertEqual([], delta2.renamed) | 124 | self.assertEqual([], delta2.renamed) |
789 | 125 | self.assertEqual([], delta2.copied) | ||
790 | 123 | self.assertEqual( | 126 | self.assertEqual( |
791 | 124 | [('b', 'file', True, False)], | 127 | [('b', 'file', True, False)], |
792 | 125 | [(c.path[1], c.kind[1], c.changed_content, c.meta_modified()) for c in delta2.modified]) | 128 | [(c.path[1], c.kind[1], c.changed_content, c.meta_modified()) for c in delta2.modified]) |
793 | @@ -127,6 +130,7 @@ | |||
794 | 127 | delta3 = r3.delta | 130 | delta3 = r3.delta |
795 | 128 | self.assertNotEqual(None, delta3) | 131 | self.assertNotEqual(None, delta3) |
796 | 129 | self.assertEqual([], delta3.added) | 132 | self.assertEqual([], delta3.added) |
797 | 133 | self.assertEqual([], delta3.copied) | ||
798 | 130 | self.assertEqual([], delta3.removed) | 134 | self.assertEqual([], delta3.removed) |
799 | 131 | self.assertEqual( | 135 | self.assertEqual( |
800 | 132 | [('b', 'c', 'file', False, False)], | 136 | [('b', 'c', 'file', False, False)], |
801 | 133 | 137 | ||
802 | === modified file 'breezy/tests/test_transform.py' | |||
803 | --- breezy/tests/test_transform.py 2019-06-29 13:16:26 +0000 | |||
804 | +++ breezy/tests/test_transform.py 2019-09-21 23:05:30 +0000 | |||
805 | @@ -1147,12 +1147,14 @@ | |||
806 | 1147 | self.assertEqual([(b'id-1', ('old', None), False, (True, False), | 1147 | self.assertEqual([(b'id-1', ('old', None), False, (True, False), |
807 | 1148 | (b'eert_toor', b'eert_toor'), | 1148 | (b'eert_toor', b'eert_toor'), |
808 | 1149 | ('old', 'old'), ('file', 'file'), | 1149 | ('old', 'old'), ('file', 'file'), |
810 | 1150 | (True, True))], list(transform.iter_changes())) | 1150 | (True, True), False)], |
811 | 1151 | list(transform.iter_changes())) | ||
812 | 1151 | transform.new_directory('new', root, b'id-1') | 1152 | transform.new_directory('new', root, b'id-1') |
813 | 1152 | self.assertEqual([(b'id-1', ('old', 'new'), True, (True, True), | 1153 | self.assertEqual([(b'id-1', ('old', 'new'), True, (True, True), |
814 | 1153 | (b'eert_toor', b'eert_toor'), ('old', 'new'), | 1154 | (b'eert_toor', b'eert_toor'), ('old', 'new'), |
815 | 1154 | ('file', 'directory'), | 1155 | ('file', 'directory'), |
817 | 1155 | (True, False))], list(transform.iter_changes())) | 1156 | (True, False), False)], |
818 | 1157 | list(transform.iter_changes())) | ||
819 | 1156 | finally: | 1158 | finally: |
820 | 1157 | transform.finalize() | 1159 | transform.finalize() |
821 | 1158 | 1160 | ||
822 | @@ -1168,7 +1170,7 @@ | |||
823 | 1168 | self.assertEqual([(b'id-1', (None, 'old'), False, (False, True), | 1170 | self.assertEqual([(b'id-1', (None, 'old'), False, (False, True), |
824 | 1169 | (b'eert_toor', b'eert_toor'), | 1171 | (b'eert_toor', b'eert_toor'), |
825 | 1170 | ('old', 'old'), ('file', 'file'), | 1172 | ('old', 'old'), ('file', 'file'), |
827 | 1171 | (False, False))], | 1173 | (False, False), False)], |
828 | 1172 | list(transform.iter_changes())) | 1174 | list(transform.iter_changes())) |
829 | 1173 | finally: | 1175 | finally: |
830 | 1174 | transform.finalize() | 1176 | transform.finalize() |
831 | @@ -1192,7 +1194,7 @@ | |||
832 | 1192 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), | 1194 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), |
833 | 1193 | (b'eert_toor', b'eert_toor'), | 1195 | (b'eert_toor', b'eert_toor'), |
834 | 1194 | ('old', 'old'), ('file', None), | 1196 | ('old', 'old'), ('file', None), |
836 | 1195 | (False, False))], | 1197 | (False, False), False)], |
837 | 1196 | list(transform.iter_changes())) | 1198 | list(transform.iter_changes())) |
838 | 1197 | 1199 | ||
839 | 1198 | # content change | 1200 | # content change |
840 | @@ -1200,13 +1202,13 @@ | |||
841 | 1200 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), | 1202 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), |
842 | 1201 | (b'eert_toor', b'eert_toor'), | 1203 | (b'eert_toor', b'eert_toor'), |
843 | 1202 | ('old', 'old'), ('file', 'file'), | 1204 | ('old', 'old'), ('file', 'file'), |
845 | 1203 | (False, False))], | 1205 | (False, False), False)], |
846 | 1204 | list(transform.iter_changes())) | 1206 | list(transform.iter_changes())) |
847 | 1205 | transform.cancel_deletion(old) | 1207 | transform.cancel_deletion(old) |
848 | 1206 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), | 1208 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), |
849 | 1207 | (b'eert_toor', b'eert_toor'), | 1209 | (b'eert_toor', b'eert_toor'), |
850 | 1208 | ('old', 'old'), ('file', 'file'), | 1210 | ('old', 'old'), ('file', 'file'), |
852 | 1209 | (False, False))], | 1211 | (False, False), False)], |
853 | 1210 | list(transform.iter_changes())) | 1212 | list(transform.iter_changes())) |
854 | 1211 | transform.cancel_creation(old) | 1213 | transform.cancel_creation(old) |
855 | 1212 | 1214 | ||
856 | @@ -1218,7 +1220,7 @@ | |||
857 | 1218 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), | 1220 | self.assertEqual([(b'id-1', ('old', 'old'), True, (True, True), |
858 | 1219 | (b'eert_toor', b'eert_toor'), | 1221 | (b'eert_toor', b'eert_toor'), |
859 | 1220 | ('old', 'old'), ('file', 'file'), | 1222 | ('old', 'old'), ('file', 'file'), |
861 | 1221 | (False, False))], | 1223 | (False, False), False)], |
862 | 1222 | list(transform.iter_changes())) | 1224 | list(transform.iter_changes())) |
863 | 1223 | transform.cancel_versioning(new) | 1225 | transform.cancel_versioning(new) |
864 | 1224 | transform._removed_id = set() | 1226 | transform._removed_id = set() |
865 | @@ -1229,7 +1231,7 @@ | |||
866 | 1229 | self.assertEqual([(b'id-1', ('old', 'old'), False, (True, True), | 1231 | self.assertEqual([(b'id-1', ('old', 'old'), False, (True, True), |
867 | 1230 | (b'eert_toor', b'eert_toor'), | 1232 | (b'eert_toor', b'eert_toor'), |
868 | 1231 | ('old', 'old'), ('file', 'file'), | 1233 | ('old', 'old'), ('file', 'file'), |
870 | 1232 | (False, True))], | 1234 | (False, True), False)], |
871 | 1233 | list(transform.iter_changes())) | 1235 | list(transform.iter_changes())) |
872 | 1234 | transform.set_executability(None, old) | 1236 | transform.set_executability(None, old) |
873 | 1235 | 1237 | ||
874 | @@ -1240,7 +1242,7 @@ | |||
875 | 1240 | self.assertEqual([(b'id-1', ('old', 'new'), False, (True, True), | 1242 | self.assertEqual([(b'id-1', ('old', 'new'), False, (True, True), |
876 | 1241 | (b'eert_toor', b'eert_toor'), | 1243 | (b'eert_toor', b'eert_toor'), |
877 | 1242 | ('old', 'new'), ('file', 'file'), | 1244 | ('old', 'new'), ('file', 'file'), |
879 | 1243 | (False, False))], | 1245 | (False, False), False)], |
880 | 1244 | list(transform.iter_changes())) | 1246 | list(transform.iter_changes())) |
881 | 1245 | transform._new_name = {} | 1247 | transform._new_name = {} |
882 | 1246 | 1248 | ||
883 | @@ -1251,7 +1253,7 @@ | |||
884 | 1251 | self.assertEqual([(b'id-1', ('old', 'subdir/old'), False, | 1253 | self.assertEqual([(b'id-1', ('old', 'subdir/old'), False, |
885 | 1252 | (True, True), (b'eert_toor', | 1254 | (True, True), (b'eert_toor', |
886 | 1253 | b'subdir-id'), ('old', 'old'), | 1255 | b'subdir-id'), ('old', 'old'), |
888 | 1254 | ('file', 'file'), (False, False))], | 1256 | ('file', 'file'), (False, False), False)], |
889 | 1255 | list(transform.iter_changes())) | 1257 | list(transform.iter_changes())) |
890 | 1256 | transform._new_path = {} | 1258 | transform._new_path = {} |
891 | 1257 | 1259 | ||
892 | @@ -1277,10 +1279,10 @@ | |||
893 | 1277 | self.assertEqual( | 1279 | self.assertEqual( |
894 | 1278 | [(b'id-1', (u'file1', u'file1'), True, (True, True), | 1280 | [(b'id-1', (u'file1', u'file1'), True, (True, True), |
895 | 1279 | (b'eert_toor', b'eert_toor'), ('file1', u'file1'), | 1281 | (b'eert_toor', b'eert_toor'), ('file1', u'file1'), |
897 | 1280 | ('file', None), (False, False)), | 1282 | ('file', None), (False, False), False), |
898 | 1281 | (b'id-2', (u'file2', u'file2'), False, (True, True), | 1283 | (b'id-2', (u'file2', u'file2'), False, (True, True), |
899 | 1282 | (b'eert_toor', b'eert_toor'), ('file2', u'file2'), | 1284 | (b'eert_toor', b'eert_toor'), ('file2', u'file2'), |
901 | 1283 | ('file', 'file'), (False, True))], | 1285 | ('file', 'file'), (False, True), False)], |
902 | 1284 | list(transform.iter_changes())) | 1286 | list(transform.iter_changes())) |
903 | 1285 | finally: | 1287 | finally: |
904 | 1286 | transform.finalize() | 1288 | transform.finalize() |
905 | @@ -1303,7 +1305,7 @@ | |||
906 | 1303 | (True, True), | 1305 | (True, True), |
907 | 1304 | (b'toor_eert', b'toor_eert'), | 1306 | (b'toor_eert', b'toor_eert'), |
908 | 1305 | ('floater', 'flitter'), | 1307 | ('floater', 'flitter'), |
910 | 1306 | (None, None), (False, False))], | 1308 | (None, None), (False, False), False)], |
911 | 1307 | list(transform.iter_changes())) | 1309 | list(transform.iter_changes())) |
912 | 1308 | finally: | 1310 | finally: |
913 | 1309 | transform.finalize() | 1311 | transform.finalize() |
914 | @@ -2767,9 +2769,9 @@ | |||
915 | 2767 | 2769 | ||
916 | 2768 | A_ENTRY = (b'a-id', ('a', 'a'), True, (True, True), | 2770 | A_ENTRY = (b'a-id', ('a', 'a'), True, (True, True), |
917 | 2769 | (b'TREE_ROOT', b'TREE_ROOT'), ('a', 'a'), ('file', 'file'), | 2771 | (b'TREE_ROOT', b'TREE_ROOT'), ('a', 'a'), ('file', 'file'), |
919 | 2770 | (False, False)) | 2772 | (False, False), False) |
920 | 2771 | ROOT_ENTRY = (b'TREE_ROOT', ('', ''), False, (True, True), (None, None), | 2773 | ROOT_ENTRY = (b'TREE_ROOT', ('', ''), False, (True, True), (None, None), |
922 | 2772 | ('', ''), ('directory', 'directory'), (False, False)) | 2774 | ('', ''), ('directory', 'directory'), (False, False), False) |
923 | 2773 | 2775 | ||
924 | 2774 | 2776 | ||
925 | 2775 | class TestTransformPreview(tests.TestCaseWithTransport): | 2777 | class TestTransformPreview(tests.TestCaseWithTransport): |
926 | @@ -2875,7 +2877,7 @@ | |||
927 | 2875 | root = revision_tree.path2id('') | 2877 | root = revision_tree.path2id('') |
928 | 2876 | self.assertEqual([(b'a-id', ('a', 'a'), True, (True, True), | 2878 | self.assertEqual([(b'a-id', ('a', 'a'), True, (True, True), |
929 | 2877 | (root, root), ('a', 'a'), ('file', 'file'), | 2879 | (root, root), ('a', 'a'), ('file', 'file'), |
931 | 2878 | (False, False))], | 2880 | (False, False), False)], |
932 | 2879 | list(preview_tree.iter_changes(revision_tree))) | 2881 | list(preview_tree.iter_changes(revision_tree))) |
933 | 2880 | 2882 | ||
934 | 2881 | def test_include_unchanged_succeeds(self): | 2883 | def test_include_unchanged_succeeds(self): |
935 | 2882 | 2884 | ||
936 | === modified file 'breezy/tests/test_workingtree_4.py' | |||
937 | --- breezy/tests/test_workingtree_4.py 2019-09-21 17:08:09 +0000 | |||
938 | +++ breezy/tests/test_workingtree_4.py 2019-09-21 23:05:30 +0000 | |||
939 | @@ -592,9 +592,9 @@ | |||
940 | 592 | (None, b'root'), | 592 | (None, b'root'), |
941 | 593 | (None, u'dir'), | 593 | (None, u'dir'), |
942 | 594 | (None, 'directory'), | 594 | (None, 'directory'), |
944 | 595 | (None, False)), | 595 | (None, False), False), |
945 | 596 | (b'root', (None, u''), True, (False, True), (None, None), | 596 | (b'root', (None, u''), True, (False, True), (None, None), |
947 | 597 | (None, u''), (None, 'directory'), (None, 0))] | 597 | (None, u''), (None, 'directory'), (None, False), False)] |
948 | 598 | self.assertEqual( | 598 | self.assertEqual( |
949 | 599 | expected, | 599 | expected, |
950 | 600 | list(tree.iter_changes(tree.basis_tree(), specific_files=['dir']))) | 600 | list(tree.iter_changes(tree.basis_tree(), specific_files=['dir']))) |
951 | @@ -613,7 +613,7 @@ | |||
952 | 613 | (b'root', b'root'), | 613 | (b'root', b'root'), |
953 | 614 | ('dir', 'dir'), | 614 | ('dir', 'dir'), |
954 | 615 | ('directory', None), | 615 | ('directory', None), |
956 | 616 | (False, False))] | 616 | (False, False), False)] |
957 | 617 | self.assertEqual(expected, list(tree.iter_changes(tree.basis_tree()))) | 617 | self.assertEqual(expected, list(tree.iter_changes(tree.basis_tree()))) |
958 | 618 | tree.unlock() | 618 | tree.unlock() |
959 | 619 | 619 | ||
960 | 620 | 620 | ||
961 | === modified file 'breezy/tree.py' | |||
962 | --- breezy/tree.py 2019-09-21 17:08:09 +0000 | |||
963 | +++ breezy/tree.py 2019-09-21 23:05:30 +0000 | |||
964 | @@ -134,10 +134,10 @@ | |||
965 | 134 | """Describes the changes between the same item in two different trees.""" | 134 | """Describes the changes between the same item in two different trees.""" |
966 | 135 | 135 | ||
967 | 136 | __slots__ = ['file_id', 'path', 'changed_content', 'versioned', 'parent_id', | 136 | __slots__ = ['file_id', 'path', 'changed_content', 'versioned', 'parent_id', |
969 | 137 | 'name', 'kind', 'executable'] | 137 | 'name', 'kind', 'executable', 'copied'] |
970 | 138 | 138 | ||
971 | 139 | def __init__(self, file_id, path, changed_content, versioned, parent_id, | 139 | def __init__(self, file_id, path, changed_content, versioned, parent_id, |
973 | 140 | name, kind, executable): | 140 | name, kind, executable, copied=False): |
974 | 141 | self.file_id = file_id | 141 | self.file_id = file_id |
975 | 142 | self.path = path | 142 | self.path = path |
976 | 143 | self.changed_content = changed_content | 143 | self.changed_content = changed_content |
977 | @@ -146,6 +146,7 @@ | |||
978 | 146 | self.name = name | 146 | self.name = name |
979 | 147 | self.kind = kind | 147 | self.kind = kind |
980 | 148 | self.executable = executable | 148 | self.executable = executable |
981 | 149 | self.copied = copied | ||
982 | 149 | 150 | ||
983 | 150 | def __repr__(self): | 151 | def __repr__(self): |
984 | 151 | return "%s%r" % (self.__class__.__name__, self._as_tuple()) | 152 | return "%s%r" % (self.__class__.__name__, self._as_tuple()) |
985 | @@ -155,7 +156,7 @@ | |||
986 | 155 | 156 | ||
987 | 156 | def _as_tuple(self): | 157 | def _as_tuple(self): |
988 | 157 | return (self.file_id, self.path, self.changed_content, self.versioned, | 158 | return (self.file_id, self.path, self.changed_content, self.versioned, |
990 | 158 | self.parent_id, self.name, self.kind, self.executable) | 159 | self.parent_id, self.name, self.kind, self.executable, self.copied) |
991 | 159 | 160 | ||
992 | 160 | def __eq__(self, other): | 161 | def __eq__(self, other): |
993 | 161 | if isinstance(other, TreeChange): | 162 | if isinstance(other, TreeChange): |
994 | @@ -180,7 +181,8 @@ | |||
995 | 180 | self.file_id, (self.path[0], None), self.changed_content, | 181 | self.file_id, (self.path[0], None), self.changed_content, |
996 | 181 | (self.versioned[0], None), (self.parent_id[0], None), | 182 | (self.versioned[0], None), (self.parent_id[0], None), |
997 | 182 | (self.name[0], None), (self.kind[0], None), | 183 | (self.name[0], None), (self.kind[0], None), |
999 | 183 | (self.executable[0], None)) | 184 | (self.executable[0], None), |
1000 | 185 | copied=False) | ||
1001 | 184 | 186 | ||
1002 | 185 | 187 | ||
1003 | 186 | class Tree(object): | 188 | class Tree(object): |
1004 | 187 | 189 | ||
1005 | === modified file 'breezy/version_info_formats/__init__.py' | |||
1006 | --- breezy/version_info_formats/__init__.py 2019-06-29 19:50:18 +0000 | |||
1007 | +++ breezy/version_info_formats/__init__.py 2019-09-21 23:05:30 +0000 | |||
1008 | @@ -134,6 +134,10 @@ | |||
1009 | 134 | self._clean = False | 134 | self._clean = False |
1010 | 135 | self._file_revisions[change.path[1]] = u'renamed from %s' % ( | 135 | self._file_revisions[change.path[1]] = u'renamed from %s' % ( |
1011 | 136 | change.path[0],) | 136 | change.path[0],) |
1012 | 137 | for change in delta.copied: | ||
1013 | 138 | self._clean = False | ||
1014 | 139 | self._file_revisions[change.path[1]] = u'copied from %s' % ( | ||
1015 | 140 | change.path[0],) | ||
1016 | 137 | for change in delta.modified: | 141 | for change in delta.modified: |
1017 | 138 | self._clean = False | 142 | self._clean = False |
1018 | 139 | self._file_revisions[change.path[1]] = 'modified' | 143 | self._file_revisions[change.path[1]] = 'modified' |
I think this is all reasonable. The pattern of using `+` on lists just to iterate is slightly bogus, but guess there would need to be a lot of changes to really matter then likely other things would be slow.