1
# Copyright (C) 2006-2011 Canonical Ltd
1
# Copyright (C) 2006-2010 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
21
from bzrlib.bzrdir import BzrDirMetaFormat1
22
from bzrlib.controldir import ControlDir
21
from bzrlib import osutils
22
from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
23
23
import bzrlib.errors as errors
24
24
from bzrlib.tests import TestCaseInTempDir
25
from bzrlib.tests.matchers import ContainsNoVfsCalls
28
26
class TestSharedRepo(TestCaseInTempDir):
35
33
shared repository: a
37
35
self.assertEqual(err, "")
38
dir = ControlDir.open('a')
36
dir = BzrDir.open('a')
39
37
self.assertIs(dir.open_repository().is_shared(), True)
40
38
self.assertRaises(errors.NotBranchError, dir.open_branch)
41
39
self.assertRaises(errors.NoWorkingTree, dir.open_workingtree)
44
42
out, err = self.run_bzr("init-repository a -q")
45
43
self.assertEqual(out, "")
46
44
self.assertEqual(err, "")
47
dir = ControlDir.open('a')
45
dir = BzrDir.open('a')
48
46
self.assertIs(dir.open_repository().is_shared(), True)
49
47
self.assertRaises(errors.NotBranchError, dir.open_branch)
50
48
self.assertRaises(errors.NoWorkingTree, dir.open_workingtree)
57
55
out, err = self.run_bzr("init-repository .")
58
dir = ControlDir.open('.')
56
dir = BzrDir.open('.')
59
57
self.assertTrue(dir.open_repository())
61
59
def test_init(self):
62
60
self.run_bzr("init-repo a")
63
61
self.run_bzr("init --format=default a/b")
64
dir = ControlDir.open('a')
62
dir = BzrDir.open('a')
65
63
self.assertIs(dir.open_repository().is_shared(), True)
66
64
self.assertRaises(errors.NotBranchError, dir.open_branch)
67
65
self.assertRaises(errors.NoWorkingTree, dir.open_workingtree)
68
bdir = ControlDir.open('a/b')
66
bdir = BzrDir.open('a/b')
70
68
self.assertRaises(errors.NoRepositoryPresent, bdir.open_repository)
71
69
wt = bdir.open_workingtree()
74
72
self.run_bzr("init-repo a")
75
73
self.run_bzr("init --format=default a/b")
76
74
self.run_bzr('branch a/b a/c')
77
cdir = ControlDir.open('a/c')
75
cdir = BzrDir.open('a/c')
79
77
self.assertRaises(errors.NoRepositoryPresent, cdir.open_repository)
80
78
cdir.open_workingtree()
82
80
def test_branch_tree(self):
83
81
self.run_bzr("init-repo --trees a")
84
82
self.run_bzr("init --format=default b")
85
with file('b/hello', 'wt') as f: f.write('bar')
83
file('b/hello', 'wt').write('bar')
86
84
self.run_bzr("add b/hello")
87
85
self.run_bzr("commit -m bar b/hello")
89
87
self.run_bzr('branch b a/c')
90
cdir = ControlDir.open('a/c')
88
cdir = BzrDir.open('a/c')
92
90
self.assertRaises(errors.NoRepositoryPresent, cdir.open_repository)
93
self.assertPathExists('a/c/hello')
91
self.failUnlessExists('a/c/hello')
94
92
cdir.open_workingtree()
96
94
def test_trees_default(self):
97
95
# 0.15 switched to trees by default
98
96
self.run_bzr("init-repo repo")
99
repo = ControlDir.open("repo").open_repository()
97
repo = BzrDir.open("repo").open_repository()
100
98
self.assertEqual(True, repo.make_working_trees())
102
100
def test_trees_argument(self):
103
101
# Supplying the --trees argument should be harmless,
104
102
# as it was previously non-default we need to get it right.
105
103
self.run_bzr("init-repo --trees trees")
106
repo = ControlDir.open("trees").open_repository()
104
repo = BzrDir.open("trees").open_repository()
107
105
self.assertEqual(True, repo.make_working_trees())
109
107
def test_no_trees_argument(self):
110
108
# --no-trees should make it so that there is no working tree
111
109
self.run_bzr("init-repo --no-trees notrees")
112
repo = ControlDir.open("notrees").open_repository()
110
repo = BzrDir.open("notrees").open_repository()
113
111
self.assertEqual(False, repo.make_working_trees())
115
113
def test_init_repo_smart_acceptance(self):
122
120
# being too low. If rpc_count increases, more network roundtrips have
123
121
# become necessary for this use case. Please do not adjust this number
124
122
# upwards without agreement from bzr's network support maintainers.
125
self.assertLength(11, self.hpss_calls)
126
self.assertLength(1, self.hpss_connections)
127
self.assertThat(self.hpss_calls, ContainsNoVfsCalls)
123
self.assertLength(15, self.hpss_calls)
129
125
def test_notification_on_branch_from_repository(self):
130
126
out, err = self.run_bzr("init-repository -q a")
131
127
self.assertEqual(out, "")
132
128
self.assertEqual(err, "")
133
dir = ControlDir.open('a')
129
dir = BzrDir.open('a')
134
130
dir.open_repository() # there is a repository there
135
131
e = self.assertRaises(errors.NotBranchError, dir.open_branch)
136
132
self.assertContainsRe(str(e), "location is a repository")
147
143
def test_init_repo_with_post_repo_init_hook(self):
149
ControlDir.hooks.install_named_hook('post_repo_init', calls.append, None)
145
BzrDir.hooks.install_named_hook('post_repo_init', calls.append, None)
150
146
self.assertLength(0, calls)
151
147
self.run_bzr("init-repository a")
152
148
self.assertLength(1, calls)
159
155
# and uses whoami only in a lock file. Without whoami the login name
160
156
# is used. This test is to ensure that init-repo passes even when whoami
161
157
# is not available.
162
self.overrideEnv('EMAIL', None)
163
self.overrideEnv('BZR_EMAIL', None)
158
osutils.set_or_unset_env('EMAIL', None)
159
osutils.set_or_unset_env('BZR_EMAIL', None)
164
160
out, err = self.run_bzr(['init-repo', 'foo'])
165
161
self.assertEqual(err, '')
166
162
self.assertTrue(os.path.exists('foo'))