~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_init.py

  • Committer: Martin Pool
  • Date: 2005-08-24 08:59:32 UTC
  • Revision ID: mbp@sourcefrog.net-20050824085932-c61f1f1f1c930e13
- Add a simple UIFactory 

  The idea of this is to let a client of bzrlib set some 
  policy about how output is displayed.

  In this revision all that's done is that progress bars
  are constructed by a policy established by the application
  rather than being randomly constructed in the library 
  or passed down the calls.  This avoids progress bars
  popping up while running the test suite and cleans up
  some code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
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
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
 
 
17
 
 
18
 
"""Test "bzr init"""
19
 
 
20
 
import os
21
 
import re
22
 
 
23
 
from bzrlib import (
24
 
    branch as _mod_branch,
25
 
    osutils,
26
 
    urlutils,
27
 
    )
28
 
from bzrlib.bzrdir import BzrDirMetaFormat1
29
 
from bzrlib.tests import TestSkipped
30
 
from bzrlib.tests.blackbox import ExternalBase
31
 
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
32
 
from bzrlib.workingtree import WorkingTree
33
 
 
34
 
 
35
 
class TestInit(ExternalBase):
36
 
 
37
 
    def setUp(self):
38
 
        ExternalBase.setUp(self)
39
 
        self._default_label = '2a'
40
 
 
41
 
    def test_init_with_format(self):
42
 
        # Verify bzr init --format constructs something plausible
43
 
        t = self.get_transport()
44
 
        self.run_bzr('init --format default')
45
 
        self.assertIsDirectory('.bzr', t)
46
 
        self.assertIsDirectory('.bzr/checkout', t)
47
 
        self.assertIsDirectory('.bzr/checkout/lock', t)
48
 
 
49
 
    def test_init_weave(self):
50
 
        # --format=weave should be accepted to allow interoperation with
51
 
        # old releases when desired.
52
 
        out, err = self.run_bzr('init --format=weave')
53
 
        self.assertEqual("""Created a standalone tree (format: weave)\n""",
54
 
            out)
55
 
        self.assertEqual('', err)
56
 
 
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
 
 
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)
73
 
        out, err = self.run_bzr('init repo')
74
 
        self.assertEqual("""Created a repository tree (format: %s)
75
 
Using shared repository: %s
76
 
""" % (self._default_label, urlutils.local_path_from_url(
77
 
            repo.bzrdir.root_transport.external_url())), out)
78
 
        cwd = osutils.getcwd()
79
 
        self.assertEndsWith(out, cwd + '/repo/\n')
80
 
        self.assertEqual('', err)
81
 
        newdir.open_branch()
82
 
        newdir.open_workingtree()
83
 
 
84
 
    def test_init_branch(self):
85
 
        out, err = self.run_bzr('init')
86
 
        self.assertEqual("Created a standalone tree (format: %s)\n" % (
87
 
            self._default_label,), out)
88
 
        self.assertEqual('', err)
89
 
 
90
 
        # Can it handle subdirectories of branches too ?
91
 
        out, err = self.run_bzr('init subdir1')
92
 
        self.assertEqual("Created a standalone tree (format: %s)\n" % (
93
 
            self._default_label,), out)
94
 
        self.assertEqual('', err)
95
 
        WorkingTree.open('subdir1')
96
 
 
97
 
        self.run_bzr_error(['Parent directory of subdir2/nothere does not exist'],
98
 
                            'init subdir2/nothere')
99
 
        out, err = self.run_bzr('init subdir2/nothere', retcode=3)
100
 
        self.assertEqual('', out)
101
 
 
102
 
        os.mkdir('subdir2')
103
 
        out, err = self.run_bzr('init subdir2')
104
 
        self.assertEqual("Created a standalone tree (format: %s)\n" % (
105
 
            self._default_label,), out)
106
 
        self.assertEqual('', err)
107
 
        # init an existing branch.
108
 
        out, err = self.run_bzr('init subdir2', retcode=3)
109
 
        self.assertEqual('', out)
110
 
        self.failUnless(err.startswith('bzr: ERROR: Already a branch:'))
111
 
 
112
 
    def test_init_branch_quiet(self):
113
 
        out, err = self.run_bzr('init -q')
114
 
        self.assertEqual('', out)
115
 
        self.assertEqual('', err)
116
 
 
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
126
 
        repo = self.make_repository('.', shared=True)
127
 
        repo.set_make_working_trees(False)
128
 
        # make a branch; by default without a working tree
129
 
        self.run_bzr('init subdir')
130
 
        # fail
131
 
        out, err = self.run_bzr('init subdir', retcode=3)
132
 
        # suggests using checkout
133
 
        self.assertContainsRe(err,
134
 
                              'ontains a branch.*but no working tree.*checkout')
135
 
 
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'))
140
 
 
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
148
 
        self.run_bzr(['init', '-q', u'mu-\xb5'])
149
 
 
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'],
162
 
                            'init ../new/tree', working_dir='tree')
163
 
        self.run_bzr('init ../new/tree --create-prefix', working_dir='tree')
164
 
        self.failUnlessExists('new/tree/.bzr')
165
 
 
166
 
 
167
 
class TestSFTPInit(TestCaseWithSFTPServer):
168
 
 
169
 
    def test_init(self):
170
 
        # init on a remote url should succeed.
171
 
        out, err = self.run_bzr(['init', '--pack-0.92', self.get_url()])
172
 
        self.assertEqual(out,
173
 
            """Created a standalone branch (format: pack-0.92)\n""")
174
 
        self.assertEqual('', err)
175
 
 
176
 
    def test_init_existing_branch(self):
177
 
        # when there is already a branch present, make mention
178
 
        self.make_branch('.')
179
 
 
180
 
        # rely on SFTPServer get_url() pointing at '.'
181
 
        out, err = self.run_bzr_error(['Already a branch'],
182
 
                                      ['init', self.get_url()])
183
 
 
184
 
        # make sure using 'bzr checkout' is not suggested
185
 
        # for remote locations missing a working tree
186
 
        self.assertFalse(re.search(r'use bzr checkout', err))
187
 
 
188
 
    def test_init_existing_branch_with_workingtree(self):
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 '.'
194
 
        self.run_bzr_error(['Already a branch'], ['init', self.get_url()])
195
 
 
196
 
    def test_init_append_revisions_only(self):
197
 
        self.run_bzr('init --dirstate-tags normal_branch6')
198
 
        branch = _mod_branch.Branch.open('normal_branch6')
199
 
        self.assertEqual(None, branch._get_append_revisions_only())
200
 
        self.run_bzr('init --append-revisions-only --dirstate-tags branch6')
201
 
        branch = _mod_branch.Branch.open('branch6')
202
 
        self.assertEqual(True, branch._get_append_revisions_only())
203
 
        self.run_bzr_error(['cannot be set to append-revisions-only'],
204
 
                           'init --append-revisions-only --knit knit')