~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_ls.py

Merge bzr.dev and tree-file-ids-as-tuples.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006-2012 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""External tests of 'bzr ls'"""
18
18
 
19
 
import os
20
 
 
21
 
from bzrlib import ignores
22
 
from bzrlib.tests import TestCaseWithTransport
23
 
 
24
 
 
25
 
class TestLS(TestCaseWithTransport):
 
19
from bzrlib import (
 
20
    ignores,
 
21
    tests,
 
22
    )
 
23
from bzrlib.tests.matchers import ContainsNoVfsCalls
 
24
 
 
25
 
 
26
class TestLS(tests.TestCaseWithTransport):
26
27
 
27
28
    def setUp(self):
28
29
        super(TestLS, self).setUp()
29
 
        
 
30
 
30
31
        # Create a simple branch that can be used in testing
31
32
        ignores._set_user_ignores(['user-ignore'])
32
33
 
36
37
                                 ('a', 'hello\n'),
37
38
                                 ])
38
39
 
39
 
    def ls_equals(self, value, args=None):
 
40
    def ls_equals(self, value, args=None, recursive=True, working_dir=None):
40
41
        command = 'ls'
41
42
        if args is not None:
42
43
            command += ' ' + args
43
 
        out, err = self.run_bzr(command)
 
44
        if recursive:
 
45
            command += ' -R'
 
46
        out, err = self.run_bzr(command, working_dir=working_dir)
44
47
        self.assertEqual('', err)
45
48
        self.assertEqualDiff(value, out)
46
49
 
52
55
    def test_ls_basic(self):
53
56
        """Test the abilities of 'bzr ls'"""
54
57
        self.ls_equals('.bzrignore\na\n')
 
58
        self.ls_equals('.bzrignore\na\n', './')
55
59
        self.ls_equals('?        .bzrignore\n'
56
60
                       '?        a\n',
57
61
                       '--verbose')
60
64
                       '--unknown')
61
65
        self.ls_equals('', '--ignored')
62
66
        self.ls_equals('', '--versioned')
 
67
        self.ls_equals('', '-V')
63
68
        self.ls_equals('.bzrignore\n'
64
69
                       'a\n',
65
70
                       '--unknown --ignored --versioned')
 
71
        self.ls_equals('.bzrignore\n'
 
72
                       'a\n',
 
73
                       '--unknown --ignored -V')
66
74
        self.ls_equals('', '--ignored --versioned')
 
75
        self.ls_equals('', '--ignored -V')
67
76
        self.ls_equals('.bzrignore\0a\0', '--null')
68
77
 
69
78
    def test_ls_added(self):
72
81
                       'V        a\n',
73
82
                       '--verbose')
74
83
        self.wt.commit('add')
75
 
        
 
84
 
76
85
        self.build_tree(['subdir/'])
77
86
        self.ls_equals('?        .bzrignore\n'
78
87
                       'V        a\n'
92
101
        self.ls_equals(
93
102
            '.bzrignore                                         \n'
94
103
            'a                                                  a-id\n'
95
 
            'subdir                                             subdir-id\n', 
 
104
            'subdir/                                            subdir-id\n',
96
105
            '--show-ids')
97
106
        self.ls_equals(
98
107
            '?        .bzrignore\n'
99
108
            'V        a                                         a-id\n'
100
 
            'V        subdir/                                   subdir-id\n', 
 
109
            'V        subdir/                                   subdir-id\n',
101
110
            '--show-ids --verbose')
102
111
        self.ls_equals('.bzrignore\0\0'
103
112
                       'a\0a-id\0'
104
113
                       'subdir\0subdir-id\0', '--show-ids --null')
105
114
 
106
 
    def test_ls_recursive(self):
 
115
    def test_ls_no_recursive(self):
107
116
        self.build_tree(['subdir/', 'subdir/b'])
108
117
        self.wt.add(['a', 'subdir/', 'subdir/b', '.bzrignore'])
109
118
 
110
119
        self.ls_equals('.bzrignore\n'
111
120
                       'a\n'
112
 
                       'subdir\n'
113
 
                       , '--non-recursive')
 
121
                       'subdir/\n'
 
122
                       , recursive=False)
114
123
 
115
124
        self.ls_equals('V        .bzrignore\n'
116
125
                       'V        a\n'
117
126
                       'V        subdir/\n'
118
 
                       , '--verbose --non-recursive')
 
127
                       , '--verbose', recursive=False)
119
128
 
120
129
        # Check what happens in a sub-directory
121
 
        os.chdir('subdir')
122
 
        self.ls_equals('b\n')
123
 
        self.ls_equals('b\0'
124
 
                  , '--null')
125
 
        self.ls_equals('.bzrignore\n'
126
 
                       'a\n'
127
 
                       'subdir\n'
128
 
                       'subdir/b\n'
129
 
                       , '--from-root')
130
 
        self.ls_equals('.bzrignore\0'
131
 
                       'a\0'
132
 
                       'subdir\0'
133
 
                       'subdir/b\0'
134
 
                       , '--from-root --null')
135
 
        self.ls_equals('.bzrignore\n'
136
 
                       'a\n'
137
 
                       'subdir\n'
138
 
                       , '--from-root --non-recursive')
 
130
        self.ls_equals('b\n', working_dir='subdir')
 
131
        self.ls_equals('b\0', '--null', working_dir='subdir')
 
132
        self.ls_equals('subdir/b\n', '--from-root', working_dir='subdir')
 
133
        self.ls_equals('subdir/b\0', '--from-root --null',
 
134
                       working_dir='subdir')
 
135
        self.ls_equals('subdir/b\n', '--from-root', recursive=False,
 
136
                       working_dir='subdir')
139
137
 
140
138
    def test_ls_path(self):
141
139
        """If a path is specified, files are listed with that prefix"""
143
141
        self.wt.add(['subdir', 'subdir/b'])
144
142
        self.ls_equals('subdir/b\n' ,
145
143
                       'subdir')
146
 
        os.chdir('subdir')
147
144
        self.ls_equals('../.bzrignore\n'
148
145
                       '../a\n'
149
 
                       '../subdir\n'
 
146
                       '../subdir/\n'
150
147
                       '../subdir/b\n' ,
151
 
                       '..')
 
148
                       '..', working_dir='subdir')
152
149
        self.ls_equals('../.bzrignore\0'
153
150
                       '../a\0'
154
151
                       '../subdir\0'
155
152
                       '../subdir/b\0' ,
156
 
                       '.. --null')
 
153
                       '.. --null', working_dir='subdir')
157
154
        self.ls_equals('?        ../.bzrignore\n'
158
155
                       '?        ../a\n'
159
156
                       'V        ../subdir/\n'
160
157
                       'V        ../subdir/b\n' ,
161
 
                       '.. --verbose')
162
 
        self.run_bzr_error('cannot specify both --from-root and PATH',
163
 
                           'ls --from-root ..')
 
158
                       '.. --verbose', working_dir='subdir')
 
159
        self.run_bzr_error(['cannot specify both --from-root and PATH'],
 
160
                           'ls --from-root ..', working_dir='subdir')
164
161
 
165
162
    def test_ls_revision(self):
166
163
        self.wt.add(['a'])
173
170
        self.ls_equals('V        a\n'
174
171
                       , '--verbose --revision 1')
175
172
 
176
 
        os.chdir('subdir')
177
 
        self.ls_equals('', '--revision 1')
 
173
        self.ls_equals('', '--revision 1', working_dir='subdir')
178
174
 
179
175
    def test_ls_branch(self):
180
176
        """If a branch is specified, files are listed from it"""
183
179
        self.wt.commit('committing')
184
180
        branch = self.make_branch('branchdir')
185
181
        branch.pull(self.wt.branch)
186
 
        self.ls_equals('branchdir/subdir\n'
 
182
        self.ls_equals('branchdir/subdir/\n'
187
183
                       'branchdir/subdir/b\n',
188
184
                       'branchdir')
189
 
        self.ls_equals('branchdir/subdir\n'
 
185
        self.ls_equals('branchdir/subdir/\n'
190
186
                       'branchdir/subdir/b\n',
191
187
                       'branchdir --revision 1')
192
188
 
215
211
        self.ls_equals('.bzrignore\n'
216
212
                       'a\n'
217
213
                       , '--versioned')
 
214
        self.ls_equals('.bzrignore\n'
 
215
                       'a\n'
 
216
                       , '-V')
218
217
 
219
218
    def test_kinds(self):
220
219
        self.build_tree(['subdir/'])
221
 
        self.ls_equals('.bzrignore\n' 
222
 
                       'a\n', 
 
220
        self.ls_equals('.bzrignore\n'
 
221
                       'a\n',
223
222
                       '--kind=file')
224
 
        self.ls_equals('subdir\n',
 
223
        self.ls_equals('subdir/\n',
225
224
                       '--kind=directory')
226
225
        self.ls_equals('',
227
226
                       '--kind=symlink')
228
 
        self.run_bzr_error('invalid kind specified', 'ls --kind=pile')
 
227
        self.run_bzr_error(['invalid kind specified'], 'ls --kind=pile')
 
228
 
 
229
    def test_ls_path_nonrecursive(self):
 
230
        self.ls_equals('%s/.bzrignore\n'
 
231
                       '%s/a\n'
 
232
                       % (self.test_dir, self.test_dir),
 
233
                       self.test_dir, recursive=False)
 
234
 
 
235
    def test_ls_directory(self):
 
236
        """Test --directory option"""
 
237
        self.wt = self.make_branch_and_tree('dir')
 
238
        self.build_tree(['dir/sub/', 'dir/sub/file'])
 
239
        self.wt.add(['sub', 'sub/file'])
 
240
        self.wt.commit('commit')
 
241
        self.ls_equals('sub/\nsub/file\n', '--directory=dir')
 
242
        self.ls_equals('sub/file\n', '-d dir sub')
 
243
 
 
244
 
 
245
class TestSmartServerLs(tests.TestCaseWithTransport):
 
246
 
 
247
    def test_simple_ls(self):
 
248
        self.setup_smart_server_with_call_log()
 
249
        t = self.make_branch_and_tree('branch')
 
250
        self.build_tree_contents([('branch/foo', 'thecontents')])
 
251
        t.add("foo")
 
252
        t.commit("message")
 
253
        self.reset_smart_call_log()
 
254
        out, err = self.run_bzr(['ls', self.get_url('branch')])
 
255
        # This figure represent the amount of work to perform this use case. It
 
256
        # is entirely ok to reduce this number if a test fails due to rpc_count
 
257
        # being too low. If rpc_count increases, more network roundtrips have
 
258
        # become necessary for this use case. Please do not adjust this number
 
259
        # upwards without agreement from bzr's network support maintainers.
 
260
        self.assertLength(6, self.hpss_calls)
 
261
        self.assertLength(1, self.hpss_connections)
 
262
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)