~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Vincent Ladeuil
  • Date: 2012-03-13 16:42:20 UTC
  • mto: This revision was merged to the branch mainline in revision 6512.
  • Revision ID: v.ladeuil+lp@free.fr-20120313164220-atkou2zprhlspmwg
Mention that a given config option cannot be safely handled via both APIs at the same time.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
2
 
# -*- coding: utf-8 -*-
 
1
# Copyright (C) 2005-2012 Canonical Ltd
3
2
#
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
19
18
"""Black-box tests for bzr cat.
20
19
"""
21
20
 
22
 
import os
23
 
 
24
21
from bzrlib import tests
 
22
from bzrlib.tests.matchers import ContainsNoVfsCalls
 
23
from bzrlib.transport import memory
25
24
 
26
25
 
27
26
class TestCat(tests.TestCaseWithTransport):
30
29
        tree = self.make_branch_and_tree('branch')
31
30
        self.build_tree_contents([('branch/a', 'foo\n')])
32
31
        tree.add('a')
33
 
        os.chdir('branch')
34
32
        # 'bzr cat' without an option should cat the last revision
35
 
        self.run_bzr(['cat', 'a'], retcode=3)
 
33
        self.run_bzr(['cat', 'a'], retcode=3, working_dir='branch')
36
34
 
37
35
        tree.commit(message='1')
38
 
        self.build_tree_contents([('a', 'baz\n')])
39
 
 
40
 
        # We use run_bzr_subprocess rather than run_bzr here so that we can
41
 
        # test mangling of line-endings on Windows.
42
 
        self.assertEquals(self.run_bzr_subprocess(['cat', 'a'])[0], 'foo\n')
 
36
        self.build_tree_contents([('branch/a', 'baz\n')])
 
37
 
 
38
        self.assertEquals('foo\n',
 
39
                          self.run_bzr(['cat', 'a'], working_dir='branch')[0])
 
40
 
 
41
        # On Windows, we used to have a bug where newlines got changed into
 
42
        # crlf, whereas cat ought to write out the file exactly as it's
 
43
        # recorded (by default.)  That problem can't be reproduced in-process,
 
44
        # so we need just one test here that 
 
45
        self.assertEquals('foo\n',
 
46
                          self.run_bzr_subprocess(['cat', 'a'],
 
47
                                                  working_dir='branch')[0])
43
48
 
44
49
        tree.commit(message='2')
45
 
        self.assertEquals(self.run_bzr_subprocess(['cat', 'a'])[0], 'baz\n')
46
 
        self.assertEquals(self.run_bzr_subprocess(
47
 
            ['cat', 'a', '-r', '1'])[0],
48
 
            'foo\n')
49
 
        self.assertEquals(self.run_bzr_subprocess(
50
 
            ['cat', 'a', '-r', '-1'])[0],
51
 
            'baz\n')
 
50
        self.assertEquals(
 
51
            'baz\n', self.run_bzr(['cat', 'a'], working_dir='branch')[0])
 
52
        self.assertEquals(
 
53
            'foo\n', self.run_bzr(['cat', 'a', '-r', '1'],
 
54
                                  working_dir='branch')[0])
 
55
        self.assertEquals(
 
56
            'baz\n', self.run_bzr(['cat', 'a', '-r', '-1'],
 
57
                                  working_dir='branch')[0])
52
58
 
53
59
        rev_id = tree.branch.last_revision()
54
60
 
55
 
        self.assertEquals(self.run_bzr_subprocess(
56
 
            ['cat', 'a', '-r', 'revid:%s' % rev_id])[0],
57
 
            'baz\n')
58
 
 
59
 
        os.chdir('..')
60
 
 
61
 
        self.assertEquals(self.run_bzr_subprocess(
62
 
            ['cat', 'branch/a', '-r', 'revno:1:branch'])[0],
63
 
            'foo\n')
 
61
        self.assertEquals(
 
62
            'baz\n', self.run_bzr(['cat', 'a', '-r', 'revid:%s' % rev_id],
 
63
                                  working_dir='branch')[0])
 
64
 
 
65
        self.assertEquals('foo\n',
 
66
                          self.run_bzr(['cat', 'branch/a',
 
67
                                        '-r', 'revno:1:branch'])[0])
64
68
        self.run_bzr(['cat', 'a'], retcode=3)
65
 
        self.run_bzr(
66
 
                ['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
67
 
                retcode=3)
 
69
        self.run_bzr(['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
 
70
                     retcode=3)
68
71
 
69
72
    def test_cat_different_id(self):
70
73
        """'cat' works with old and new files"""
99
102
                           'cat b-tree --name-from-revision')
100
103
 
101
104
        # get to the old file automatically
102
 
        out, err = self.run_bzr_subprocess('cat d-rev')
 
105
        out, err = self.run_bzr('cat d-rev')
103
106
        self.assertEqual('bar\n', out)
104
107
        self.assertEqual('', err)
105
108
 
106
109
        out, err = \
107
 
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
 
110
                self.run_bzr('cat a-rev-tree --name-from-revision')
108
111
        self.assertEqual('foo\n', out)
109
112
        self.assertEqual('', err)
110
113
 
111
 
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
 
114
        out, err = self.run_bzr('cat a-rev-tree')
112
115
        self.assertEqual('baz\n', out)
113
116
        self.assertEqual('', err)
114
117
 
115
118
        # the actual file-id for e-rev doesn't exist in the old tree
116
 
        out, err = self.run_bzr_subprocess('cat e-rev -rrevid:first')
 
119
        out, err = self.run_bzr('cat e-rev -rrevid:first')
117
120
        self.assertEqual('qux\n', out)
118
121
        self.assertEqual('', err)
119
122
 
124
127
        wt.commit('Making sure there is a basis_tree available')
125
128
 
126
129
        url = self.get_readonly_url() + '/README'
127
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
130
        out, err = self.run_bzr(['cat', url])
128
131
        self.assertEqual('contents of README\n', out)
129
132
 
130
133
    def test_cat_branch_revspec(self):
133
136
        wt.add('README')
134
137
        wt.commit('Making sure there is a basis_tree available')
135
138
        wt = self.make_branch_and_tree('b')
136
 
        os.chdir('b')
137
139
 
138
 
        out, err = self.run_bzr_subprocess(
139
 
            ['cat', '-r', 'branch:../a', 'README'])
 
140
        out, err = self.run_bzr(['cat', '-r', 'branch:../a', 'README'],
 
141
                                working_dir='b')
140
142
        self.assertEqual('contents of a/README\n', out)
141
143
 
142
144
    def test_cat_filters(self):
147
149
        url = self.get_readonly_url() + '/README'
148
150
 
149
151
        # Test unfiltered output
150
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
152
        out, err = self.run_bzr(['cat', url])
151
153
        self.assertEqual('contents of README\n', out)
152
154
 
153
155
        # Test --filters option is legal but has no impact if no filters
154
 
        out, err = self.run_bzr_subprocess(['cat', '--filters', url])
 
156
        out, err = self.run_bzr(['cat', '--filters', url])
155
157
        self.assertEqual('contents of README\n', out)
156
158
 
157
159
    def test_cat_filters_applied(self):
191
193
        wt.branch.bzrdir.destroy_workingtree()
192
194
 
193
195
        url = self.get_readonly_url() + '/README'
194
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
196
        out, err = self.run_bzr(['cat', url])
195
197
        self.assertEqual('contents of README\n', out)
196
198
 
197
199
    def test_cat_nonexistent_branch(self):
198
 
        self.vfs_transport_factory = tests.MemoryServer
 
200
        self.vfs_transport_factory = memory.MemoryServer
199
201
        self.run_bzr_error(['^bzr: ERROR: Not a branch'],
200
202
                           ['cat', self.get_url()])
 
203
 
 
204
    def test_cat_directory(self):
 
205
        wt = self.make_branch_and_tree('a')
 
206
        self.build_tree(['a/README'])
 
207
        wt.add('README')
 
208
        wt.commit('Making sure there is a basis_tree available')
 
209
 
 
210
        out, err = self.run_bzr(['cat', '--directory=a', 'README'])
 
211
        self.assertEqual('contents of a/README\n', out)
 
212
 
 
213
    def test_cat_remote_directory(self):
 
214
        wt = self.make_branch_and_tree('a')
 
215
        self.build_tree(['a/README'])
 
216
        wt.add('README')
 
217
        wt.commit('Making sure there is a basis_tree available')
 
218
 
 
219
        url = self.get_readonly_url() + '/a'
 
220
        out, err = self.run_bzr(['cat', '-d', url, 'README'])
 
221
        self.assertEqual('contents of a/README\n', out)
 
222
 
 
223
 
 
224
class TestSmartServerCat(tests.TestCaseWithTransport):
 
225
 
 
226
    def test_simple_branch_cat(self):
 
227
        self.setup_smart_server_with_call_log()
 
228
        t = self.make_branch_and_tree('branch')
 
229
        self.build_tree_contents([('branch/foo', 'thecontents')])
 
230
        t.add("foo")
 
231
        t.commit("message")
 
232
        self.reset_smart_call_log()
 
233
        out, err = self.run_bzr(['cat', "%s/foo" % self.get_url('branch')])
 
234
        # This figure represent the amount of work to perform this use case. It
 
235
        # is entirely ok to reduce this number if a test fails due to rpc_count
 
236
        # being too low. If rpc_count increases, more network roundtrips have
 
237
        # become necessary for this use case. Please do not adjust this number
 
238
        # upwards without agreement from bzr's network support maintainers.
 
239
        self.assertLength(9, self.hpss_calls)
 
240
        self.assertLength(1, self.hpss_connections)
 
241
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)