/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: Michael Ellerman
  • Date: 2006-05-31 08:44:29 UTC
  • mto: (1711.2.63 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 1792.
  • Revision ID: michael@ellerman.id.au-20060531084429-35e5429abda9f560
Add optional location to ancestry and fix behaviour for checkouts.

This adds an optional location parameter to the ancestry command. It also
changes the behaviour of ancestry on checkouts such that if they have
been created with a subset of the branch history, only the subset is
shown by 'bzr ancestry'. Tests for all of that as well.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2007, 2009, 2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 by Canonical Ltd
2
2
#
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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
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
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
#
17
17
 
18
18
"""Tests of the 'bzr add' command."""
19
19
 
20
20
import os
21
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
 
 
 
22
from bzrlib.tests.blackbox import ExternalBase
 
23
 
 
24
 
 
25
class TestAdd(ExternalBase):
 
26
        
45
27
    def test_add_reports(self):
46
28
        """add command prints the names of added files."""
47
 
        tree = self.make_branch_and_tree('.')
 
29
        self.runbzr('init')
48
30
        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]
 
31
        out = self.run_bzr_captured(['add'], retcode=0)[0]
51
32
        # the ordering is not defined at the moment
52
33
        results = sorted(out.rstrip('\n').split('\n'))
53
 
        self.assertEquals(['adding .bzrignore',
54
 
                           'adding dir',
55
 
                           'adding dir/sub.txt',
56
 
                           'adding top.txt'],
 
34
        self.assertEquals(['If you wish to add some of these files, please'\
 
35
                           ' add them by name.',
 
36
                           'added dir',
 
37
                           'added dir/sub.txt',
 
38
                           'added top.txt',
 
39
                           'ignored 1 file(s).'],
57
40
                          results)
58
 
        out = self.run_bzr('add -v')[0]
 
41
        out = self.run_bzr_captured(['add', '-v'], retcode=0)[0]
59
42
        results = sorted(out.rstrip('\n').split('\n'))
60
 
        self.assertEquals(['ignored CVS matching "CVS"'],
 
43
        self.assertEquals(['If you wish to add some of these files, please'\
 
44
                           ' add them by name.',
 
45
                           'ignored CVS matching "CVS"'],
61
46
                          results)
62
47
 
63
48
    def test_add_quiet_is(self):
64
49
        """add -q does not print the names of added files."""
65
 
        tree = self.make_branch_and_tree('.')
 
50
        self.runbzr('init')
66
51
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
67
 
        out = self.run_bzr('add -q')[0]
 
52
        out = self.run_bzr_captured(['add', '-q'], retcode=0)[0]
68
53
        # the ordering is not defined at the moment
69
54
        results = sorted(out.rstrip('\n').split('\n'))
70
55
        self.assertEquals([''], results)
74
59
 
75
60
        "bzr add" should add the parent(s) as necessary.
76
61
        """
77
 
        tree = self.make_branch_and_tree('.')
 
62
        self.runbzr('init')
78
63
        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], '')
 
64
        self.assertEquals(self.capture('unknowns'), 'inertiatic\n')
 
65
        self.run_bzr('add', 'inertiatic/esp')
 
66
        self.assertEquals(self.capture('unknowns'), '')
82
67
 
83
68
        # Multiple unversioned parents
84
69
        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], '')
 
70
        self.assertEquals(self.capture('unknowns'), 'veil\n')
 
71
        self.run_bzr('add', 'veil/cerpin/taxt')
 
72
        self.assertEquals(self.capture('unknowns'), '')
88
73
 
89
74
        # Check whacky paths work
90
75
        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], '')
 
76
        self.assertEquals(self.capture('unknowns'), 'cicatriz\n')
 
77
        self.run_bzr('add', 'inertiatic/../cicatriz/esp')
 
78
        self.assertEquals(self.capture('unknowns'), '')
94
79
 
95
80
    def test_add_in_versioned(self):
96
81
        """Try to add a file in a versioned directory.
97
82
 
98
83
        "bzr add" should do this happily.
99
84
        """
100
 
        tree = self.make_branch_and_tree('.')
 
85
        self.runbzr('init')
101
86
        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], '')
 
87
        self.assertEquals(self.capture('unknowns'), 'inertiatic\n')
 
88
        self.run_bzr('add', '--no-recurse', 'inertiatic')
 
89
        self.assertEquals(self.capture('unknowns'), 'inertiatic/esp\n')
 
90
        self.run_bzr('add', 'inertiatic/esp')
 
91
        self.assertEquals(self.capture('unknowns'), '')
107
92
 
108
93
    def test_subdir_add(self):
109
94
        """Add in subdirectory should add only things from there down"""
110
95
        from bzrlib.workingtree import WorkingTree
111
 
 
 
96
        
112
97
        eq = self.assertEqual
113
 
        ass = self.assertTrue
114
 
 
 
98
        ass = self.assert_
 
99
        chdir = os.chdir
 
100
        
115
101
        t = self.make_branch_and_tree('.')
116
102
        b = t.branch
117
103
        self.build_tree(['src/', 'README'])
118
 
 
 
104
        
119
105
        eq(sorted(t.unknowns()),
120
106
           ['README', 'src'])
121
 
 
122
 
        self.run_bzr('add src')
123
 
 
 
107
        
 
108
        self.run_bzr('add', 'src')
 
109
        
124
110
        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], '')
 
111
        
 
112
        chdir('src')
 
113
        self.run_bzr('add')
 
114
        
 
115
        self.assertEquals(self.capture('unknowns'), 'README\n')
 
116
        eq(len(t.read_working_inventory()), 3)
 
117
                
 
118
        chdir('..')
 
119
        self.run_bzr('add')
 
120
        self.assertEquals(self.capture('unknowns'), '')
139
121
        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')