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