/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: John Arbash Meinel
  • Date: 2009-06-18 18:18:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4461.
  • Revision ID: john@arbash-meinel.com-20090618181836-biodfkat9a8eyzjz
The new add_inventory_by_delta is returning a CHKInventory when mapping from NULL
Which is completely valid, but 'broke' one of the tests.
So to fix it, changed the test to use CHKInventories on both sides, and add an __eq__
member. The nice thing is that CHKInventory.__eq__ is fairly cheap, since it only
has to check the root keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 Canonical Ltd
 
2
# -*- coding: utf-8 -*-
 
3
#
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; either version 2 of the License, or
 
7
# (at your option) any later version.
 
8
#
 
9
# This program is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
# GNU General Public License for more details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License
 
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
 
17
 
 
18
 
 
19
"""Black-box tests for bzr cat.
 
20
"""
 
21
 
 
22
import os
 
23
import sys
 
24
 
 
25
from bzrlib.tests.blackbox import TestCaseWithTransport
 
26
 
 
27
class TestCat(TestCaseWithTransport):
 
28
 
 
29
    def test_cat(self):
 
30
        tree = self.make_branch_and_tree('branch')
 
31
        self.build_tree_contents([('branch/a', 'foo\n')])
 
32
        tree.add('a')
 
33
        os.chdir('branch')
 
34
        # 'bzr cat' without an option should cat the last revision
 
35
        self.run_bzr(['cat', 'a'], retcode=3)
 
36
 
 
37
        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')
 
43
 
 
44
        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')
 
52
 
 
53
        rev_id = tree.branch.last_revision()
 
54
 
 
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')
 
64
        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)
 
68
 
 
69
    def test_cat_different_id(self):
 
70
        """'cat' works with old and new files"""
 
71
        tree = self.make_branch_and_tree('.')
 
72
        # the files are named after their path in the revision and
 
73
        # current trees later in the test case
 
74
        # a-rev-tree is special because it appears in both the revision
 
75
        # tree and the working tree
 
76
        self.build_tree_contents([('a-rev-tree', 'foo\n'),
 
77
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n'), ('e-rev', 'qux\n')])
 
78
        tree.lock_write()
 
79
        try:
 
80
            tree.add(['a-rev-tree', 'c-rev', 'd-rev', 'e-rev'])
 
81
            tree.commit('add test files', rev_id='first')
 
82
            # remove currently uses self._write_inventory -
 
83
            # work around that for now.
 
84
            tree.flush()
 
85
            tree.remove(['d-rev'])
 
86
            tree.rename_one('a-rev-tree', 'b-tree')
 
87
            tree.rename_one('c-rev', 'a-rev-tree')
 
88
            tree.rename_one('e-rev', 'old-rev')
 
89
            self.build_tree_contents([('e-rev', 'new\n')])
 
90
            tree.add(['e-rev'])
 
91
        finally:
 
92
            # calling bzr as another process require free lock on win32
 
93
            tree.unlock()
 
94
 
 
95
        # 'b-tree' is not present in the old tree.
 
96
        self.run_bzr_error(["^bzr: ERROR: u?'b-tree' "
 
97
                            "is not present in revision .+$"],
 
98
                           'cat b-tree --name-from-revision')
 
99
 
 
100
        # get to the old file automatically
 
101
        out, err = self.run_bzr_subprocess('cat d-rev')
 
102
        self.assertEqual('bar\n', out)
 
103
        self.assertEqual('', err)
 
104
 
 
105
        out, err = \
 
106
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
 
107
        self.assertEqual('foo\n', out)
 
108
        self.assertEqual('', err)
 
109
 
 
110
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
 
111
        self.assertEqual('baz\n', out)
 
112
        self.assertEqual('', err)
 
113
 
 
114
        # the actual file-id for e-rev doesn't exist in the old tree
 
115
        out, err = self.run_bzr_subprocess('cat e-rev -rrevid:first')
 
116
        self.assertEqual('qux\n', out)
 
117
        self.assertEqual('', err)
 
118
 
 
119
    def test_remote_cat(self):
 
120
        wt = self.make_branch_and_tree('.')
 
121
        self.build_tree(['README'])
 
122
        wt.add('README')
 
123
        wt.commit('Making sure there is a basis_tree available')
 
124
 
 
125
        url = self.get_readonly_url() + '/README'
 
126
        out, err = self.run_bzr_subprocess(['cat', url])
 
127
        self.assertEqual('contents of README\n', out)
 
128
 
 
129
    def test_cat_filters(self):
 
130
        wt = self.make_branch_and_tree('.')
 
131
        self.build_tree(['README'])
 
132
        wt.add('README')
 
133
        wt.commit('Making sure there is a basis_tree available')
 
134
        url = self.get_readonly_url() + '/README'
 
135
 
 
136
        # Test unfiltered output
 
137
        out, err = self.run_bzr_subprocess(['cat', url])
 
138
        self.assertEqual('contents of README\n', out)
 
139
 
 
140
        # Test --filters option is legal but has no impact if no filters
 
141
        out, err = self.run_bzr_subprocess(['cat', '--filters', url])
 
142
        self.assertEqual('contents of README\n', out)
 
143
 
 
144
    def test_cat_filters_applied(self):
 
145
        # Test filtering applied to output. This is tricky to do in a
 
146
        # subprocess because we really need to patch in a plugin that
 
147
        # registers the filters. Instead, we patch in a custom
 
148
        # filter_stack and use run_bzr() ...
 
149
        from cStringIO import StringIO
 
150
        from bzrlib.commands import run_bzr
 
151
        from bzrlib.tests.test_filters import _stack_2
 
152
        from bzrlib.trace import mutter
 
153
        from bzrlib.tree import Tree
 
154
        wt = self.make_branch_and_tree('.')
 
155
        self.build_tree_contents([
 
156
            ('README', "junk\nline 1 of README\nline 2 of README\n"),
 
157
            ])
 
158
        wt.add('README')
 
159
        wt.commit('Making sure there is a basis_tree available')
 
160
        url = self.get_readonly_url() + '/README'
 
161
        real_content_filter_stack = Tree._content_filter_stack
 
162
        def _custom_content_filter_stack(tree, path=None, file_id=None):
 
163
            return _stack_2
 
164
        Tree._content_filter_stack = _custom_content_filter_stack
 
165
        try:
 
166
            out, err = self.run_bzr(['cat', url, '--filters'])
 
167
            # The filter stack will remove the first line and swapcase the rest
 
168
            self.assertEqual('LINE 1 OF readme\nLINE 2 OF readme\n', out)
 
169
            self.assertEqual('', err)
 
170
        finally:
 
171
            Tree._content_filter_stack = real_content_filter_stack
 
172
 
 
173
    def test_cat_no_working_tree(self):
 
174
        wt = self.make_branch_and_tree('.')
 
175
        self.build_tree(['README'])
 
176
        wt.add('README')
 
177
        wt.commit('Making sure there is a basis_tree available')
 
178
        wt.branch.bzrdir.destroy_workingtree()
 
179
 
 
180
        url = self.get_readonly_url() + '/README'
 
181
        out, err = self.run_bzr_subprocess(['cat', url])
 
182
        self.assertEqual('contents of README\n', out)
 
183
 
 
184
    def test_cat_nonexistent_branch(self):
 
185
        if sys.platform == "win32":
 
186
            location = "C:/i/do/not/exist"
 
187
        else:
 
188
            location = "/i/do/not/exist"
 
189
        self.run_bzr_error(['^bzr: ERROR: Not a branch'], ['cat', location])