~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-10-13 06:08:53 UTC
  • mfrom: (4737.1.1 merge-2.0-into-devel)
  • Revision ID: pqm@pqm.ubuntu.com-20091013060853-erk2aaj80fnkrv25
(andrew) Merge lp:bzr/2.0 into lp:bzr, including fixes for #322807,
        #389413, #402623 and documentation improvements.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2012 Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
 
2
# -*- coding: utf-8 -*-
2
3
#
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
18
19
"""Black-box tests for bzr cat.
19
20
"""
20
21
 
 
22
import os
 
23
import sys
 
24
 
21
25
from bzrlib import tests
22
 
from bzrlib.tests.matchers import ContainsNoVfsCalls
23
 
from bzrlib.transport import memory
24
26
 
25
27
 
26
28
class TestCat(tests.TestCaseWithTransport):
29
31
        tree = self.make_branch_and_tree('branch')
30
32
        self.build_tree_contents([('branch/a', 'foo\n')])
31
33
        tree.add('a')
 
34
        os.chdir('branch')
32
35
        # 'bzr cat' without an option should cat the last revision
33
 
        self.run_bzr(['cat', 'a'], retcode=3, working_dir='branch')
 
36
        self.run_bzr(['cat', 'a'], retcode=3)
34
37
 
35
38
        tree.commit(message='1')
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])
 
39
        self.build_tree_contents([('a', 'baz\n')])
 
40
 
 
41
        # We use run_bzr_subprocess rather than run_bzr here so that we can
 
42
        # test mangling of line-endings on Windows.
 
43
        self.assertEquals(self.run_bzr_subprocess(['cat', 'a'])[0], 'foo\n')
48
44
 
49
45
        tree.commit(message='2')
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])
 
46
        self.assertEquals(self.run_bzr_subprocess(['cat', 'a'])[0], 'baz\n')
 
47
        self.assertEquals(self.run_bzr_subprocess(
 
48
            ['cat', 'a', '-r', '1'])[0],
 
49
            'foo\n')
 
50
        self.assertEquals(self.run_bzr_subprocess(
 
51
            ['cat', 'a', '-r', '-1'])[0],
 
52
            'baz\n')
58
53
 
59
54
        rev_id = tree.branch.last_revision()
60
55
 
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])
 
56
        self.assertEquals(self.run_bzr_subprocess(
 
57
            ['cat', 'a', '-r', 'revid:%s' % rev_id])[0],
 
58
            'baz\n')
 
59
 
 
60
        os.chdir('..')
 
61
 
 
62
        self.assertEquals(self.run_bzr_subprocess(
 
63
            ['cat', 'branch/a', '-r', 'revno:1:branch'])[0],
 
64
            'foo\n')
68
65
        self.run_bzr(['cat', 'a'], retcode=3)
69
 
        self.run_bzr(['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
70
 
                     retcode=3)
 
66
        self.run_bzr(
 
67
                ['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
 
68
                retcode=3)
71
69
 
72
70
    def test_cat_different_id(self):
73
71
        """'cat' works with old and new files"""
102
100
                           'cat b-tree --name-from-revision')
103
101
 
104
102
        # get to the old file automatically
105
 
        out, err = self.run_bzr('cat d-rev')
 
103
        out, err = self.run_bzr_subprocess('cat d-rev')
106
104
        self.assertEqual('bar\n', out)
107
105
        self.assertEqual('', err)
108
106
 
109
107
        out, err = \
110
 
                self.run_bzr('cat a-rev-tree --name-from-revision')
 
108
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
111
109
        self.assertEqual('foo\n', out)
112
110
        self.assertEqual('', err)
113
111
 
114
 
        out, err = self.run_bzr('cat a-rev-tree')
 
112
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
115
113
        self.assertEqual('baz\n', out)
116
114
        self.assertEqual('', err)
117
115
 
118
116
        # the actual file-id for e-rev doesn't exist in the old tree
119
 
        out, err = self.run_bzr('cat e-rev -rrevid:first')
 
117
        out, err = self.run_bzr_subprocess('cat e-rev -rrevid:first')
120
118
        self.assertEqual('qux\n', out)
121
119
        self.assertEqual('', err)
122
120
 
127
125
        wt.commit('Making sure there is a basis_tree available')
128
126
 
129
127
        url = self.get_readonly_url() + '/README'
130
 
        out, err = self.run_bzr(['cat', url])
 
128
        out, err = self.run_bzr_subprocess(['cat', url])
131
129
        self.assertEqual('contents of README\n', out)
132
130
 
133
 
    def test_cat_branch_revspec(self):
134
 
        wt = self.make_branch_and_tree('a')
135
 
        self.build_tree(['a/README'])
136
 
        wt.add('README')
137
 
        wt.commit('Making sure there is a basis_tree available')
138
 
        wt = self.make_branch_and_tree('b')
139
 
 
140
 
        out, err = self.run_bzr(['cat', '-r', 'branch:../a', 'README'],
141
 
                                working_dir='b')
142
 
        self.assertEqual('contents of a/README\n', out)
143
 
 
144
131
    def test_cat_filters(self):
145
132
        wt = self.make_branch_and_tree('.')
146
133
        self.build_tree(['README'])
149
136
        url = self.get_readonly_url() + '/README'
150
137
 
151
138
        # Test unfiltered output
152
 
        out, err = self.run_bzr(['cat', url])
 
139
        out, err = self.run_bzr_subprocess(['cat', url])
153
140
        self.assertEqual('contents of README\n', out)
154
141
 
155
142
        # Test --filters option is legal but has no impact if no filters
156
 
        out, err = self.run_bzr(['cat', '--filters', url])
 
143
        out, err = self.run_bzr_subprocess(['cat', '--filters', url])
157
144
        self.assertEqual('contents of README\n', out)
158
145
 
159
146
    def test_cat_filters_applied(self):
193
180
        wt.branch.bzrdir.destroy_workingtree()
194
181
 
195
182
        url = self.get_readonly_url() + '/README'
196
 
        out, err = self.run_bzr(['cat', url])
 
183
        out, err = self.run_bzr_subprocess(['cat', url])
197
184
        self.assertEqual('contents of README\n', out)
198
185
 
199
186
    def test_cat_nonexistent_branch(self):
200
 
        self.vfs_transport_factory = memory.MemoryServer
 
187
        self.vfs_transport_factory = tests.MemoryServer
201
188
        self.run_bzr_error(['^bzr: ERROR: Not a branch'],
202
189
                           ['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)