/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_cat.py

  • Committer: Robert Collins
  • Date: 2007-07-15 15:40:37 UTC
  • mto: (2592.3.33 repository)
  • mto: This revision was merged to the branch mainline in revision 2624.
  • Revision ID: robertc@robertcollins.net-20070715154037-3ar8g89decddc9su
Make GraphIndex accept nodes as key, value, references, so that the method
signature is closer to what a simple key->value index delivers. Also
change the behaviour when the reference list count is zero to accept
key, value as nodes, and emit key, value to make it identical in that case
to a simple key->value index. This may not be a good idea, but for now it
seems ok.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
2
2
# -*- coding: utf-8 -*-
3
3
#
4
4
# This program is free software; you can redistribute it and/or modify
13
13
#
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
 
19
19
"""Black-box tests for bzr cat.
21
21
 
22
22
import os
23
23
 
24
 
from bzrlib import tests
25
 
from bzrlib.transport import memory
26
 
 
27
 
 
28
 
class TestCat(tests.TestCaseWithTransport):
 
24
from bzrlib.tests.blackbox import TestCaseWithTransport
 
25
 
 
26
class TestCat(TestCaseWithTransport):
29
27
 
30
28
    def test_cat(self):
31
 
        tree = self.make_branch_and_tree('branch')
32
 
        self.build_tree_contents([('branch/a', 'foo\n')])
33
 
        tree.add('a')
 
29
 
 
30
        def bzr(*args, **kwargs):
 
31
            return self.run_bzr_subprocess(*args, **kwargs)[0]
 
32
 
 
33
        os.mkdir('branch')
34
34
        os.chdir('branch')
 
35
        bzr('init')
 
36
        open('a', 'wb').write('foo\n')
 
37
        bzr('add', 'a')
 
38
 
35
39
        # 'bzr cat' without an option should cat the last revision
36
 
        self.run_bzr(['cat', 'a'], retcode=3)
37
 
 
38
 
        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')
44
 
 
45
 
        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')
53
 
 
54
 
        rev_id = tree.branch.last_revision()
55
 
 
56
 
        self.assertEquals(self.run_bzr_subprocess(
57
 
            ['cat', 'a', '-r', 'revid:%s' % rev_id])[0],
58
 
            'baz\n')
59
 
 
 
40
        bzr('cat', 'a', retcode=3)
 
41
 
 
42
        bzr('commit', '-m', '1')
 
43
        open('a', 'wb').write('baz\n')
 
44
 
 
45
        self.assertEquals(bzr('cat', 'a'), 'foo\n')
 
46
 
 
47
        bzr('commit', '-m', '2')
 
48
        self.assertEquals(bzr('cat', 'a'), 'baz\n')
 
49
        self.assertEquals(bzr('cat', 'a', '-r', '1'), 'foo\n')
 
50
        self.assertEquals(bzr('cat', 'a', '-r', '-1'), 'baz\n')
 
51
 
 
52
        rev_id = bzr('revision-history').strip().split('\n')[-1]
 
53
 
 
54
        self.assertEquals(bzr('cat', 'a', '-r', 'revid:%s' % rev_id), 'baz\n')
 
55
        
60
56
        os.chdir('..')
61
 
 
62
 
        self.assertEquals(self.run_bzr_subprocess(
63
 
            ['cat', 'branch/a', '-r', 'revno:1:branch'])[0],
64
 
            'foo\n')
65
 
        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
 
 
 
57
        
 
58
        self.assertEquals(bzr('cat', 'branch/a', '-r', 'revno:1:branch'),
 
59
                          'foo\n')
 
60
        bzr('cat', 'a', retcode=3)
 
61
        bzr('cat', 'a', '-r', 'revno:1:branch-that-does-not-exist', retcode=3)
 
62
        
70
63
    def test_cat_different_id(self):
71
64
        """'cat' works with old and new files"""
72
 
        self.disable_missing_extensions_warning()
73
65
        tree = self.make_branch_and_tree('.')
74
66
        # the files are named after their path in the revision and
75
67
        # current trees later in the test case
76
68
        # a-rev-tree is special because it appears in both the revision
77
69
        # tree and the working tree
78
70
        self.build_tree_contents([('a-rev-tree', 'foo\n'),
79
 
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n'), ('e-rev', 'qux\n')])
 
71
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n')])
80
72
        tree.lock_write()
81
73
        try:
82
 
            tree.add(['a-rev-tree', 'c-rev', 'd-rev', 'e-rev'])
83
 
            tree.commit('add test files', rev_id='first')
84
 
            # remove currently uses self._write_inventory -
 
74
            tree.add(['a-rev-tree', 'c-rev', 'd-rev'])
 
75
            tree.commit('add test files')
 
76
            # remove currently uses self._write_inventory - 
85
77
            # work around that for now.
86
78
            tree.flush()
87
79
            tree.remove(['d-rev'])
88
80
            tree.rename_one('a-rev-tree', 'b-tree')
89
81
            tree.rename_one('c-rev', 'a-rev-tree')
90
 
            tree.rename_one('e-rev', 'old-rev')
91
 
            self.build_tree_contents([('e-rev', 'new\n')])
92
 
            tree.add(['e-rev'])
93
82
        finally:
94
83
            # calling bzr as another process require free lock on win32
95
84
            tree.unlock()
100
89
                           'cat b-tree --name-from-revision')
101
90
 
102
91
        # get to the old file automatically
103
 
        out, err = self.run_bzr_subprocess('cat d-rev')
 
92
        out, err = self.run_bzr('cat d-rev')
104
93
        self.assertEqual('bar\n', out)
105
94
        self.assertEqual('', err)
106
95
 
107
 
        out, err = \
108
 
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
 
96
        out, err = self.run_bzr('cat a-rev-tree --name-from-revision')
109
97
        self.assertEqual('foo\n', out)
110
98
        self.assertEqual('', err)
111
99
 
112
 
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
 
100
        out, err = self.run_bzr('cat a-rev-tree')
113
101
        self.assertEqual('baz\n', out)
114
102
        self.assertEqual('', err)
115
103
 
116
 
        # 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')
118
 
        self.assertEqual('qux\n', out)
119
 
        self.assertEqual('', err)
120
 
 
121
104
    def test_remote_cat(self):
122
105
        wt = self.make_branch_and_tree('.')
123
106
        self.build_tree(['README'])
125
108
        wt.commit('Making sure there is a basis_tree available')
126
109
 
127
110
        url = self.get_readonly_url() + '/README'
128
 
        out, err = self.run_bzr_subprocess(['cat', url])
129
 
        self.assertEqual('contents of README\n', out)
130
 
 
131
 
    def test_cat_branch_revspec(self):
132
 
        wt = self.make_branch_and_tree('a')
133
 
        self.build_tree(['a/README'])
134
 
        wt.add('README')
135
 
        wt.commit('Making sure there is a basis_tree available')
136
 
        wt = self.make_branch_and_tree('b')
137
 
        os.chdir('b')
138
 
 
139
 
        out, err = self.run_bzr_subprocess(
140
 
            ['cat', '-r', 'branch:../a', 'README'])
141
 
        self.assertEqual('contents of a/README\n', out)
142
 
 
143
 
    def test_cat_filters(self):
144
 
        wt = self.make_branch_and_tree('.')
145
 
        self.build_tree(['README'])
146
 
        wt.add('README')
147
 
        wt.commit('Making sure there is a basis_tree available')
148
 
        url = self.get_readonly_url() + '/README'
149
 
 
150
 
        # Test unfiltered output
151
 
        out, err = self.run_bzr_subprocess(['cat', url])
152
 
        self.assertEqual('contents of README\n', out)
153
 
 
154
 
        # Test --filters option is legal but has no impact if no filters
155
 
        out, err = self.run_bzr_subprocess(['cat', '--filters', url])
156
 
        self.assertEqual('contents of README\n', out)
157
 
 
158
 
    def test_cat_filters_applied(self):
159
 
        # Test filtering applied to output. This is tricky to do in a
160
 
        # subprocess because we really need to patch in a plugin that
161
 
        # registers the filters. Instead, we patch in a custom
162
 
        # filter_stack and use run_bzr() ...
163
 
        from cStringIO import StringIO
164
 
        from bzrlib.commands import run_bzr
165
 
        from bzrlib.tests.test_filters import _stack_2
166
 
        from bzrlib.trace import mutter
167
 
        from bzrlib.tree import Tree
168
 
        wt = self.make_branch_and_tree('.')
169
 
        self.build_tree_contents([
170
 
            ('README', "junk\nline 1 of README\nline 2 of README\n"),
171
 
            ])
172
 
        wt.add('README')
173
 
        wt.commit('Making sure there is a basis_tree available')
174
 
        url = self.get_readonly_url() + '/README'
175
 
        real_content_filter_stack = Tree._content_filter_stack
176
 
        def _custom_content_filter_stack(tree, path=None, file_id=None):
177
 
            return _stack_2
178
 
        Tree._content_filter_stack = _custom_content_filter_stack
179
 
        try:
180
 
            out, err = self.run_bzr(['cat', url, '--filters'])
181
 
            # The filter stack will remove the first line and swapcase the rest
182
 
            self.assertEqual('LINE 1 OF readme\nLINE 2 OF readme\n', out)
183
 
            self.assertEqual('', err)
184
 
        finally:
185
 
            Tree._content_filter_stack = real_content_filter_stack
 
111
        out, err = self.run_bzr(['cat', url])
 
112
        self.assertEqual('contents of README\n', out)
186
113
 
187
114
    def test_cat_no_working_tree(self):
188
115
        wt = self.make_branch_and_tree('.')
192
119
        wt.branch.bzrdir.destroy_workingtree()
193
120
 
194
121
        url = self.get_readonly_url() + '/README'
195
 
        out, err = self.run_bzr_subprocess(['cat', url])
 
122
        out, err = self.run_bzr(['cat', url])
196
123
        self.assertEqual('contents of README\n', out)
197
 
 
198
 
    def test_cat_nonexistent_branch(self):
199
 
        self.vfs_transport_factory = memory.MemoryServer
200
 
        self.run_bzr_error(['^bzr: ERROR: Not a branch'],
201
 
                           ['cat', self.get_url()])
202
 
 
203
 
    def test_cat_directory(self):
204
 
        wt = self.make_branch_and_tree('a')
205
 
        self.build_tree(['a/README'])
206
 
        wt.add('README')
207
 
        wt.commit('Making sure there is a basis_tree available')
208
 
 
209
 
        out, err = self.run_bzr_subprocess(['cat', '--directory=a', 'README'])
210
 
        self.assertEqual('contents of a/README\n', out)
211
 
 
212
 
    def test_cat_remote_directory(self):
213
 
        wt = self.make_branch_and_tree('a')
214
 
        self.build_tree(['a/README'])
215
 
        wt.add('README')
216
 
        wt.commit('Making sure there is a basis_tree available')
217
 
 
218
 
        url = self.get_readonly_url() + '/a'
219
 
        out, err = self.run_bzr_subprocess(['cat', '-d', url, 'README'])
220
 
        self.assertEqual('contents of a/README\n', out)
 
124