~bzr-pqm/bzr/bzr.dev

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