~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Robert Collins
  • Date: 2009-07-07 04:32:13 UTC
  • mto: This revision was merged to the branch mainline in revision 4524.
  • Revision ID: robertc@robertcollins.net-20090707043213-4hjjhgr40iq7gk2d
More informative assertions in xml serialisation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
18
18
 
19
19
"""Black-box tests for bzr cat.
20
20
"""
21
21
 
22
22
import os
 
23
import sys
23
24
 
24
25
from bzrlib.tests.blackbox import TestCaseWithTransport
25
26
 
26
27
class TestCat(TestCaseWithTransport):
27
28
 
28
29
    def test_cat(self):
29
 
 
30
 
        def bzr(*args, **kwargs):
31
 
            return self.run_bzr_subprocess(*args, **kwargs)[0]
32
 
 
33
 
        os.mkdir('branch')
 
30
        tree = self.make_branch_and_tree('branch')
 
31
        self.build_tree_contents([('branch/a', 'foo\n')])
 
32
        tree.add('a')
34
33
        os.chdir('branch')
35
 
        bzr('init')
36
 
        open('a', 'wb').write('foo\n')
37
 
        bzr('add', 'a')
38
 
 
39
34
        # 'bzr cat' without an option should cat the last revision
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
 
        
 
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
 
56
59
        os.chdir('..')
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
 
        
 
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
 
63
69
    def test_cat_different_id(self):
64
70
        """'cat' works with old and new files"""
65
71
        tree = self.make_branch_and_tree('.')
68
74
        # a-rev-tree is special because it appears in both the revision
69
75
        # tree and the working tree
70
76
        self.build_tree_contents([('a-rev-tree', 'foo\n'),
71
 
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n')])
 
77
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n'), ('e-rev', 'qux\n')])
72
78
        tree.lock_write()
73
79
        try:
74
 
            tree.add(['a-rev-tree', 'c-rev', 'd-rev'])
75
 
            tree.commit('add test files')
76
 
            # remove currently uses self._write_inventory - 
 
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 -
77
83
            # work around that for now.
78
84
            tree.flush()
79
85
            tree.remove(['d-rev'])
80
86
            tree.rename_one('a-rev-tree', 'b-tree')
81
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'])
82
91
        finally:
83
92
            # calling bzr as another process require free lock on win32
84
93
            tree.unlock()
89
98
                           'cat b-tree --name-from-revision')
90
99
 
91
100
        # get to the old file automatically
92
 
        out, err = self.run_bzr('cat d-rev')
 
101
        out, err = self.run_bzr_subprocess('cat d-rev')
93
102
        self.assertEqual('bar\n', out)
94
103
        self.assertEqual('', err)
95
104
 
96
 
        out, err = self.run_bzr('cat a-rev-tree --name-from-revision')
 
105
        out, err = \
 
106
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
97
107
        self.assertEqual('foo\n', out)
98
108
        self.assertEqual('', err)
99
109
 
100
 
        out, err = self.run_bzr('cat a-rev-tree')
 
110
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
101
111
        self.assertEqual('baz\n', out)
102
112
        self.assertEqual('', err)
103
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
 
104
119
    def test_remote_cat(self):
105
120
        wt = self.make_branch_and_tree('.')
106
121
        self.build_tree(['README'])
108
123
        wt.commit('Making sure there is a basis_tree available')
109
124
 
110
125
        url = self.get_readonly_url() + '/README'
111
 
        out, err = self.run_bzr(['cat', url])
112
 
        self.assertEqual('contents of README\n', out)
 
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
113
172
 
114
173
    def test_cat_no_working_tree(self):
115
174
        wt = self.make_branch_and_tree('.')
119
178
        wt.branch.bzrdir.destroy_workingtree()
120
179
 
121
180
        url = self.get_readonly_url() + '/README'
122
 
        out, err = self.run_bzr(['cat', url])
 
181
        out, err = self.run_bzr_subprocess(['cat', url])
123
182
        self.assertEqual('contents of README\n', out)
124
 
        
 
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])