~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
18
import os
19
3113.6.1 by Aaron Bentley
Use source format where available for splitting
20
from bzrlib import bzrdir, tests, workingtree
21
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit4
22
from bzrlib.repofmt.pack_repo import RepositoryFormatKnitPack4
23
1731.2.22 by Aaron Bentley
Initial work on split command
24
25
26
class TestSplit(tests.TestCaseWithTransport):
27
28
    def test_split(self):
29
        self.build_tree(['a/', 'a/b/', 'a/b/c'])
3113.6.5 by Aaron Bentley
Update tests
30
        wt = self.make_branch_and_tree('a', format='rich-root-pack')
1731.2.22 by Aaron Bentley
Initial work on split command
31
        wt.add(['b', 'b/c'])
32
        wt.commit('rev1')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
33
        self.run_bzr('split a/b')
4659.1.1 by Robert Collins
Test split with unversioned files within the test tree.
34
        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
35
36
    def test_split_repo_failure(self):
2100.3.17 by Aaron Bentley
Remove get_format_*, make FormatRegistry.register_metadir vary working tree
37
        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
38
        a_branch = repo.bzrdir.create_branch()
39
        self.build_tree(['a/', 'a/b/', 'a/b/c/', 'a/b/c/d'])
40
        wt = a_branch.create_checkout('a', lightweight=True)
41
        wt.add(['b', 'b/c', 'b/c/d'], ['b-id', 'c-id', 'd-id'])
42
        wt.commit('added files')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
43
        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
44
3113.6.4 by Aaron Bentley
Require the user to upgrade if they run split in a non-rich-root tree.
45
    def test_split_tree_failure(self):
46
        tree = self.make_branch_and_tree('tree', format='pack-0.92')
47
        self.build_tree(['tree/subtree/'])
48
        tree.add('subtree')
49
        tree.commit('added subtree')
4416.6.1 by Neil Martinsen-Burrell
Fix #220067 adding more specificity to the error message when split fails
50
        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.
51
                           'split tree/subtree')
52
3113.6.1 by Aaron Bentley
Use source format where available for splitting
53
    def split_formats(self, format, repo_format):
54
        tree = self.make_branch_and_tree('rich-root', format=format)
55
        self.build_tree(['rich-root/a/'])
56
        tree.add('a')
57
        self.run_bzr(['split', 'rich-root/a'])
58
        subtree = workingtree.WorkingTree.open('rich-root/a')
59
        self.assertIsInstance(subtree.branch.repository._format,
60
                              repo_format)
61
62
    def test_split_rich_root(self):
63
        self.split_formats('rich-root', RepositoryFormatKnit4)
64
65
    def test_split_rich_root_pack(self):
66
        self.split_formats('rich-root-pack', RepositoryFormatKnitPack4)