/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_add.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, 2007, 2009, 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
 
"""Tests of the 'bzr add' command."""
19
 
 
20
 
import os
21
 
 
22
 
from bzrlib import (
23
 
    osutils,
24
 
    tests,
25
 
    )
26
 
 
27
 
 
28
 
def load_tests(standard_tests, module, loader):
29
 
    """Parameterize tests for view-aware vs not."""
30
 
    to_adapt, result = tests.split_suite_by_condition(
31
 
        standard_tests, tests.condition_isinstance(TestAdd))
32
 
    scenarios = [
33
 
        ('pre-views', {'branch_tree_format': 'pack-0.92'}),
34
 
        ('view-aware', {'branch_tree_format': 'development6-rich-root'}),
35
 
        ]
36
 
    return tests.multiply_tests(to_adapt, scenarios, result)
37
 
 
38
 
 
39
 
class TestAdd(tests.TestCaseWithTransport):
40
 
 
41
 
    def make_branch_and_tree(self, dir):
42
 
        return super(TestAdd, self).make_branch_and_tree(
43
 
            dir, format=self.branch_tree_format)
44
 
 
45
 
    def test_add_reports(self):
46
 
        """add command prints the names of added files."""
47
 
        tree = self.make_branch_and_tree('.')
48
 
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt', 'CVS'])
49
 
        self.build_tree_contents([('.bzrignore', 'CVS\n')])
50
 
        out = self.run_bzr('add')[0]
51
 
        # the ordering is not defined at the moment
52
 
        results = sorted(out.rstrip('\n').split('\n'))
53
 
        self.assertEquals(['adding .bzrignore',
54
 
                           'adding dir',
55
 
                           'adding dir/sub.txt',
56
 
                           'adding top.txt'],
57
 
                          results)
58
 
        out = self.run_bzr('add -v')[0]
59
 
        results = sorted(out.rstrip('\n').split('\n'))
60
 
        self.assertEquals(['ignored CVS matching "CVS"'],
61
 
                          results)
62
 
 
63
 
    def test_add_quiet_is(self):
64
 
        """add -q does not print the names of added files."""
65
 
        tree = self.make_branch_and_tree('.')
66
 
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
67
 
        out = self.run_bzr('add -q')[0]
68
 
        # the ordering is not defined at the moment
69
 
        results = sorted(out.rstrip('\n').split('\n'))
70
 
        self.assertEquals([''], results)
71
 
 
72
 
    def test_add_in_unversioned(self):
73
 
        """Try to add a file in an unversioned directory.
74
 
 
75
 
        "bzr add" should add the parent(s) as necessary.
76
 
        """
77
 
        tree = self.make_branch_and_tree('.')
78
 
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
79
 
        self.assertEquals(self.run_bzr('unknowns')[0], 'inertiatic\n')
80
 
        self.run_bzr('add inertiatic/esp')
81
 
        self.assertEquals(self.run_bzr('unknowns')[0], '')
82
 
 
83
 
        # Multiple unversioned parents
84
 
        self.build_tree(['veil/', 'veil/cerpin/', 'veil/cerpin/taxt'])
85
 
        self.assertEquals(self.run_bzr('unknowns')[0], 'veil\n')
86
 
        self.run_bzr('add veil/cerpin/taxt')
87
 
        self.assertEquals(self.run_bzr('unknowns')[0], '')
88
 
 
89
 
        # Check whacky paths work
90
 
        self.build_tree(['cicatriz/', 'cicatriz/esp'])
91
 
        self.assertEquals(self.run_bzr('unknowns')[0], 'cicatriz\n')
92
 
        self.run_bzr('add inertiatic/../cicatriz/esp')
93
 
        self.assertEquals(self.run_bzr('unknowns')[0], '')
94
 
 
95
 
    def test_add_in_versioned(self):
96
 
        """Try to add a file in a versioned directory.
97
 
 
98
 
        "bzr add" should do this happily.
99
 
        """
100
 
        tree = self.make_branch_and_tree('.')
101
 
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
102
 
        self.assertEquals(self.run_bzr('unknowns')[0], 'inertiatic\n')
103
 
        self.run_bzr('add --no-recurse inertiatic')
104
 
        self.assertEquals(self.run_bzr('unknowns')[0], 'inertiatic/esp\n')
105
 
        self.run_bzr('add inertiatic/esp')
106
 
        self.assertEquals(self.run_bzr('unknowns')[0], '')
107
 
 
108
 
    def test_subdir_add(self):
109
 
        """Add in subdirectory should add only things from there down"""
110
 
        from bzrlib.workingtree import WorkingTree
111
 
 
112
 
        eq = self.assertEqual
113
 
        ass = self.assertTrue
114
 
 
115
 
        t = self.make_branch_and_tree('.')
116
 
        b = t.branch
117
 
        self.build_tree(['src/', 'README'])
118
 
 
119
 
        eq(sorted(t.unknowns()),
120
 
           ['README', 'src'])
121
 
 
122
 
        self.run_bzr('add src')
123
 
 
124
 
        self.build_tree(['src/foo.c'])
125
 
 
126
 
        # add with no arguments in a subdirectory gets only files below that
127
 
        # subdirectory
128
 
        self.run_bzr('add', working_dir='src')
129
 
        self.assertEquals('README\n',
130
 
                          self.run_bzr('unknowns', working_dir='src')[0])
131
 
        # reopen to see the new changes
132
 
        t = t.bzrdir.open_workingtree('src')
133
 
        versioned = [path for path, entry in t.iter_entries_by_dir()]
134
 
        self.assertEquals(versioned, ['', 'src', 'src/foo.c'])
135
 
 
136
 
        # add from the parent directory should pick up all file names
137
 
        self.run_bzr('add')
138
 
        self.assertEquals(self.run_bzr('unknowns')[0], '')
139
 
        self.run_bzr('check')
140
 
 
141
 
    def test_add_missing(self):
142
 
        """bzr add foo where foo is missing should error."""
143
 
        self.make_branch_and_tree('.')
144
 
        self.run_bzr('add missing-file', retcode=3)
145
 
 
146
 
    def test_add_from(self):
147
 
        base_tree = self.make_branch_and_tree('base')
148
 
        self.build_tree(['base/a', 'base/b/', 'base/b/c'])
149
 
        base_tree.add(['a', 'b', 'b/c'])
150
 
        base_tree.commit('foo')
151
 
 
152
 
        new_tree = self.make_branch_and_tree('new')
153
 
        self.build_tree(['new/a', 'new/b/', 'new/b/c', 'd'])
154
 
 
155
 
        os.chdir('new')
156
 
        out, err = self.run_bzr('add --file-ids-from ../base')
157
 
        self.assertEqual('', err)
158
 
        self.assertEqualDiff('adding a w/ file id from a\n'
159
 
                             'adding b w/ file id from b\n'
160
 
                             'adding b/c w/ file id from b/c\n',
161
 
                             out)
162
 
        new_tree = new_tree.bzrdir.open_workingtree()
163
 
        self.assertEqual(base_tree.path2id('a'), new_tree.path2id('a'))
164
 
        self.assertEqual(base_tree.path2id('b'), new_tree.path2id('b'))
165
 
        self.assertEqual(base_tree.path2id('b/c'), new_tree.path2id('b/c'))
166
 
 
167
 
    def test_add_from_subdir(self):
168
 
        base_tree = self.make_branch_and_tree('base')
169
 
        self.build_tree(['base/a', 'base/b/', 'base/b/c', 'base/b/d'])
170
 
        base_tree.add(['a', 'b', 'b/c', 'b/d'])
171
 
        base_tree.commit('foo')
172
 
 
173
 
        new_tree = self.make_branch_and_tree('new')
174
 
        self.build_tree(['new/c', 'new/d'])
175
 
 
176
 
        os.chdir('new')
177
 
        out, err = self.run_bzr('add --file-ids-from ../base/b')
178
 
        self.assertEqual('', err)
179
 
        self.assertEqualDiff('adding c w/ file id from b/c\n'
180
 
                             'adding d w/ file id from b/d\n',
181
 
                             out)
182
 
 
183
 
        new_tree = new_tree.bzrdir.open_workingtree()
184
 
        self.assertEqual(base_tree.path2id('b/c'), new_tree.path2id('c'))
185
 
        self.assertEqual(base_tree.path2id('b/d'), new_tree.path2id('d'))
186
 
 
187
 
    def test_add_dry_run(self):
188
 
        """Test a dry run add, make sure nothing is added."""
189
 
        wt = self.make_branch_and_tree('.')
190
 
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
191
 
        self.assertEqual(list(wt.unknowns()), ['inertiatic'])
192
 
        self.run_bzr('add --dry-run')
193
 
        self.assertEqual(list(wt.unknowns()), ['inertiatic'])
194
 
 
195
 
    def test_add_control_dir(self):
196
 
        """The control dir and its content should be refused."""
197
 
        self.make_branch_and_tree('.')
198
 
        err = self.run_bzr('add .bzr', retcode=3)[1]
199
 
        self.assertContainsRe(err, r'ERROR:.*\.bzr.*control file')
200
 
        err = self.run_bzr('add .bzr/README', retcode=3)[1]
201
 
        self.assertContainsRe(err, r'ERROR:.*\.bzr.*control file')
202
 
        self.build_tree(['.bzr/crescent'])
203
 
        err = self.run_bzr('add .bzr/crescent', retcode=3)[1]
204
 
        self.assertContainsRe(err, r'ERROR:.*\.bzr.*control file')
205
 
 
206
 
    def test_add_via_symlink(self):
207
 
        self.requireFeature(tests.SymlinkFeature)
208
 
        self.make_branch_and_tree('source')
209
 
        self.build_tree(['source/top.txt'])
210
 
        os.symlink('source', 'link')
211
 
        out = self.run_bzr(['add', 'link/top.txt'])[0]
212
 
        self.assertEquals(out, 'adding top.txt\n')
213
 
 
214
 
    def test_add_symlink_to_abspath(self):
215
 
        self.requireFeature(tests.SymlinkFeature)
216
 
        self.make_branch_and_tree('tree')
217
 
        os.symlink(osutils.abspath('target'), 'tree/link')
218
 
        out = self.run_bzr(['add', 'tree/link'])[0]
219
 
        self.assertEquals(out, 'adding link\n')