~bzr-pqm/bzr/bzr.dev

4428.2.1 by Martin Pool
Add 2a format
1
# Copyright (C) 2006, 2007, 2009 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1553.5.78 by Martin Pool
New bzr init --format option and test
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1553.5.78 by Martin Pool
New bzr init --format option and test
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1553.5.78 by Martin Pool
New bzr init --format option and test
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
1553.5.78 by Martin Pool
New bzr init --format option and test
16
17
18
"""Test "bzr init"""
19
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
20
import os
1662.1.19 by Martin Pool
Better error message when initting existing tree
21
import re
1553.5.78 by Martin Pool
New bzr init --format option and test
22
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
23
from bzrlib import (
24
    branch as _mod_branch,
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
25
    urlutils,
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
26
    )
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
27
from bzrlib.bzrdir import BzrDirMetaFormat1
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
28
from bzrlib.tests import TestSkipped
1553.5.78 by Martin Pool
New bzr init --format option and test
29
from bzrlib.tests.blackbox import ExternalBase
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
30
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
31
from bzrlib.workingtree import WorkingTree
1553.5.78 by Martin Pool
New bzr init --format option and test
32
33
34
class TestInit(ExternalBase):
35
36
    def test_init_with_format(self):
1666.1.3 by Robert Collins
Fix and test upgrades from bzrdir 6 over SFTP.
37
        # Verify bzr init --format constructs something plausible
1553.5.78 by Martin Pool
New bzr init --format option and test
38
        t = self.get_transport()
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
39
        self.run_bzr('init --format default')
1553.5.78 by Martin Pool
New bzr init --format option and test
40
        self.assertIsDirectory('.bzr', t)
41
        self.assertIsDirectory('.bzr/checkout', t)
42
        self.assertIsDirectory('.bzr/checkout/lock', t)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
43
1666.1.3 by Robert Collins
Fix and test upgrades from bzrdir 6 over SFTP.
44
    def test_init_weave(self):
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
45
        # --format=weave should be accepted to allow interoperation with
1666.1.3 by Robert Collins
Fix and test upgrades from bzrdir 6 over SFTP.
46
        # old releases when desired.
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
47
        out, err = self.run_bzr('init --format=weave')
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
48
        self.assertEqual("""Created a standalone tree (format: weave)\n""",
49
            out)
1666.1.3 by Robert Collins
Fix and test upgrades from bzrdir 6 over SFTP.
50
        self.assertEqual('', err)
51
4428.2.1 by Martin Pool
Add 2a format
52
    def test_init_format_2a(self):
53
        """Smoke test for constructing a format 2a repoistory."""
54
        out, err = self.run_bzr('init --format=2a')
55
        self.assertEqual("""Created a standalone tree (format: 2a)\n""",
56
            out)
57
        self.assertEqual('', err)
58
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
59
    def test_init_at_repository_root(self):
60
        # bzr init at the root of a repository should create a branch
61
        # and working tree even when creation of working trees is disabled.
62
        t = self.get_transport()
63
        t.mkdir('repo')
64
        format = BzrDirMetaFormat1()
65
        newdir = format.initialize(t.abspath('repo'))
66
        repo = newdir.create_repository(shared=True)
67
        repo.set_make_working_trees(False)
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
68
        out, err = self.run_bzr('init repo')
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
69
        self.assertEqual("""Created a repository tree (format: pack-0.92)
70
Using shared repository: %s
71
""" % urlutils.local_path_from_url(
72
            repo.bzrdir.root_transport.external_url()), out)
73
        self.assertEndsWith(out, "bzrlib.tests.blackbox.test_init.TestInit."
74
            "test_init_at_repository_root/work/repo/\n")
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
75
        self.assertEqual('', err)
76
        newdir.open_branch()
77
        newdir.open_workingtree()
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
78
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
79
    def test_init_branch(self):
80
        out, err = self.run_bzr('init')
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
81
        self.assertEqual("""Created a standalone tree (format: pack-0.92)\n""",
82
            out)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
83
        self.assertEqual('', err)
84
85
        # Can it handle subdirectories of branches too ?
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
86
        out, err = self.run_bzr('init subdir1')
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
87
        self.assertEqual("""Created a standalone tree (format: pack-0.92)\n""",
88
            out)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
89
        self.assertEqual('', err)
90
        WorkingTree.open('subdir1')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
91
2524.1.1 by Aaron Bentley
Revert broken changes
92
        self.run_bzr_error(['Parent directory of subdir2/nothere does not exist'],
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
93
                            'init subdir2/nothere')
94
        out, err = self.run_bzr('init subdir2/nothere', retcode=3)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
95
        self.assertEqual('', out)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
96
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
97
        os.mkdir('subdir2')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
98
        out, err = self.run_bzr('init subdir2')
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
99
        self.assertEqual("""Created a standalone tree (format: pack-0.92)\n""",
100
            out)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
101
        self.assertEqual('', err)
102
        # init an existing branch.
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
103
        out, err = self.run_bzr('init subdir2', retcode=3)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
104
        self.assertEqual('', out)
105
        self.failUnless(err.startswith('bzr: ERROR: Already a branch:'))
1662.1.19 by Martin Pool
Better error message when initting existing tree
106
3535.9.6 by Marius Kruger
add explicit blackbox tests for 'init -q' and 'init-repo -q'
107
    def test_init_branch_quiet(self):
108
        out, err = self.run_bzr('init -q')
109
        self.assertEqual('', out)
110
        self.assertEqual('', err)
111
1662.1.19 by Martin Pool
Better error message when initting existing tree
112
    def test_init_existing_branch(self):
113
        self.run_bzr('init')
114
        out, err = self.run_bzr('init', retcode=3)
115
        self.assertContainsRe(err, 'Already a branch')
116
        # don't suggest making a checkout, there's already a working tree
117
        self.assertFalse(re.search(r'checkout', err))
118
119
    def test_init_existing_without_workingtree(self):
120
        # make a repository
2257.2.1 by Wouter van Heyst
Change the ui level default for init-repo to --trees.
121
        repo = self.make_repository('.', shared=True)
122
        repo.set_make_working_trees(False)
1662.1.19 by Martin Pool
Better error message when initting existing tree
123
        # make a branch; by default without a working tree
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
124
        self.run_bzr('init subdir')
1662.1.19 by Martin Pool
Better error message when initting existing tree
125
        # fail
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
126
        out, err = self.run_bzr('init subdir', retcode=3)
1662.1.19 by Martin Pool
Better error message when initting existing tree
127
        # suggests using checkout
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
128
        self.assertContainsRe(err,
129
                              'ontains a branch.*but no working tree.*checkout')
1662.1.19 by Martin Pool
Better error message when initting existing tree
130
1765.1.1 by Robert Collins
Remove the default ignores list from bzr, lowering the minimum overhead in bzr add.
131
    def test_no_defaults(self):
132
        """Init creates no default ignore rules."""
133
        self.run_bzr('init')
134
        self.assertFalse(os.path.exists('.bzrignore'))
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
135
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
136
    def test_init_unicode(self):
137
        # Make sure getcwd can handle unicode filenames
138
        try:
139
            os.mkdir(u'mu-\xb5')
140
        except UnicodeError:
141
            raise TestSkipped("Unable to create Unicode filename")
142
        # try to init unicode dir
3697.5.4 by John Arbash Meinel
Merge vila's init[-repo] changes and add a NEWS entry.
143
        self.run_bzr(['init', '-q', u'mu-\xb5'])
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
144
2524.1.1 by Aaron Bentley
Revert broken changes
145
    def create_simple_tree(self):
146
        tree = self.make_branch_and_tree('tree')
147
        self.build_tree(['tree/a'])
148
        tree.add(['a'], ['a-id'])
149
        tree.commit('one', rev_id='r1')
150
        return tree
151
152
    def test_init_create_prefix(self):
153
        """'bzr init --create-prefix; will create leading directories."""
154
        tree = self.create_simple_tree()
155
156
        self.run_bzr_error(['Parent directory of ../new/tree does not exist'],
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
157
                            'init ../new/tree', working_dir='tree')
158
        self.run_bzr('init ../new/tree --create-prefix', working_dir='tree')
2524.1.1 by Aaron Bentley
Revert broken changes
159
        self.failUnlessExists('new/tree/.bzr')
160
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
161
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
162
class TestSFTPInit(TestCaseWithSFTPServer):
163
164
    def test_init(self):
1830.4.3 by Wouter van Heyst
more review comments
165
        # init on a remote url should succeed.
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
166
        out, err = self.run_bzr(['init', self.get_url()])
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
167
        self.assertEqual(out,
168
            """Created a standalone branch (format: pack-0.92)\n""")
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
169
        self.assertEqual('', err)
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
170
1830.4.3 by Wouter van Heyst
more review comments
171
    def test_init_existing_branch(self):
172
        # when there is already a branch present, make mention
1830.4.4 by Wouter van Heyst
more review comments
173
        self.make_branch('.')
174
175
        # rely on SFTPServer get_url() pointing at '.'
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
176
        out, err = self.run_bzr_error(['Already a branch'],
177
                                      ['init', self.get_url()])
1830.4.5 by Wouter van Heyst
cleanup
178
179
        # make sure using 'bzr checkout' is not suggested
180
        # for remote locations missing a working tree
2264.1.1 by Martin Pool
make TestSFTPInit.test_init_existing_branch less fragile (jamesw)
181
        self.assertFalse(re.search(r'use bzr checkout', err))
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
182
1830.4.4 by Wouter van Heyst
more review comments
183
    def test_init_existing_branch_with_workingtree(self):
1830.4.3 by Wouter van Heyst
more review comments
184
        # don't distinguish between the branch having a working tree or not
185
        # when the branch itself is remote.
186
        self.make_branch_and_tree('.')
187
188
        # rely on SFTPServer get_url() pointing at '.'
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
189
        self.run_bzr_error(['Already a branch'], ['init', self.get_url()])
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
190
191
    def test_init_append_revisions_only(self):
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
192
        self.run_bzr('init --dirstate-tags normal_branch6')
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
193
        branch = _mod_branch.Branch.open('normal_branch6')
194
        self.assertEqual(False, branch._get_append_revisions_only())
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
195
        self.run_bzr('init --append-revisions-only --dirstate-tags branch6')
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
196
        branch = _mod_branch.Branch.open('branch6')
197
        self.assertEqual(True, branch._get_append_revisions_only())
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
198
        self.run_bzr_error(['cannot be set to append-revisions-only'],
199
                           'init --append-revisions-only --knit knit')