41
42
# u'\xe5' == a with circle
42
43
# '\xc3\xae' == u'\xee' == i with hat
43
44
# So these are u'path' and 'id' only with a circle and a hat. (shappo?)
44
example_conflicts = conflicts.ConflictList(
45
[conflicts.MissingParent('Not deleting', u'p\xe5thg', b'\xc3\xaedg'),
46
conflicts.ContentsConflict(u'p\xe5tha', None, b'\xc3\xaeda'),
47
conflicts.TextConflict(u'p\xe5tha'),
48
conflicts.PathConflict(u'p\xe5thb', u'p\xe5thc', b'\xc3\xaedb'),
49
conflicts.DuplicateID('Unversioned existing file',
50
u'p\xe5thc', u'p\xe5thc2',
51
b'\xc3\xaedc', b'\xc3\xaedc'),
52
conflicts.DuplicateEntry('Moved existing file to',
53
u'p\xe5thdd.moved', u'p\xe5thd',
55
conflicts.ParentLoop('Cancelled move', u'p\xe5the', u'p\xe5th2e',
56
None, b'\xc3\xaed2e'),
57
conflicts.UnversionedParent('Versioned directory',
58
u'p\xe5thf', b'\xc3\xaedf'),
59
conflicts.NonDirectoryParent('Created directory',
60
u'p\xe5thg', b'\xc3\xaedg'),
46
bzr_conflicts.MissingParent('Not deleting', u'p\xe5thg', b'\xc3\xaedg'),
47
bzr_conflicts.ContentsConflict(u'p\xe5tha', None, b'\xc3\xaeda'),
48
bzr_conflicts.TextConflict(u'p\xe5tha'),
49
bzr_conflicts.PathConflict(u'p\xe5thb', u'p\xe5thc', b'\xc3\xaedb'),
50
bzr_conflicts.DuplicateID('Unversioned existing file',
51
u'p\xe5thc', u'p\xe5thc2',
52
b'\xc3\xaedc', b'\xc3\xaedc'),
53
bzr_conflicts.DuplicateEntry('Moved existing file to',
54
u'p\xe5thdd.moved', u'p\xe5thd',
56
bzr_conflicts.ParentLoop('Cancelled move', u'p\xe5the', u'p\xe5th2e',
57
None, b'\xc3\xaed2e'),
58
bzr_conflicts.UnversionedParent('Versioned directory',
59
u'p\xe5thf', b'\xc3\xaedf'),
60
bzr_conflicts.NonDirectoryParent('Created directory',
61
u'p\xe5thg', b'\xc3\xaedg'),
64
65
def vary_by_conflicts():
88
89
(not_selected, selected),
89
90
tree_conflicts.select_conflicts(tree, paths, **kwargs))
91
foo = conflicts.ContentsConflict('foo')
92
bar = conflicts.ContentsConflict('bar')
92
foo = bzr_conflicts.ContentsConflict('foo')
93
bar = bzr_conflicts.ContentsConflict('bar')
93
94
tree_conflicts = clist([foo, bar])
95
96
check_select(clist([bar]), clist([foo]), ['foo'])
96
97
check_select(clist(), tree_conflicts,
97
98
[''], ignore_misses=True, recurse=True)
99
foobaz = conflicts.ContentsConflict('foo/baz')
100
foobaz = bzr_conflicts.ContentsConflict('foo/baz')
100
101
tree_conflicts = clist([foobaz, bar])
102
103
check_select(clist([bar]), clist([foobaz]),
103
104
['foo'], ignore_misses=True, recurse=True)
105
qux = conflicts.PathConflict('qux', 'foo/baz')
106
qux = bzr_conflicts.PathConflict('qux', 'foo/baz')
106
107
tree_conflicts = clist([qux])
108
check_select(clist(), tree_conflicts,
109
check_select(tree_conflicts, clist(),
109
110
['foo'], ignore_misses=True, recurse=True)
110
111
check_select(tree_conflicts, clist(), ['foo'], ignore_misses=True)
114
115
self.build_tree(['dir/', 'dir/hello'])
115
116
tree.add(['dir', 'dir/hello'])
117
dirhello = conflicts.ConflictList(
118
[conflicts.TextConflict('dir/hello')])
118
dirhello = [bzr_conflicts.TextConflict('dir/hello')]
119
119
tree.set_conflicts(dirhello)
121
121
conflicts.resolve(tree, ['dir'], recursive=False, ignore_misses=True)
136
136
self.assertContainsString(repr(self.conflict),
137
137
self.conflict.__class__.__name__)
139
def test_stanza_roundtrip(self):
141
o = conflicts.Conflict.factory(**p.as_stanza().as_dict())
142
self.assertEqual(o, p)
144
self.assertIsInstance(o.path, str)
146
if o.file_id is not None:
147
self.assertIsInstance(o.file_id, bytes)
149
conflict_path = getattr(o, 'conflict_path', None)
150
if conflict_path is not None:
151
self.assertIsInstance(conflict_path, str)
153
conflict_file_id = getattr(o, 'conflict_file_id', None)
154
if conflict_file_id is not None:
155
self.assertIsInstance(conflict_file_id, bytes)
157
def test_stanzification(self):
158
stanza = self.conflict.as_stanza()
159
if 'file_id' in stanza:
160
# In Stanza form, the file_id has to be unicode.
161
self.assertStartsWith(stanza['file_id'], u'\xeed')
162
self.assertStartsWith(stanza['path'], u'p\xe5th')
163
if 'conflict_path' in stanza:
164
self.assertStartsWith(stanza['conflict_path'], u'p\xe5th')
165
if 'conflict_file_id' in stanza:
166
self.assertStartsWith(stanza['conflict_file_id'], u'\xeed')
169
140
class TestConflictList(tests.TestCase):
171
142
def test_stanzas_roundtrip(self):
172
stanzas_iter = example_conflicts.to_stanzas()
173
processed = conflicts.ConflictList.from_stanzas(stanzas_iter)
143
stanzas_iter = bzr_conflicts.ConflictList(example_conflicts).to_stanzas()
144
processed = bzr_conflicts.ConflictList.from_stanzas(stanzas_iter)
174
145
self.assertEqual(example_conflicts, processed)
176
147
def test_stringification(self):
177
for text, o in zip(example_conflicts.to_strings(), example_conflicts):
149
bzr_conflicts.ConflictList(example_conflicts).to_strings(),
178
151
self.assertEqual(text, str(o))
673
646
# We create a conflict object as it was created before the fix and
674
647
# inject it into the working tree, the test will exercise the
675
648
# compatibility code.
676
old_c = conflicts.PathConflict('<deleted>', self._item_path,
649
old_c = bzr_conflicts.PathConflict('<deleted>', self._item_path,
678
wt.set_conflicts(conflicts.ConflictList([old_c]))
651
wt.set_conflicts([old_c])
681
654
class TestResolveDuplicateEntry(TestParametrizedResolveConflicts):
683
_conflict_type = conflicts.DuplicateEntry
656
_conflict_type = bzr_conflicts.DuplicateEntry
685
658
scenarios = mirror_scenarios(