/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2005-2012, 2016 Canonical Ltd
1399.1.12 by Robert Collins
add new test script
2
# Authors:  Robert Collins <robert.collins@canonical.com>
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1399.1.12 by Robert Collins
add new test script
17
7122.6.1 by Jelmer Vernooij
merge Parth's work into Breezy
18
from io import BytesIO
6469.1.19 by Parth Malwankar
added merge test
19
import os
20
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
21
from .. import (
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
22
    conflicts,
23
    errors,
7350.1.2 by Vincent Ladeuil
Fix wrong conflict resolution.
24
    symbol_versioning,
6469.1.19 by Parth Malwankar
added merge test
25
    trace,
5273.1.7 by Vincent Ladeuil
No more use of the get_transport imported *symbol*, all uses are through
26
    transport,
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
27
    workingtree,
6670.4.1 by Jelmer Vernooij
Update imports.
28
    )
29
from ..bzr import (
30
    bzrdir,
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
31
    conflicts as _mod_bzr_conflicts,
6670.4.1 by Jelmer Vernooij
Update imports.
32
    workingtree as bzrworkingtree,
5816.5.1 by Jelmer Vernooij
Move WorkingTree3 to bzrlib.workingtree_3.
33
    workingtree_3,
5816.5.7 by Jelmer Vernooij
Fix more imports.
34
    workingtree_4,
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
35
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
36
from ..lock import write_locked
37
from ..lockdir import LockDir
38
from . import TestCase, TestCaseWithTransport, TestSkipped
6846.6.1 by Jelmer Vernooij
Move Tree{Link,File,Directory,Entry} to breezy.tree.
39
from ..tree import (
1997.1.1 by Robert Collins
Add WorkingTree.lock_tree_write.
40
    TreeEntry,
41
    TreeDirectory,
42
    TreeFile,
43
    TreeLink,
44
    )
1399.1.12 by Robert Collins
add new test script
45
7122.6.1 by Jelmer Vernooij
merge Parth's work into Breezy
46
from .features import SymlinkFeature
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
47
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
48
class TestTreeDirectory(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
49
50
    def test_kind_character(self):
51
        self.assertEqual(TreeDirectory().kind_character(), '/')
52
53
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
54
class TestTreeEntry(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
55
56
    def test_kind_character(self):
57
        self.assertEqual(TreeEntry().kind_character(), '???')
58
59
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
60
class TestTreeFile(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
61
62
    def test_kind_character(self):
63
        self.assertEqual(TreeFile().kind_character(), '')
64
65
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
66
class TestTreeLink(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
67
68
    def test_kind_character(self):
69
        self.assertEqual(TreeLink().kind_character(), '')
70
71
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
72
class TestDefaultFormat(TestCaseWithTransport):
73
74
    def test_get_set_default_format(self):
5662.3.3 by Jelmer Vernooij
add tests
75
        old_format = workingtree.format_registry.get_default()
5816.5.2 by Jelmer Vernooij
Fix comment - default wt format is 6.
76
        # default is 6
7143.15.2 by Jelmer Vernooij
Run autopep8.
77
        self.assertTrue(isinstance(
78
            old_format, workingtree_4.WorkingTreeFormat6))
5662.3.3 by Jelmer Vernooij
add tests
79
        workingtree.format_registry.set_default(SampleTreeFormat())
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
80
        try:
81
            # the default branch format is used by the meta dir format
82
            # which is not the default bzrdir format at this point
83
            dir = bzrdir.BzrDirMetaFormat1().initialize('.')
84
            dir.create_repository()
85
            dir.create_branch()
86
            result = dir.create_workingtree()
87
            self.assertEqual(result, 'A tree')
88
        finally:
5662.3.3 by Jelmer Vernooij
add tests
89
            workingtree.format_registry.set_default(old_format)
90
        self.assertEqual(old_format, workingtree.format_registry.get_default())
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
91
6349.2.4 by Jelmer Vernooij
Add test for WorkingTreeFormat.from_string.
92
    def test_from_string(self):
93
        self.assertIsInstance(
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
94
            SampleTreeFormat.from_string(b"Sample tree format."),
6349.2.4 by Jelmer Vernooij
Add test for WorkingTreeFormat.from_string.
95
            SampleTreeFormat)
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
96
        self.assertRaises(
97
            AssertionError, SampleTreeFormat.from_string,
98
            b"Different format string.")
6349.2.4 by Jelmer Vernooij
Add test for WorkingTreeFormat.from_string.
99
5816.2.1 by Jelmer Vernooij
Allow lazily setting default for working trees.
100
    def test_get_set_default_format_by_key(self):
101
        old_format = workingtree.format_registry.get_default()
5816.5.7 by Jelmer Vernooij
Fix more imports.
102
        # default is 6
5816.2.1 by Jelmer Vernooij
Allow lazily setting default for working trees.
103
        format = SampleTreeFormat()
104
        workingtree.format_registry.register(format)
105
        self.addCleanup(workingtree.format_registry.remove, format)
7143.15.2 by Jelmer Vernooij
Run autopep8.
106
        self.assertTrue(isinstance(
107
            old_format, workingtree_4.WorkingTreeFormat6))
5816.2.1 by Jelmer Vernooij
Allow lazily setting default for working trees.
108
        workingtree.format_registry.set_default_key(format.get_format_string())
109
        try:
110
            # the default branch format is used by the meta dir format
111
            # which is not the default bzrdir format at this point
112
            dir = bzrdir.BzrDirMetaFormat1().initialize('.')
113
            dir.create_repository()
114
            dir.create_branch()
115
            result = dir.create_workingtree()
116
            self.assertEqual(result, 'A tree')
117
        finally:
118
            workingtree.format_registry.set_default_key(
119
                old_format.get_format_string())
120
        self.assertEqual(old_format, workingtree.format_registry.get_default())
121
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
122
    def test_open(self):
123
        tree = self.make_branch_and_tree('.')
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
124
        open_direct = workingtree.WorkingTree.open('.')
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
125
        self.assertEqual(tree.basedir, open_direct.basedir)
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
126
        open_no_args = workingtree.WorkingTree.open()
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
127
        self.assertEqual(tree.basedir, open_no_args.basedir)
128
129
    def test_open_containing(self):
130
        tree = self.make_branch_and_tree('.')
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
131
        open_direct, relpath = workingtree.WorkingTree.open_containing('.')
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
132
        self.assertEqual(tree.basedir, open_direct.basedir)
133
        self.assertEqual('', relpath)
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
134
        open_no_args, relpath = workingtree.WorkingTree.open_containing()
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
135
        self.assertEqual(tree.basedir, open_no_args.basedir)
136
        self.assertEqual('', relpath)
7143.15.2 by Jelmer Vernooij
Run autopep8.
137
        open_subdir, relpath = workingtree.WorkingTree.open_containing(
138
            'subdir')
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
139
        self.assertEqual(tree.basedir, open_subdir.basedir)
140
        self.assertEqual('subdir', relpath)
141
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
142
6653.3.1 by Jelmer Vernooij
Move bzr-specific code to breezy.bzrworkingtree.
143
class SampleTreeFormat(bzrworkingtree.WorkingTreeFormatMetaDir):
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
144
    """A sample format
145
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
146
    this format is initializable, unsupported to aid in testing the
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
147
    open and open_downlevel routines.
148
    """
149
6349.2.4 by Jelmer Vernooij
Add test for WorkingTreeFormat.from_string.
150
    @classmethod
151
    def get_format_string(cls):
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
152
        """See WorkingTreeFormat.get_format_string()."""
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
153
        return b"Sample tree format."
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
154
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
155
    def initialize(self, a_controldir, revision_id=None, from_branch=None,
3136.1.5 by Aaron Bentley
Fix sample workingtree format
156
                   accelerator_tree=None, hardlink=False):
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
157
        """Sample branches cannot be created."""
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
158
        t = a_controldir.get_workingtree_transport(self)
1955.3.13 by John Arbash Meinel
Run the full test suite, and fix up any deprecation warnings.
159
        t.put_bytes('format', self.get_format_string())
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
160
        return 'A tree'
161
162
    def is_supported(self):
163
        return False
164
165
    def open(self, transport, _found=False):
166
        return "opened tree."
167
168
5642.2.4 by Jelmer Vernooij
add tests.
169
class SampleExtraTreeFormat(workingtree.WorkingTreeFormat):
170
    """A sample format that does not support use in a metadir.
171
172
    """
173
174
    def get_format_string(self):
175
        # Not usable in a metadir, so no format string
176
        return None
177
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
178
    def initialize(self, a_controldir, revision_id=None, from_branch=None,
5642.2.4 by Jelmer Vernooij
add tests.
179
                   accelerator_tree=None, hardlink=False):
180
        raise NotImplementedError(self.initialize)
181
182
    def is_supported(self):
183
        return False
184
185
    def open(self, transport, _found=False):
186
        raise NotImplementedError(self.open)
187
188
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
189
class TestWorkingTreeFormat(TestCaseWithTransport):
190
    """Tests for the WorkingTreeFormat facility."""
191
5816.3.3 by Jelmer Vernooij
Add tariff test to make sure working tree isn't opened by 'bzr serve'
192
    def test_find_format_string(self):
193
        # is the right format object found for a working tree?
194
        branch = self.make_branch('branch')
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
195
        self.assertRaises(
196
            errors.NoWorkingTree,
197
            bzrworkingtree.WorkingTreeFormatMetaDir.find_format_string,
198
            branch.controldir)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
199
        transport = branch.controldir.get_workingtree_transport(None)
5816.3.3 by Jelmer Vernooij
Add tariff test to make sure working tree isn't opened by 'bzr serve'
200
        transport.mkdir('.')
7045.4.23 by Jelmer Vernooij
Fix some help tests.
201
        transport.put_bytes("format", b"some format name")
5816.3.3 by Jelmer Vernooij
Add tariff test to make sure working tree isn't opened by 'bzr serve'
202
        # The format does not have to be known by Bazaar,
203
        # find_format_string just retrieves the name
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
204
        self.assertEqual(
205
            b"some format name",
206
            bzrworkingtree.WorkingTreeFormatMetaDir.find_format_string(
207
                branch.controldir))
5816.3.3 by Jelmer Vernooij
Add tariff test to make sure working tree isn't opened by 'bzr serve'
208
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
209
    def test_find_format(self):
210
        # is the right format object found for a working tree?
211
        # create a branch with a few known format objects.
212
        self.build_tree(["foo/", "bar/"])
7143.15.2 by Jelmer Vernooij
Run autopep8.
213
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
214
        def check_format(format, url):
6746.2.1 by Jelmer Vernooij
Rename matchingbzrdir to matchingcontroldir.
215
            dir = format._matchingcontroldir.initialize(url)
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
216
            dir.create_repository()
217
            dir.create_branch()
218
            format.initialize(dir)
7143.15.2 by Jelmer Vernooij
Run autopep8.
219
            found_format = bzrworkingtree.WorkingTreeFormatMetaDir.find_format(
220
                dir)
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
221
            self.assertIsInstance(found_format, format.__class__)
5816.5.1 by Jelmer Vernooij
Move WorkingTree3 to bzrlib.workingtree_3.
222
        check_format(workingtree_3.WorkingTreeFormat3(), "bar")
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
223
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
224
    def test_find_format_no_tree(self):
225
        dir = bzrdir.BzrDirMetaFormat1().initialize('.')
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
226
        self.assertRaises(errors.NoWorkingTree,
6653.5.1 by Jelmer Vernooij
Fix some more tests.
227
                          bzrworkingtree.WorkingTreeFormatMetaDir.find_format,
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
228
                          dir)
229
230
    def test_find_format_unknown_format(self):
231
        dir = bzrdir.BzrDirMetaFormat1().initialize('.')
232
        dir.create_repository()
233
        dir.create_branch()
234
        SampleTreeFormat().initialize(dir)
235
        self.assertRaises(errors.UnknownFormatError,
6653.5.1 by Jelmer Vernooij
Fix some more tests.
236
                          bzrworkingtree.WorkingTreeFormatMetaDir.find_format,
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
237
                          dir)
238
6213.1.36 by Jelmer Vernooij
Add news entry, test for working tree features.
239
    def test_find_format_with_features(self):
240
        tree = self.make_branch_and_tree('.', format='2a')
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
241
        tree.update_feature_flags({b"name": b"necessity"})
6653.5.1 by Jelmer Vernooij
Fix some more tests.
242
        found_format = bzrworkingtree.WorkingTreeFormatMetaDir.find_format(
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
243
            tree.controldir)
6213.1.36 by Jelmer Vernooij
Add news entry, test for working tree features.
244
        self.assertIsInstance(found_format, workingtree.WorkingTreeFormat)
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
245
        self.assertEqual(found_format.features.get(b"name"), b"necessity")
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
246
        self.assertRaises(
247
            bzrdir.MissingFeature, found_format.check_support_status, True)
248
        self.addCleanup(
249
            bzrworkingtree.WorkingTreeFormatMetaDir.unregister_feature,
250
            b"name")
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
251
        bzrworkingtree.WorkingTreeFormatMetaDir.register_feature(b"name")
6213.1.36 by Jelmer Vernooij
Add news entry, test for working tree features.
252
        found_format.check_support_status(True)
253
5662.3.3 by Jelmer Vernooij
add tests
254
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
255
class TestWorkingTreeIterEntriesByDir_wSubtrees(TestCaseWithTransport):
256
257
    def make_simple_tree(self):
258
        tree = self.make_branch_and_tree('tree', format='development-subtree')
259
        self.build_tree(['tree/a/', 'tree/a/b/', 'tree/a/b/c'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
260
        tree.set_root_id(b'root-id')
261
        tree.add(['a', 'a/b', 'a/b/c'], [b'a-id', b'b-id', b'c-id'])
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
262
        tree.commit('initial')
263
        return tree
264
265
    def test_just_directory(self):
266
        tree = self.make_simple_tree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
267
        self.assertEqual([('directory', b'root-id'),
268
                          ('directory', b'a-id'),
269
                          ('directory', b'b-id'),
270
                          ('file', b'c-id')],
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
271
                         [(ie.kind, ie.file_id)
272
                          for path, ie in tree.iter_entries_by_dir()])
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
273
        self.make_branch_and_tree('tree/a/b')
6855.4.1 by Jelmer Vernooij
Yet more bees.
274
        self.assertEqual([('tree-reference', b'b-id')],
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
275
                         [(ie.kind, ie.file_id)
6885.6.1 by Jelmer Vernooij
Support specific_files argument to Tree.iter_entries_by_dir.
276
                          for path, ie in tree.iter_entries_by_dir(
277
                              specific_files=['a/b'])])
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
278
279
    def test_direct_subtree(self):
280
        tree = self.make_simple_tree()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
281
        self.make_branch_and_tree('tree/a/b')
6855.4.1 by Jelmer Vernooij
Yet more bees.
282
        self.assertEqual([('directory', b'root-id'),
283
                          ('directory', b'a-id'),
284
                          ('tree-reference', b'b-id')],
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
285
                         [(ie.kind, ie.file_id)
286
                          for path, ie in tree.iter_entries_by_dir()])
287
288
    def test_indirect_subtree(self):
289
        tree = self.make_simple_tree()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
290
        self.make_branch_and_tree('tree/a')
6855.4.1 by Jelmer Vernooij
Yet more bees.
291
        self.assertEqual([('directory', b'root-id'),
292
                          ('tree-reference', b'a-id')],
5786.1.5 by John Arbash Meinel
Move the logic about InventoryDirectory => TreeReference into iter_entries
293
                         [(ie.kind, ie.file_id)
294
                          for path, ie in tree.iter_entries_by_dir()])
295
296
5662.3.3 by Jelmer Vernooij
add tests
297
class TestWorkingTreeFormatRegistry(TestCase):
298
299
    def setUp(self):
300
        super(TestWorkingTreeFormatRegistry, self).setUp()
301
        self.registry = workingtree.WorkingTreeFormatRegistry()
302
303
    def test_register_unregister_format(self):
304
        format = SampleTreeFormat()
305
        self.registry.register(format)
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
306
        self.assertEqual(format, self.registry.get(b"Sample tree format."))
5662.3.3 by Jelmer Vernooij
add tests
307
        self.registry.remove(format)
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
308
        self.assertRaises(KeyError, self.registry.get, b"Sample tree format.")
5662.3.3 by Jelmer Vernooij
add tests
309
310
    def test_get_all(self):
311
        format = SampleTreeFormat()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
312
        self.assertEqual([], self.registry._get_all())
5662.3.3 by Jelmer Vernooij
add tests
313
        self.registry.register(format)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
314
        self.assertEqual([format], self.registry._get_all())
5662.3.3 by Jelmer Vernooij
add tests
315
316
    def test_register_extra(self):
5642.2.4 by Jelmer Vernooij
add tests.
317
        format = SampleExtraTreeFormat()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
318
        self.assertEqual([], self.registry._get_all())
5662.3.3 by Jelmer Vernooij
add tests
319
        self.registry.register_extra(format)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
320
        self.assertEqual([format], self.registry._get_all())
5662.3.3 by Jelmer Vernooij
add tests
321
322
    def test_register_extra_lazy(self):
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
323
        self.assertEqual([], self.registry._get_all())
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
324
        self.registry.register_extra_lazy("breezy.tests.test_workingtree",
7143.15.2 by Jelmer Vernooij
Run autopep8.
325
                                          "SampleExtraTreeFormat")
5662.3.3 by Jelmer Vernooij
add tests
326
        formats = self.registry._get_all()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
327
        self.assertEqual(1, len(formats))
5662.3.3 by Jelmer Vernooij
add tests
328
        self.assertIsInstance(formats[0], SampleExtraTreeFormat)
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
329
330
331
class TestWorkingTreeFormat3(TestCaseWithTransport):
332
    """Tests specific to WorkingTreeFormat3."""
333
334
    def test_disk_layout(self):
335
        control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
336
        control.create_repository()
337
        control.create_branch()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
338
        workingtree_3.WorkingTreeFormat3().initialize(control)
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
339
        # we want:
340
        # format 'Bazaar-NG Working Tree format 3'
341
        # inventory = blank inventory
342
        # pending-merges = ''
343
        # stat-cache = ??
344
        # no inventory.basis yet
345
        t = control.get_workingtree_transport(None)
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
346
        self.assertEqualDiff(b'Bazaar-NG Working Tree format 3',
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
347
                             t.get('format').read())
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
348
        self.assertEqualDiff(t.get('inventory').read(),
7143.15.2 by Jelmer Vernooij
Run autopep8.
349
                             b'<inventory format="5">\n'
350
                             b'</inventory>\n',
1731.1.33 by Aaron Bentley
Revert no-special-root changes
351
                             )
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
352
        self.assertEqualDiff(b'### bzr hashcache v5\n',
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
353
                             t.get('stat-cache').read())
354
        self.assertFalse(t.has('inventory.basis'))
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
355
        # no last-revision file means 'None' or 'NULLREVISION'
356
        self.assertFalse(t.has('last-revision'))
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
357
        # TODO RBC 20060210 do a commit, check the inventory.basis is created
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
358
        # correctly and last-revision file becomes present.
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
359
360
    def test_uses_lockdir(self):
361
        """WorkingTreeFormat3 uses its own LockDir:
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
362
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
363
            - lock is a directory
364
            - when the WorkingTree is locked, LockDir can see that
365
        """
366
        t = self.get_transport()
367
        url = self.get_url()
368
        dir = bzrdir.BzrDirMetaFormat1().initialize(url)
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
369
        dir.create_repository()
370
        dir.create_branch()
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
371
        try:
5816.5.1 by Jelmer Vernooij
Move WorkingTree3 to bzrlib.workingtree_3.
372
            tree = workingtree_3.WorkingTreeFormat3().initialize(dir)
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
373
        except errors.NotLocalUrl:
374
            raise TestSkipped('Not a local URL')
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
375
        self.assertIsDirectory('.bzr', t)
376
        self.assertIsDirectory('.bzr/checkout', t)
377
        self.assertIsDirectory('.bzr/checkout/lock', t)
378
        our_lock = LockDir(t, '.bzr/checkout/lock')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
379
        self.assertEqual(our_lock.peek(), None)
6969.3.2 by Jelmer Vernooij
Use context managers for locking.
380
        with tree.lock_write():
381
            self.assertTrue(our_lock.peek())
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
382
        self.assertEqual(our_lock.peek(), None)
1534.10.6 by Aaron Bentley
Conflict serialization working for WorkingTree3
383
1815.2.2 by Jelmer Vernooij
Move missing_pending_merges test to WorkingTreeFormat3-specific tests.
384
    def test_missing_pending_merges(self):
385
        control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
386
        control.create_repository()
387
        control.create_branch()
5816.5.1 by Jelmer Vernooij
Move WorkingTree3 to bzrlib.workingtree_3.
388
        tree = workingtree_3.WorkingTreeFormat3().initialize(control)
3407.2.14 by Martin Pool
Remove more cases of getting transport via control_files
389
        tree._transport.delete("pending-merges")
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
390
        self.assertEqual([], tree.get_parent_ids())
1815.2.2 by Jelmer Vernooij
Move missing_pending_merges test to WorkingTreeFormat3-specific tests.
391
1666.1.4 by Robert Collins
* 'Metadir' is now the default disk format. This improves behaviour in
392
3017.2.1 by Aaron Bentley
Revert now resolves conflicts recursively (#102739)
393
class TestRevert(TestCaseWithTransport):
394
395
    def test_revert_conflicts_recursive(self):
396
        this_tree = self.make_branch_and_tree('this-tree')
397
        self.build_tree_contents([('this-tree/foo/',),
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
398
                                  ('this-tree/foo/bar', b'bar')])
3017.2.1 by Aaron Bentley
Revert now resolves conflicts recursively (#102739)
399
        this_tree.add(['foo', 'foo/bar'])
400
        this_tree.commit('created foo/bar')
7143.15.2 by Jelmer Vernooij
Run autopep8.
401
        other_tree = this_tree.controldir.sprout(
402
            'other-tree').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
403
        self.build_tree_contents([('other-tree/foo/bar', b'baz')])
3017.2.1 by Aaron Bentley
Revert now resolves conflicts recursively (#102739)
404
        other_tree.commit('changed bar')
6855.4.1 by Jelmer Vernooij
Yet more bees.
405
        self.build_tree_contents([('this-tree/foo/bar', b'qux')])
3017.2.1 by Aaron Bentley
Revert now resolves conflicts recursively (#102739)
406
        this_tree.commit('changed qux')
407
        this_tree.merge_from_branch(other_tree.branch)
408
        self.assertEqual(1, len(this_tree.conflicts()))
409
        this_tree.revert(['foo'])
410
        self.assertEqual(0, len(this_tree.conflicts()))
411
412
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
413
class TestAutoResolve(TestCaseWithTransport):
414
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
415
    def _auto_resolve(self, tree):
416
        """Call auto_resolve on tree expecting deprecation"""
417
        return self.applyDeprecated(
7290.25.5 by Jelmer Vernooij
Fix typo in the test.
418
            symbol_versioning.deprecated_in((3, 0, 1)),
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
419
            tree.auto_resolve,)
420
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
421
    def test_auto_resolve(self):
422
        base = self.make_branch_and_tree('base')
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
423
        self.build_tree_contents([('base/hello', b'Hello')])
6855.4.1 by Jelmer Vernooij
Yet more bees.
424
        base.add('hello', b'hello_id')
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
425
        base.commit('Hello')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
426
        other = base.controldir.sprout('other').open_workingtree()
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
427
        self.build_tree_contents([('other/hello', b'hELLO')])
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
428
        other.commit('Case switch')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
429
        this = base.controldir.sprout('this').open_workingtree()
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
430
        self.assertPathExists('this/hello')
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
431
        self.build_tree_contents([('this/hello', b'Hello World')])
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
432
        this.commit('Add World')
433
        this.merge_from_branch(other.branch)
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
434
        self.assertEqual([_mod_bzr_conflicts.TextConflict('hello', b'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
435
                         this.conflicts())
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
436
        self._auto_resolve(this)
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
437
        self.assertEqual([_mod_bzr_conflicts.TextConflict('hello', b'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
438
                         this.conflicts())
439
        self.build_tree_contents([('this/hello', '<<<<<<<')])
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
440
        self._auto_resolve(this)
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
441
        self.assertEqual([_mod_bzr_conflicts.TextConflict('hello', b'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
442
                         this.conflicts())
443
        self.build_tree_contents([('this/hello', '=======')])
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
444
        self._auto_resolve(this)
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
445
        self.assertEqual([_mod_bzr_conflicts.TextConflict('hello', b'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
446
                         this.conflicts())
447
        self.build_tree_contents([('this/hello', '\n>>>>>>>')])
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
448
        remaining, resolved = self._auto_resolve(this)
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
449
        self.assertEqual([_mod_bzr_conflicts.TextConflict('hello', b'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
450
                         this.conflicts())
451
        self.assertEqual([], resolved)
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
452
        self.build_tree_contents([('this/hello', b'hELLO wORLD')])
6543.2.2 by Martin Packman
Deprecate WorkingTree.auto_resolve
453
        remaining, resolved = self._auto_resolve(this)
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
454
        self.assertEqual([], this.conflicts())
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
455
        self.assertEqual([_mod_bzr_conflicts.TextConflict('hello', b'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
456
                         resolved)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
457
        self.assertPathDoesNotExist('this/hello.BASE')
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
458
6469.1.19 by Parth Malwankar
added merge test
459
    def test_unsupported_symlink_auto_resolve(self):
460
        self.requireFeature(SymlinkFeature)
461
        base = self.make_branch_and_tree('base')
462
        self.build_tree_contents([('base/hello', 'Hello')])
7122.6.12 by Jelmer Vernooij
Fix more python3 tests.
463
        base.add('hello', b'hello_id')
6469.1.19 by Parth Malwankar
added merge test
464
        base.commit('commit 0')
7122.6.1 by Jelmer Vernooij
merge Parth's work into Breezy
465
        other = base.controldir.sprout('other').open_workingtree()
6469.1.19 by Parth Malwankar
added merge test
466
        self.build_tree_contents([('other/hello', 'Hello')])
467
        os.symlink('other/hello', 'other/foo')
7122.6.12 by Jelmer Vernooij
Fix more python3 tests.
468
        other.add('foo', b'foo_id')
6469.1.19 by Parth Malwankar
added merge test
469
        other.commit('commit symlink')
7122.6.1 by Jelmer Vernooij
merge Parth's work into Breezy
470
        this = base.controldir.sprout('this').open_workingtree()
6469.1.19 by Parth Malwankar
added merge test
471
        self.assertPathExists('this/hello')
472
        self.build_tree_contents([('this/hello', 'Hello')])
473
        this.commit('commit 2')
7122.6.1 by Jelmer Vernooij
merge Parth's work into Breezy
474
        log = BytesIO()
6469.1.19 by Parth Malwankar
added merge test
475
        trace.push_log_file(log)
476
        os_symlink = getattr(os, 'symlink', None)
477
        os.symlink = None
478
        try:
479
            this.merge_from_branch(other.branch)
480
        finally:
481
            if os_symlink:
482
                os.symlink = os_symlink
483
        self.assertContainsRe(
484
            log.getvalue(),
7122.6.6 by Jelmer Vernooij
Fix more tests.
485
            b'Unable to create symlink "foo" on this filesystem')
6469.1.19 by Parth Malwankar
added merge test
486
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
487
    def test_auto_resolve_dir(self):
488
        tree = self.make_branch_and_tree('tree')
489
        self.build_tree(['tree/hello/'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
490
        tree.add('hello', b'hello-id')
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
491
        file_conflict = _mod_bzr_conflicts.TextConflict('hello', b'hello-id')
492
        tree.set_conflicts([file_conflict])
7290.25.6 by Jelmer Vernooij
Some more tests.
493
        remaining, resolved = self._auto_resolve(tree)
494
        self.assertEqual(
495
            remaining,
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
496
            conflicts.ConflictList([_mod_bzr_conflicts.TextConflict(u'hello', 'hello-id')]))
7290.25.6 by Jelmer Vernooij
Some more tests.
497
        self.assertEqual(resolved, [])
498
499
    def test_auto_resolve_missing(self):
500
        tree = self.make_branch_and_tree('tree')
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
501
        file_conflict = _mod_bzr_conflicts.TextConflict('hello', b'hello-id')
502
        tree.set_conflicts([file_conflict])
7290.25.6 by Jelmer Vernooij
Some more tests.
503
        remaining, resolved = self._auto_resolve(tree)
504
        self.assertEqual(remaining, [])
505
        self.assertEqual(
506
            resolved,
7490.129.3 by Jelmer Vernooij
Split out bzr-specific Conflicts code.
507
            conflicts.ConflictList([_mod_bzr_conflicts.TextConflict(u'hello', 'hello-id')]))
3140.1.4 by Aaron Bentley
Add WorkingTree.find_trees
508
509
6538.1.5 by Aaron Bentley
Implement WorkingTree.store_uncommitted.
510
class TestStoredUncommitted(TestCaseWithTransport):
511
512
    def store_uncommitted(self):
513
        tree = self.make_branch_and_tree('tree')
514
        tree.commit('get root in there')
6855.4.1 by Jelmer Vernooij
Yet more bees.
515
        self.build_tree_contents([('tree/file', b'content')])
516
        tree.add('file', b'file-id')
6538.1.5 by Aaron Bentley
Implement WorkingTree.store_uncommitted.
517
        tree.store_uncommitted()
518
        return tree
519
520
    def test_store_uncommitted(self):
521
        self.store_uncommitted()
522
        self.assertPathDoesNotExist('tree/file')
523
524
    def test_store_uncommitted_no_change(self):
525
        tree = self.make_branch_and_tree('tree')
526
        tree.commit('get root in there')
527
        tree.store_uncommitted()
6538.1.24 by Aaron Bentley
Eliminate get_stored_uncommitted from API.
528
        self.assertIs(None, tree.branch.get_unshelver(tree))
6538.1.10 by Aaron Bentley
Implement WorkingTree.get_uncommitted_data
529
6538.1.11 by Aaron Bentley
Switch to much simpler implementation of restore_uncommitted.
530
    def test_restore_uncommitted(self):
531
        with write_locked(self.store_uncommitted()) as tree:
532
            tree.restore_uncommitted()
533
            self.assertPathExists('tree/file')
6538.1.24 by Aaron Bentley
Eliminate get_stored_uncommitted from API.
534
            self.assertIs(None, tree.branch.get_unshelver(tree))
6538.1.11 by Aaron Bentley
Switch to much simpler implementation of restore_uncommitted.
535
536
    def test_restore_uncommitted_none(self):
537
        tree = self.make_branch_and_tree('tree')
538
        tree.restore_uncommitted()