~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Jelmer Vernooij
  • Date: 2012-01-24 13:14:06 UTC
  • mto: (6445.4.5 nested-trees-spec)
  • mto: This revision was merged to the branch mainline in revision 6518.
  • Revision ID: jelmer@samba.org-20120124131406-wedftkorbpv37bm0
Import nested tree doc from devnotes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 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
25
23
from bzrlib.transport import memory
26
24
 
27
25
 
31
29
        tree = self.make_branch_and_tree('branch')
32
30
        self.build_tree_contents([('branch/a', 'foo\n')])
33
31
        tree.add('a')
34
 
        os.chdir('branch')
35
32
        # 'bzr cat' without an option should cat the last revision
36
 
        self.run_bzr(['cat', 'a'], retcode=3)
 
33
        self.run_bzr(['cat', 'a'], retcode=3, working_dir='branch')
37
34
 
38
35
        tree.commit(message='1')
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')
 
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])
44
48
 
45
49
        tree.commit(message='2')
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')
 
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])
53
58
 
54
59
        rev_id = tree.branch.last_revision()
55
60
 
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')
 
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])
65
68
        self.run_bzr(['cat', 'a'], retcode=3)
66
 
        self.run_bzr(
67
 
                ['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
68
 
                retcode=3)
 
69
        self.run_bzr(['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
 
70
                     retcode=3)
69
71
 
70
72
    def test_cat_different_id(self):
71
73
        """'cat' works with old and new files"""
100
102
                           'cat b-tree --name-from-revision')
101
103
 
102
104
        # get to the old file automatically
103
 
        out, err = self.run_bzr_subprocess('cat d-rev')
 
105
        out, err = self.run_bzr('cat d-rev')
104
106
        self.assertEqual('bar\n', out)
105
107
        self.assertEqual('', err)
106
108
 
107
109
        out, err = \
108
 
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
 
110
                self.run_bzr('cat a-rev-tree --name-from-revision')
109
111
        self.assertEqual('foo\n', out)
110
112
        self.assertEqual('', err)
111
113
 
112
 
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
 
114
        out, err = self.run_bzr('cat a-rev-tree')
113
115
        self.assertEqual('baz\n', out)
114
116
        self.assertEqual('', err)
115
117
 
116
118
        # the actual file-id for e-rev doesn't exist in the old tree
117
 
        out, err = self.run_bzr_subprocess('cat e-rev -rrevid:first')
 
119
        out, err = self.run_bzr('cat e-rev -rrevid:first')
118
120
        self.assertEqual('qux\n', out)
119
121
        self.assertEqual('', err)
120
122
 
125
127
        wt.commit('Making sure there is a basis_tree available')
126
128
 
127
129
        url = self.get_readonly_url() + '/README'
128
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
130
        out, err = self.run_bzr(['cat', url])
129
131
        self.assertEqual('contents of README\n', out)
130
132
 
131
133
    def test_cat_branch_revspec(self):
134
136
        wt.add('README')
135
137
        wt.commit('Making sure there is a basis_tree available')
136
138
        wt = self.make_branch_and_tree('b')
137
 
        os.chdir('b')
138
139
 
139
 
        out, err = self.run_bzr_subprocess(
140
 
            ['cat', '-r', 'branch:../a', 'README'])
 
140
        out, err = self.run_bzr(['cat', '-r', 'branch:../a', 'README'],
 
141
                                working_dir='b')
141
142
        self.assertEqual('contents of a/README\n', out)
142
143
 
143
144
    def test_cat_filters(self):
148
149
        url = self.get_readonly_url() + '/README'
149
150
 
150
151
        # Test unfiltered output
151
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
152
        out, err = self.run_bzr(['cat', url])
152
153
        self.assertEqual('contents of README\n', out)
153
154
 
154
155
        # Test --filters option is legal but has no impact if no filters
155
 
        out, err = self.run_bzr_subprocess(['cat', '--filters', url])
 
156
        out, err = self.run_bzr(['cat', '--filters', url])
156
157
        self.assertEqual('contents of README\n', out)
157
158
 
158
159
    def test_cat_filters_applied(self):
192
193
        wt.branch.bzrdir.destroy_workingtree()
193
194
 
194
195
        url = self.get_readonly_url() + '/README'
195
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
196
        out, err = self.run_bzr(['cat', url])
196
197
        self.assertEqual('contents of README\n', out)
197
198
 
198
199
    def test_cat_nonexistent_branch(self):
206
207
        wt.add('README')
207
208
        wt.commit('Making sure there is a basis_tree available')
208
209
 
209
 
        out, err = self.run_bzr_subprocess(['cat', '--directory=a', 'README'])
 
210
        out, err = self.run_bzr(['cat', '--directory=a', 'README'])
210
211
        self.assertEqual('contents of a/README\n', out)
211
212
 
212
213
    def test_cat_remote_directory(self):
216
217
        wt.commit('Making sure there is a basis_tree available')
217
218
 
218
219
        url = self.get_readonly_url() + '/a'
219
 
        out, err = self.run_bzr_subprocess(['cat', '-d', url, 'README'])
 
220
        out, err = self.run_bzr(['cat', '-d', url, 'README'])
220
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)