~bzr-pqm/bzr/bzr.dev

5557.1.7 by John Arbash Meinel
Merge in the bzr.dev 5582
1
# Copyright (C) 2006-2011 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
5448.6.6 by Matthew Gordon
Added test for 'bzr init --no-tree'
18
"""Test 'bzr init'"""
1553.5.78 by Martin Pool
New bzr init --format option and test
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,
5448.4.2 by Neil Martinsen-Burrell
blackbox test
25
    config as _mod_config,
4789.8.1 by John Arbash Meinel
Don't make explicit assumptions about testing current working dir.
26
    osutils,
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
27
    urlutils,
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
28
    )
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
29
from bzrlib.bzrdir import BzrDirMetaFormat1
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
30
from bzrlib.tests import TestSkipped
5283.4.5 by Martin Pool
Update remaining subclasses of ExternalBase
31
from bzrlib.tests import TestCaseWithTransport
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
32
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.
33
from bzrlib.workingtree import WorkingTree
1553.5.78 by Martin Pool
New bzr init --format option and test
34
35
5283.4.5 by Martin Pool
Update remaining subclasses of ExternalBase
36
class TestInit(TestCaseWithTransport):
1553.5.78 by Martin Pool
New bzr init --format option and test
37
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
38
    def setUp(self):
6552.1.4 by Vincent Ladeuil
Remaining tests matching setup(self) that can be rewritten with super().
39
        super(TestInit, self).setUp()
4599.4.5 by Robert Collins
Blackbox init tests 2a ready.
40
        self._default_label = '2a'
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
41
1553.5.78 by Martin Pool
New bzr init --format option and test
42
    def test_init_with_format(self):
1666.1.3 by Robert Collins
Fix and test upgrades from bzrdir 6 over SFTP.
43
        # Verify bzr init --format constructs something plausible
1553.5.78 by Martin Pool
New bzr init --format option and test
44
        t = self.get_transport()
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
45
        self.run_bzr('init --format default')
1553.5.78 by Martin Pool
New bzr init --format option and test
46
        self.assertIsDirectory('.bzr', t)
47
        self.assertIsDirectory('.bzr/checkout', t)
48
        self.assertIsDirectory('.bzr/checkout/lock', t)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
49
4428.2.1 by Martin Pool
Add 2a format
50
    def test_init_format_2a(self):
6083.2.4 by Jelmer Vernooij
Add test for creating a colocated branch.
51
        """Smoke test for constructing a format 2a repository."""
4428.2.1 by Martin Pool
Add 2a format
52
        out, err = self.run_bzr('init --format=2a')
53
        self.assertEqual("""Created a standalone tree (format: 2a)\n""",
54
            out)
55
        self.assertEqual('', err)
56
6083.2.4 by Jelmer Vernooij
Add test for creating a colocated branch.
57
    def test_init_colocated(self):
58
        """Smoke test for constructing a colocated branch."""
6083.2.11 by Jelmer Vernooij
Add development-colo format.
59
        out, err = self.run_bzr('init --format=development-colo file:,branch=abranch')
6240.2.12 by Jelmer Vernooij
Fix foreign tests.
60
        self.assertEqual("""Created a lightweight checkout (format: development-colo)\n""",
6083.2.4 by Jelmer Vernooij
Add test for creating a colocated branch.
61
            out)
62
        self.assertEqual('', err)
63
        out, err = self.run_bzr('branches')
6379.10.4 by Jelmer Vernooij
Fix init test.
64
        self.assertEqual("  abranch\n", out)
6083.2.4 by Jelmer Vernooij
Add test for creating a colocated branch.
65
        self.assertEqual('', err)
66
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
67
    def test_init_at_repository_root(self):
68
        # bzr init at the root of a repository should create a branch
69
        # and working tree even when creation of working trees is disabled.
70
        t = self.get_transport()
71
        t.mkdir('repo')
72
        format = BzrDirMetaFormat1()
73
        newdir = format.initialize(t.abspath('repo'))
74
        repo = newdir.create_repository(shared=True)
75
        repo.set_make_working_trees(False)
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
76
        out, err = self.run_bzr('init repo')
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
77
        self.assertEqual("""Created a repository tree (format: %s)
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
78
Using shared repository: %s
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
79
""" % (self._default_label, urlutils.local_path_from_url(
80
            repo.bzrdir.root_transport.external_url())), out)
4789.8.1 by John Arbash Meinel
Don't make explicit assumptions about testing current working dir.
81
        cwd = osutils.getcwd()
82
        self.assertEndsWith(out, cwd + '/repo/\n')
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
83
        self.assertEqual('', err)
84
        newdir.open_branch()
85
        newdir.open_workingtree()
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
86
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
87
    def test_init_branch(self):
88
        out, err = self.run_bzr('init')
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
89
        self.assertEqual("Created a standalone tree (format: %s)\n" % (
90
            self._default_label,), out)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
91
        self.assertEqual('', err)
92
93
        # Can it handle subdirectories of branches too ?
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
94
        out, err = self.run_bzr('init subdir1')
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
95
        self.assertEqual("Created a standalone tree (format: %s)\n" % (
96
            self._default_label,), out)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
97
        self.assertEqual('', err)
98
        WorkingTree.open('subdir1')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
99
2524.1.1 by Aaron Bentley
Revert broken changes
100
        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.
101
                            'init subdir2/nothere')
102
        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.
103
        self.assertEqual('', out)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
104
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
105
        os.mkdir('subdir2')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
106
        out, err = self.run_bzr('init subdir2')
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
107
        self.assertEqual("Created a standalone tree (format: %s)\n" % (
108
            self._default_label,), out)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
109
        self.assertEqual('', err)
110
        # init an existing branch.
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
111
        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.
112
        self.assertEqual('', out)
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
113
        self.assertTrue(err.startswith('bzr: ERROR: Already a branch:'))
1662.1.19 by Martin Pool
Better error message when initting existing tree
114
3535.9.6 by Marius Kruger
add explicit blackbox tests for 'init -q' and 'init-repo -q'
115
    def test_init_branch_quiet(self):
116
        out, err = self.run_bzr('init -q')
117
        self.assertEqual('', out)
118
        self.assertEqual('', err)
119
1662.1.19 by Martin Pool
Better error message when initting existing tree
120
    def test_init_existing_branch(self):
121
        self.run_bzr('init')
122
        out, err = self.run_bzr('init', retcode=3)
123
        self.assertContainsRe(err, 'Already a branch')
124
        # don't suggest making a checkout, there's already a working tree
125
        self.assertFalse(re.search(r'checkout', err))
126
127
    def test_init_existing_without_workingtree(self):
128
        # make a repository
2257.2.1 by Wouter van Heyst
Change the ui level default for init-repo to --trees.
129
        repo = self.make_repository('.', shared=True)
130
        repo.set_make_working_trees(False)
1662.1.19 by Martin Pool
Better error message when initting existing tree
131
        # make a branch; by default without a working tree
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
132
        self.run_bzr('init subdir')
1662.1.19 by Martin Pool
Better error message when initting existing tree
133
        # fail
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
134
        out, err = self.run_bzr('init subdir', retcode=3)
1662.1.19 by Martin Pool
Better error message when initting existing tree
135
        # suggests using checkout
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
136
        self.assertContainsRe(err,
137
                              'ontains a branch.*but no working tree.*checkout')
1662.1.19 by Martin Pool
Better error message when initting existing tree
138
1765.1.1 by Robert Collins
Remove the default ignores list from bzr, lowering the minimum overhead in bzr add.
139
    def test_no_defaults(self):
140
        """Init creates no default ignore rules."""
141
        self.run_bzr('init')
142
        self.assertFalse(os.path.exists('.bzrignore'))
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
143
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
144
    def test_init_unicode(self):
145
        # Make sure getcwd can handle unicode filenames
146
        try:
147
            os.mkdir(u'mu-\xb5')
148
        except UnicodeError:
149
            raise TestSkipped("Unable to create Unicode filename")
150
        # try to init unicode dir
3697.5.4 by John Arbash Meinel
Merge vila's init[-repo] changes and add a NEWS entry.
151
        self.run_bzr(['init', '-q', u'mu-\xb5'])
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
152
2524.1.1 by Aaron Bentley
Revert broken changes
153
    def create_simple_tree(self):
154
        tree = self.make_branch_and_tree('tree')
155
        self.build_tree(['tree/a'])
156
        tree.add(['a'], ['a-id'])
157
        tree.commit('one', rev_id='r1')
158
        return tree
159
160
    def test_init_create_prefix(self):
161
        """'bzr init --create-prefix; will create leading directories."""
162
        tree = self.create_simple_tree()
163
164
        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.
165
                            'init ../new/tree', working_dir='tree')
166
        self.run_bzr('init ../new/tree --create-prefix', working_dir='tree')
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
167
        self.assertPathExists('new/tree/.bzr')
2524.1.1 by Aaron Bentley
Revert broken changes
168
5448.4.2 by Neil Martinsen-Burrell
blackbox test
169
    def test_init_default_format_option(self):
170
        """bzr init should read default format from option default_format"""
6499.3.8 by Vincent Ladeuil
Update some forgotten uses of GlobalConfig to GlobalStack.
171
        g_store = _mod_config.GlobalStore()
172
        g_store._load_from_string('''
5448.4.2 by Neil Martinsen-Burrell
blackbox test
173
[DEFAULT]
174
default_format = 1.9
6499.3.8 by Vincent Ladeuil
Update some forgotten uses of GlobalConfig to GlobalStack.
175
''')
176
        g_store.save()
5448.4.3 by Neil Martinsen-Burrell
use option along with controldir.set_default to control the default format
177
        out, err = self.run_bzr_subprocess('init')
5448.4.2 by Neil Martinsen-Burrell
blackbox test
178
        self.assertContainsRe(out, '1.9')
179
5448.6.6 by Matthew Gordon
Added test for 'bzr init --no-tree'
180
    def test_init_no_tree(self):
181
        """'bzr init --no-tree' creates a branch with no working tree."""
182
        out, err = self.run_bzr('init --no-tree')
183
        self.assertStartsWith(out, 'Created a standalone branch')
184
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
185
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
186
class TestSFTPInit(TestCaseWithSFTPServer):
187
188
    def test_init(self):
1830.4.3 by Wouter van Heyst
more review comments
189
        # init on a remote url should succeed.
4599.1.1 by Robert Collins
Make blackbox init tests able to be trivially changed to 2a.
190
        out, err = self.run_bzr(['init', '--pack-0.92', self.get_url()])
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
191
        self.assertEqual(out,
192
            """Created a standalone branch (format: pack-0.92)\n""")
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
193
        self.assertEqual('', err)
3922.2.1 by Marius Kruger
make `bzr init` less verbose, and update tests
194
1830.4.3 by Wouter van Heyst
more review comments
195
    def test_init_existing_branch(self):
196
        # when there is already a branch present, make mention
1830.4.4 by Wouter van Heyst
more review comments
197
        self.make_branch('.')
198
199
        # rely on SFTPServer get_url() pointing at '.'
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
200
        out, err = self.run_bzr_error(['Already a branch'],
201
                                      ['init', self.get_url()])
1830.4.5 by Wouter van Heyst
cleanup
202
203
        # make sure using 'bzr checkout' is not suggested
204
        # for remote locations missing a working tree
2264.1.1 by Martin Pool
make TestSFTPInit.test_init_existing_branch less fragile (jamesw)
205
        self.assertFalse(re.search(r'use bzr checkout', err))
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
206
1830.4.4 by Wouter van Heyst
more review comments
207
    def test_init_existing_branch_with_workingtree(self):
1830.4.3 by Wouter van Heyst
more review comments
208
        # don't distinguish between the branch having a working tree or not
209
        # when the branch itself is remote.
210
        self.make_branch_and_tree('.')
211
212
        # rely on SFTPServer get_url() pointing at '.'
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
213
        self.run_bzr_error(['Already a branch'], ['init', self.get_url()])
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
214
215
    def test_init_append_revisions_only(self):
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
216
        self.run_bzr('init --dirstate-tags normal_branch6')
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
217
        branch = _mod_branch.Branch.open('normal_branch6')
6123.9.11 by Jelmer Vernooij
Make get_append_revisions_only public.
218
        self.assertEqual(None, branch.get_append_revisions_only())
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
219
        self.run_bzr('init --append-revisions-only --dirstate-tags branch6')
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
220
        branch = _mod_branch.Branch.open('branch6')
6123.9.11 by Jelmer Vernooij
Make get_append_revisions_only public.
221
        self.assertEqual(True, branch.get_append_revisions_only())
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
222
        self.run_bzr_error(['cannot be set to append-revisions-only'],
223
                           'init --append-revisions-only --knit knit')
5187.2.4 by Parth Malwankar
added tests.
224
225
    def test_init_without_username(self):
5187.2.6 by Parth Malwankar
lockdir no long mandates whoami but uses unicode version of getuser
226
        """Ensure init works if username is not set.
5187.2.4 by Parth Malwankar
added tests.
227
        """
5187.2.9 by Parth Malwankar
added comment to init/init-repo pass tests for lacking whoami.
228
        # bzr makes user specified whoami mandatory for operations
229
        # like commit as whoami is recorded. init however is not so final
230
        # and uses whoami only in a lock file. Without whoami the login name
231
        # is used. This test is to ensure that init passes even when whoami
232
        # is not available.
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
233
        self.overrideEnv('EMAIL', None)
234
        self.overrideEnv('BZR_EMAIL', None)
5187.2.6 by Parth Malwankar
lockdir no long mandates whoami but uses unicode version of getuser
235
        out, err = self.run_bzr(['init', 'foo'])
236
        self.assertEqual(err, '')
237
        self.assertTrue(os.path.exists('foo'))
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
238