diff options
Diffstat (limited to 'bzrlib/tests/blackbox/test_init.py')
-rw-r--r-- | bzrlib/tests/blackbox/test_init.py | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/bzrlib/tests/blackbox/test_init.py b/bzrlib/tests/blackbox/test_init.py new file mode 100644 index 0000000..7031aba --- /dev/null +++ b/bzrlib/tests/blackbox/test_init.py @@ -0,0 +1,236 @@ +# Copyright (C) 2006-2011 Canonical Ltd +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +"""Test 'bzr init'""" + +import os +import re + +from bzrlib import ( + branch as _mod_branch, + config as _mod_config, + osutils, + urlutils, + ) +from bzrlib.bzrdir import BzrDirMetaFormat1 +from bzrlib.tests import TestSkipped +from bzrlib.tests import TestCaseWithTransport +from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer +from bzrlib.workingtree import WorkingTree + + +class TestInit(TestCaseWithTransport): + + def setUp(self): + TestCaseWithTransport.setUp(self) + self._default_label = '2a' + + def test_init_with_format(self): + # Verify bzr init --format constructs something plausible + t = self.get_transport() + self.run_bzr('init --format default') + self.assertIsDirectory('.bzr', t) + self.assertIsDirectory('.bzr/checkout', t) + self.assertIsDirectory('.bzr/checkout/lock', t) + + def test_init_format_2a(self): + """Smoke test for constructing a format 2a repository.""" + out, err = self.run_bzr('init --format=2a') + self.assertEqual("""Created a standalone tree (format: 2a)\n""", + out) + self.assertEqual('', err) + + def test_init_colocated(self): + """Smoke test for constructing a colocated branch.""" + out, err = self.run_bzr('init --format=development-colo file:,branch=abranch') + self.assertEqual("""Created a lightweight checkout (format: development-colo)\n""", + out) + self.assertEqual('', err) + out, err = self.run_bzr('branches') + self.assertEqual(" abranch\n", out) + self.assertEqual('', err) + + def test_init_at_repository_root(self): + # bzr init at the root of a repository should create a branch + # and working tree even when creation of working trees is disabled. + t = self.get_transport() + t.mkdir('repo') + format = BzrDirMetaFormat1() + newdir = format.initialize(t.abspath('repo')) + repo = newdir.create_repository(shared=True) + repo.set_make_working_trees(False) + out, err = self.run_bzr('init repo') + self.assertEqual("""Created a repository tree (format: %s) +Using shared repository: %s +""" % (self._default_label, urlutils.local_path_from_url( + repo.bzrdir.root_transport.external_url())), out) + cwd = osutils.getcwd() + self.assertEndsWith(out, cwd + '/repo/\n') + self.assertEqual('', err) + newdir.open_branch() + newdir.open_workingtree() + + def test_init_branch(self): + out, err = self.run_bzr('init') + self.assertEqual("Created a standalone tree (format: %s)\n" % ( + self._default_label,), out) + self.assertEqual('', err) + + # Can it handle subdirectories of branches too ? + out, err = self.run_bzr('init subdir1') + self.assertEqual("Created a standalone tree (format: %s)\n" % ( + self._default_label,), out) + self.assertEqual('', err) + WorkingTree.open('subdir1') + + self.run_bzr_error(['Parent directory of subdir2/nothere does not exist'], + 'init subdir2/nothere') + out, err = self.run_bzr('init subdir2/nothere', retcode=3) + self.assertEqual('', out) + + os.mkdir('subdir2') + out, err = self.run_bzr('init subdir2') + self.assertEqual("Created a standalone tree (format: %s)\n" % ( + self._default_label,), out) + self.assertEqual('', err) + # init an existing branch. + out, err = self.run_bzr('init subdir2', retcode=3) + self.assertEqual('', out) + self.assertTrue(err.startswith('bzr: ERROR: Already a branch:')) + + def test_init_branch_quiet(self): + out, err = self.run_bzr('init -q') + self.assertEqual('', out) + self.assertEqual('', err) + + def test_init_existing_branch(self): + self.run_bzr('init') + out, err = self.run_bzr('init', retcode=3) + self.assertContainsRe(err, 'Already a branch') + # don't suggest making a checkout, there's already a working tree + self.assertFalse(re.search(r'checkout', err)) + + def test_init_existing_without_workingtree(self): + # make a repository + repo = self.make_repository('.', shared=True) + repo.set_make_working_trees(False) + # make a branch; by default without a working tree + self.run_bzr('init subdir') + # fail + out, err = self.run_bzr('init subdir', retcode=3) + # suggests using checkout + self.assertContainsRe(err, + 'ontains a branch.*but no working tree.*checkout') + + def test_no_defaults(self): + """Init creates no default ignore rules.""" + self.run_bzr('init') + self.assertFalse(os.path.exists('.bzrignore')) + + def test_init_unicode(self): + # Make sure getcwd can handle unicode filenames + try: + os.mkdir(u'mu-\xb5') + except UnicodeError: + raise TestSkipped("Unable to create Unicode filename") + # try to init unicode dir + self.run_bzr(['init', '-q', u'mu-\xb5']) + + def create_simple_tree(self): + tree = self.make_branch_and_tree('tree') + self.build_tree(['tree/a']) + tree.add(['a'], ['a-id']) + tree.commit('one', rev_id='r1') + return tree + + def test_init_create_prefix(self): + """'bzr init --create-prefix; will create leading directories.""" + tree = self.create_simple_tree() + + self.run_bzr_error(['Parent directory of ../new/tree does not exist'], + 'init ../new/tree', working_dir='tree') + self.run_bzr('init ../new/tree --create-prefix', working_dir='tree') + self.assertPathExists('new/tree/.bzr') + + def test_init_default_format_option(self): + """bzr init should read default format from option default_format""" + conf = _mod_config.GlobalConfig.from_string(''' +[DEFAULT] +default_format = 1.9 +''', save=True) + out, err = self.run_bzr_subprocess('init') + self.assertContainsRe(out, '1.9') + + def test_init_no_tree(self): + """'bzr init --no-tree' creates a branch with no working tree.""" + out, err = self.run_bzr('init --no-tree') + self.assertStartsWith(out, 'Created a standalone branch') + + +class TestSFTPInit(TestCaseWithSFTPServer): + + def test_init(self): + # init on a remote url should succeed. + out, err = self.run_bzr(['init', '--pack-0.92', self.get_url()]) + self.assertEqual(out, + """Created a standalone branch (format: pack-0.92)\n""") + self.assertEqual('', err) + + def test_init_existing_branch(self): + # when there is already a branch present, make mention + self.make_branch('.') + + # rely on SFTPServer get_url() pointing at '.' + out, err = self.run_bzr_error(['Already a branch'], + ['init', self.get_url()]) + + # make sure using 'bzr checkout' is not suggested + # for remote locations missing a working tree + self.assertFalse(re.search(r'use bzr checkout', err)) + + def test_init_existing_branch_with_workingtree(self): + # don't distinguish between the branch having a working tree or not + # when the branch itself is remote. + self.make_branch_and_tree('.') + + # rely on SFTPServer get_url() pointing at '.' + self.run_bzr_error(['Already a branch'], ['init', self.get_url()]) + + def test_init_append_revisions_only(self): + self.run_bzr('init --dirstate-tags normal_branch6') + branch = _mod_branch.Branch.open('normal_branch6') + self.assertEqual(None, branch.get_append_revisions_only()) + self.run_bzr('init --append-revisions-only --dirstate-tags branch6') + branch = _mod_branch.Branch.open('branch6') + self.assertEqual(True, branch.get_append_revisions_only()) + self.run_bzr_error(['cannot be set to append-revisions-only'], + 'init --append-revisions-only --knit knit') + + def test_init_without_username(self): + """Ensure init works if username is not set. + """ + # bzr makes user specified whoami mandatory for operations + # like commit as whoami is recorded. init however is not so final + # and uses whoami only in a lock file. Without whoami the login name + # is used. This test is to ensure that init passes even when whoami + # is not available. + self.overrideEnv('EMAIL', None) + self.overrideEnv('BZR_EMAIL', None) + out, err = self.run_bzr(['init', 'foo']) + self.assertEqual(err, '') + self.assertTrue(os.path.exists('foo')) + |