~bzr-pqm/bzr/bzr.dev

2100.3.5 by Aaron Bentley
Merge nested-trees work
1
# Copyright (C) 2006 Canonical Ltd
1731.2.22 by Aaron Bentley
Initial work on split command
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1731.2.22 by Aaron Bentley
Initial work on split command
16
17
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
18
from bzrlib import tests, workingtree
3113.6.1 by Aaron Bentley
Use source format where available for splitting
19
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit4
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
20
from bzrlib.repofmt.knitpack_repo import RepositoryFormatKnitPack4
3113.6.1 by Aaron Bentley
Use source format where available for splitting
21
1731.2.22 by Aaron Bentley
Initial work on split command
22
23
24
class TestSplit(tests.TestCaseWithTransport):
25
26
    def test_split(self):
27
        self.build_tree(['a/', 'a/b/', 'a/b/c'])
3113.6.5 by Aaron Bentley
Update tests
28
        wt = self.make_branch_and_tree('a', format='rich-root-pack')
1731.2.22 by Aaron Bentley
Initial work on split command
29
        wt.add(['b', 'b/c'])
30
        wt.commit('rev1')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
31
        self.run_bzr('split a/b')
4659.1.1 by Robert Collins
Test split with unversioned files within the test tree.
32
        self.run_bzr_error(('.* is not versioned',), 'split q', working_dir='a')
1731.2.23 by Aaron Bentley
Throw user-friendly error splitting in shared repo with wrong format
33
34
    def test_split_repo_failure(self):
2100.3.17 by Aaron Bentley
Remove get_format_*, make FormatRegistry.register_metadir vary working tree
35
        repo = self.make_repository('branch', shared=True, format='knit')
1731.2.23 by Aaron Bentley
Throw user-friendly error splitting in shared repo with wrong format
36
        a_branch = repo.bzrdir.create_branch()
37
        self.build_tree(['a/', 'a/b/', 'a/b/c/', 'a/b/c/d'])
38
        wt = a_branch.create_checkout('a', lightweight=True)
39
        wt.add(['b', 'b/c', 'b/c/d'], ['b-id', 'c-id', 'd-id'])
40
        wt.commit('added files')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
41
        self.run_bzr_error(('must upgrade your branch at .*a',), 'split a/b')
3113.6.1 by Aaron Bentley
Use source format where available for splitting
42
3113.6.4 by Aaron Bentley
Require the user to upgrade if they run split in a non-rich-root tree.
43
    def test_split_tree_failure(self):
44
        tree = self.make_branch_and_tree('tree', format='pack-0.92')
45
        self.build_tree(['tree/subtree/'])
46
        tree.add('subtree')
47
        tree.commit('added subtree')
4416.6.1 by Neil Martinsen-Burrell
Fix #220067 adding more specificity to the error message when split fails
48
        self.run_bzr_error(('must upgrade your branch at .*tree','rich roots'),
3113.6.4 by Aaron Bentley
Require the user to upgrade if they run split in a non-rich-root tree.
49
                           'split tree/subtree')
50
3113.6.1 by Aaron Bentley
Use source format where available for splitting
51
    def split_formats(self, format, repo_format):
52
        tree = self.make_branch_and_tree('rich-root', format=format)
53
        self.build_tree(['rich-root/a/'])
54
        tree.add('a')
55
        self.run_bzr(['split', 'rich-root/a'])
56
        subtree = workingtree.WorkingTree.open('rich-root/a')
57
        self.assertIsInstance(subtree.branch.repository._format,
58
                              repo_format)
59
60
    def test_split_rich_root(self):
61
        self.split_formats('rich-root', RepositoryFormatKnit4)
62
63
    def test_split_rich_root_pack(self):
64
        self.split_formats('rich-root-pack', RepositoryFormatKnitPack4)