1
# Copyright (C) 2006 Canonical Ltd
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.
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.
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
from bzrlib.bzrdir import BzrDirMetaFormat1
24
from bzrlib.tests.blackbox import ExternalBase
25
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
26
from bzrlib.workingtree import WorkingTree
29
class TestInit(ExternalBase):
31
def test_init_with_format(self):
32
# Verify bzr init --format constructs something plausible
33
t = self.get_transport()
34
self.runbzr('init --format default')
35
self.assertIsDirectory('.bzr', t)
36
self.assertIsDirectory('.bzr/checkout', t)
37
self.assertIsDirectory('.bzr/checkout/lock', t)
39
def test_init_weave(self):
40
# --format=weave should be accepted to allow interoperation with
41
# old releases when desired.
42
out, err = self.run_bzr('init', '--format=weave')
43
self.assertEqual('', out)
44
self.assertEqual('', err)
46
def test_init_at_repository_root(self):
47
# bzr init at the root of a repository should create a branch
48
# and working tree even when creation of working trees is disabled.
49
t = self.get_transport()
51
format = BzrDirMetaFormat1()
52
newdir = format.initialize(t.abspath('repo'))
53
repo = newdir.create_repository(shared=True)
54
repo.set_make_working_trees(False)
55
out, err = self.run_bzr('init', 'repo')
56
self.assertEqual('', out)
57
self.assertEqual('', err)
59
newdir.open_workingtree()
61
def test_init_branch(self):
62
out, err = self.run_bzr('init')
63
self.assertEqual('', out)
64
self.assertEqual('', err)
66
# Can it handle subdirectories of branches too ?
67
out, err = self.run_bzr('init', 'subdir1')
68
self.assertEqual('', out)
69
self.assertEqual('', err)
70
WorkingTree.open('subdir1')
72
out, err = self.run_bzr('init', 'subdir2/nothere', retcode=3)
73
self.assertEqual('', out)
74
self.assertContainsRe(err,
76
'\[Errno 2\] No such file or directory')
79
out, err = self.run_bzr('init', 'subdir2')
80
self.assertEqual('', out)
81
self.assertEqual('', err)
82
# init an existing branch.
83
out, err = self.run_bzr('init', 'subdir2', retcode=3)
84
self.assertEqual('', out)
85
self.failUnless(err.startswith('bzr: ERROR: Already a branch:'))
87
def test_init_existing_branch(self):
89
out, err = self.run_bzr('init', retcode=3)
90
self.assertContainsRe(err, 'Already a branch')
91
# don't suggest making a checkout, there's already a working tree
92
self.assertFalse(re.search(r'checkout', err))
94
def test_init_existing_without_workingtree(self):
96
self.run_bzr('init-repo', '.')
97
# make a branch; by default without a working tree
98
self.run_bzr('init', 'subdir')
100
out, err = self.run_bzr('init', 'subdir', retcode=3)
101
# suggests using checkout
102
self.assertContainsRe(err, 'ontains a branch.*but no working tree.*checkout')
104
def test_no_defaults(self):
105
"""Init creates no default ignore rules."""
107
self.assertFalse(os.path.exists('.bzrignore'))
110
class TestSFTPInit(TestCaseWithSFTPServer):
113
# init on a remote url should succeed.
114
out, err = self.run_bzr('init', self.get_url())
115
self.assertEqual('', out)
116
self.assertEqual('', err)
118
def test_init_existing_branch(self):
119
# when there is already a branch present, make mention
120
self.make_branch('.')
122
# rely on SFTPServer get_url() pointing at '.'
123
out, err = self.run_bzr_error(['Already a branch'], 'init', self.get_url())
125
# make sure using 'bzr checkout' is not suggested
126
# for remote locations missing a working tree
127
self.assertFalse(re.search(r'checkout', err))
129
def test_init_existing_branch_with_workingtree(self):
130
# don't distinguish between the branch having a working tree or not
131
# when the branch itself is remote.
132
self.make_branch_and_tree('.')
134
# rely on SFTPServer get_url() pointing at '.'
135
self.run_bzr_error(['Already a branch'], 'init', self.get_url())