/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2005-2012, 2016 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
16
17
6622.1.29 by Jelmer Vernooij
Fix some more tests.
18
"""Black-box tests for brz cat.
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
19
"""
20
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
21
from ... import tests
22
from ..matchers import ContainsNoVfsCalls
23
from ...transport import memory
4695.3.1 by Vincent Ladeuil
Fix test failures with no C extensions loaded.
24
25
26
class TestCat(tests.TestCaseWithTransport):
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
27
28
    def test_cat(self):
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
29
        tree = self.make_branch_and_tree('branch')
30
        self.build_tree_contents([('branch/a', 'foo\n')])
31
        tree.add('a')
6622.1.29 by Jelmer Vernooij
Fix some more tests.
32
        # 'brz cat' without an option should cat the last revision
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
33
        self.run_bzr(['cat', 'a'], retcode=3, working_dir='branch')
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
34
35
        tree.commit(message='1')
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
36
        self.build_tree_contents([('branch/a', 'baz\n')])
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
37
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
38
        self.assertEqual('foo\n',
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
39
                          self.run_bzr(['cat', 'a'], working_dir='branch')[0])
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
40
5967.10.2 by Martin Pool
Re-add one out-of-process test for cat on Windows
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 
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
45
        self.assertEqual('foo\n',
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
46
                          self.run_bzr_subprocess(['cat', 'a'],
47
                                                  working_dir='branch')[0])
5967.10.2 by Martin Pool
Re-add one out-of-process test for cat on Windows
48
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
49
        tree.commit(message='2')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
50
        self.assertEqual(
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
51
            'baz\n', self.run_bzr(['cat', 'a'], working_dir='branch')[0])
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
52
        self.assertEqual(
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
53
            'foo\n', self.run_bzr(['cat', 'a', '-r', '1'],
54
                                  working_dir='branch')[0])
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
55
        self.assertEqual(
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
56
            'baz\n', self.run_bzr(['cat', 'a', '-r', '-1'],
57
                                  working_dir='branch')[0])
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
58
2738.4.1 by Daniel Watkins
Merged original changes and tweaked cat.
59
        rev_id = tree.branch.last_revision()
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
60
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
61
        self.assertEqual(
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
62
            'baz\n', self.run_bzr(['cat', 'a', '-r', 'revid:%s' % rev_id],
63
                                  working_dir='branch')[0])
64
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
65
        self.assertEqual('foo\n',
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
66
                          self.run_bzr(['cat', 'branch/a',
67
                                        '-r', 'revno:1:branch'])[0])
2738.4.7 by Martin Pool
Fix up calls to run_bzr from test_cat
68
        self.run_bzr(['cat', 'a'], retcode=3)
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
69
        self.run_bzr(['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
70
                     retcode=3)
2664.13.1 by Daniel Watkins
tests.blackbox.test_cat now uses internals where appropriate.
71
2073.2.4 by wang
Fix syntax error in test.
72
    def test_cat_different_id(self):
2073.2.1 by wang
``bzr cat`` can look up contents of removed or renamed files. If the
73
        """'cat' works with old and new files"""
4695.3.2 by Vincent Ladeuil
Simplified and claried as per Robert's review.
74
        self.disable_missing_extensions_warning()
2073.2.4 by wang
Fix syntax error in test.
75
        tree = self.make_branch_and_tree('.')
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
76
        # the files are named after their path in the revision and
77
        # current trees later in the test case
78
        # a-rev-tree is special because it appears in both the revision
79
        # tree and the working tree
80
        self.build_tree_contents([('a-rev-tree', 'foo\n'),
4112.1.1 by Vincent Ladeuil
Fallback to old revision id if the current one doesn't exist in
81
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n'), ('e-rev', 'qux\n')])
6874.2.1 by Jelmer Vernooij
Make Tree.iter_files_bytes() take paths rather than file_ids.
82
        with tree.lock_write():
4112.1.1 by Vincent Ladeuil
Fallback to old revision id if the current one doesn't exist in
83
            tree.add(['a-rev-tree', 'c-rev', 'd-rev', 'e-rev'])
84
            tree.commit('add test files', rev_id='first')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
85
            # remove currently uses self._write_inventory -
2255.7.70 by Robert Collins
Workaround WorkingTree4 not having a native remove() in test_cat.
86
            # work around that for now.
87
            tree.flush()
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
88
            tree.remove(['d-rev'])
89
            tree.rename_one('a-rev-tree', 'b-tree')
90
            tree.rename_one('c-rev', 'a-rev-tree')
4112.1.1 by Vincent Ladeuil
Fallback to old revision id if the current one doesn't exist in
91
            tree.rename_one('e-rev', 'old-rev')
92
            self.build_tree_contents([('e-rev', 'new\n')])
93
            tree.add(['e-rev'])
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
94
2379.6.1 by Alexander Belchenko
blackbox: test_cat_different_id: calling bzr as another process require free lock on win32
95
        # 'b-tree' is not present in the old tree.
6622.1.29 by Jelmer Vernooij
Fix some more tests.
96
        self.run_bzr_error(["^brz: ERROR: u?'b-tree' "
2379.6.1 by Alexander Belchenko
blackbox: test_cat_different_id: calling bzr as another process require free lock on win32
97
                            "is not present in revision .+$"],
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
98
                           'cat b-tree --name-from-revision')
2379.6.1 by Alexander Belchenko
blackbox: test_cat_different_id: calling bzr as another process require free lock on win32
99
100
        # get to the old file automatically
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
101
        out, err = self.run_bzr('cat d-rev')
6874.2.1 by Jelmer Vernooij
Make Tree.iter_files_bytes() take paths rather than file_ids.
102
        self.assertEqual('', err)
2379.6.1 by Alexander Belchenko
blackbox: test_cat_different_id: calling bzr as another process require free lock on win32
103
        self.assertEqual('bar\n', out)
104
2738.4.6 by Daniel Watkins
Rewrapped lines longer than 79 characters.
105
        out, err = \
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
106
                self.run_bzr('cat a-rev-tree --name-from-revision')
2379.6.1 by Alexander Belchenko
blackbox: test_cat_different_id: calling bzr as another process require free lock on win32
107
        self.assertEqual('foo\n', out)
108
        self.assertEqual('', err)
109
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
110
        out, err = self.run_bzr('cat a-rev-tree')
2379.6.1 by Alexander Belchenko
blackbox: test_cat_different_id: calling bzr as another process require free lock on win32
111
        self.assertEqual('baz\n', out)
112
        self.assertEqual('', err)
113
4112.1.1 by Vincent Ladeuil
Fallback to old revision id if the current one doesn't exist in
114
        # the actual file-id for e-rev doesn't exist in the old tree
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
115
        out, err = self.run_bzr('cat e-rev -rrevid:first')
4112.1.1 by Vincent Ladeuil
Fallback to old revision id if the current one doesn't exist in
116
        self.assertEqual('qux\n', out)
117
        self.assertEqual('', err)
118
2158.1.1 by Wouter van Heyst
Fix #73500 mostly by catching a NotLocalUrl exception in cmd_cat.
119
    def test_remote_cat(self):
120
        wt = self.make_branch_and_tree('.')
2158.1.2 by Wouter van Heyst
Actually check if cat returns the right content.
121
        self.build_tree(['README'])
2158.1.1 by Wouter van Heyst
Fix #73500 mostly by catching a NotLocalUrl exception in cmd_cat.
122
        wt.add('README')
123
        wt.commit('Making sure there is a basis_tree available')
124
125
        url = self.get_readonly_url() + '/README'
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
126
        out, err = self.run_bzr(['cat', url])
2158.1.2 by Wouter van Heyst
Actually check if cat returns the right content.
127
        self.assertEqual('contents of README\n', out)
2309.1.1 by James Westby
Allow bzr cat to be used against treeless repositories.
128
4948.4.1 by Andrew Bennetts
Fix ObjectNotLocked error in cmd_cat (and also release locks slightly sooner).
129
    def test_cat_branch_revspec(self):
130
        wt = self.make_branch_and_tree('a')
131
        self.build_tree(['a/README'])
132
        wt.add('README')
133
        wt.commit('Making sure there is a basis_tree available')
134
        wt = self.make_branch_and_tree('b')
135
6423.1.1 by Vincent Ladeuil
Cleanup old blackbox tests and then some. Remove os.chdir() calls, caught a few bugs, make sure we don't leave file handles opened.
136
        out, err = self.run_bzr(['cat', '-r', 'branch:../a', 'README'],
137
                                working_dir='b')
4948.4.1 by Andrew Bennetts
Fix ObjectNotLocked error in cmd_cat (and also release locks slightly sooner).
138
        self.assertEqual('contents of a/README\n', out)
139
3368.2.31 by Ian Clatworthy
add --filters option to cat command
140
    def test_cat_filters(self):
141
        wt = self.make_branch_and_tree('.')
142
        self.build_tree(['README'])
143
        wt.add('README')
144
        wt.commit('Making sure there is a basis_tree available')
145
        url = self.get_readonly_url() + '/README'
3368.2.48 by Ian Clatworthy
apply first round of poolie's review feedback
146
3368.2.31 by Ian Clatworthy
add --filters option to cat command
147
        # Test unfiltered output
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
148
        out, err = self.run_bzr(['cat', url])
3368.2.31 by Ian Clatworthy
add --filters option to cat command
149
        self.assertEqual('contents of README\n', out)
3368.2.48 by Ian Clatworthy
apply first round of poolie's review feedback
150
151
        # Test --filters option is legal but has no impact if no filters
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
152
        out, err = self.run_bzr(['cat', '--filters', url])
3368.2.31 by Ian Clatworthy
add --filters option to cat command
153
        self.assertEqual('contents of README\n', out)
154
3368.2.48 by Ian Clatworthy
apply first round of poolie's review feedback
155
    def test_cat_filters_applied(self):
156
        # Test filtering applied to output. This is tricky to do in a
157
        # subprocess because we really need to patch in a plugin that
158
        # registers the filters. Instead, we patch in a custom
159
        # filter_stack and use run_bzr() ...
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
160
        from ..test_filters import _stack_2
161
        from ...tree import Tree
3368.2.48 by Ian Clatworthy
apply first round of poolie's review feedback
162
        wt = self.make_branch_and_tree('.')
163
        self.build_tree_contents([
164
            ('README', "junk\nline 1 of README\nline 2 of README\n"),
165
            ])
166
        wt.add('README')
167
        wt.commit('Making sure there is a basis_tree available')
168
        url = self.get_readonly_url() + '/README'
169
        real_content_filter_stack = Tree._content_filter_stack
170
        def _custom_content_filter_stack(tree, path=None, file_id=None):
171
            return _stack_2
172
        Tree._content_filter_stack = _custom_content_filter_stack
173
        try:
174
            out, err = self.run_bzr(['cat', url, '--filters'])
175
            # The filter stack will remove the first line and swapcase the rest
176
            self.assertEqual('LINE 1 OF readme\nLINE 2 OF readme\n', out)
177
            self.assertEqual('', err)
178
        finally:
179
            Tree._content_filter_stack = real_content_filter_stack
180
2309.1.1 by James Westby
Allow bzr cat to be used against treeless repositories.
181
    def test_cat_no_working_tree(self):
182
        wt = self.make_branch_and_tree('.')
183
        self.build_tree(['README'])
184
        wt.add('README')
185
        wt.commit('Making sure there is a basis_tree available')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
186
        wt.branch.controldir.destroy_workingtree()
2309.1.1 by James Westby
Allow bzr cat to be used against treeless repositories.
187
188
        url = self.get_readonly_url() + '/README'
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
189
        out, err = self.run_bzr(['cat', url])
2309.1.1 by James Westby
Allow bzr cat to be used against treeless repositories.
190
        self.assertEqual('contents of README\n', out)
2738.4.6 by Daniel Watkins
Rewrapped lines longer than 79 characters.
191
3063.4.2 by John Arbash Meinel
Fix 'nonexistent'
192
    def test_cat_nonexistent_branch(self):
5017.3.45 by Vincent Ladeuil
Move MemoryServer back into bzrlib.transport.memory as it's needed as soon as a MemoryTransport is used. Add a NEWS entry.
193
        self.vfs_transport_factory = memory.MemoryServer
6622.1.29 by Jelmer Vernooij
Fix some more tests.
194
        self.run_bzr_error(['^brz: ERROR: Not a branch'],
4702.2.1 by Vincent Ladeuil
Remove bogus config imports left in previous tweak
195
                           ['cat', self.get_url()])
5171.3.5 by Martin von Gagern
Add blackbox test for cat --directory.
196
197
    def test_cat_directory(self):
198
        wt = self.make_branch_and_tree('a')
199
        self.build_tree(['a/README'])
200
        wt.add('README')
201
        wt.commit('Making sure there is a basis_tree available')
202
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
203
        out, err = self.run_bzr(['cat', '--directory=a', 'README'])
5171.3.5 by Martin von Gagern
Add blackbox test for cat --directory.
204
        self.assertEqual('contents of a/README\n', out)
205
206
    def test_cat_remote_directory(self):
207
        wt = self.make_branch_and_tree('a')
208
        self.build_tree(['a/README'])
209
        wt.add('README')
210
        wt.commit('Making sure there is a basis_tree available')
211
212
        url = self.get_readonly_url() + '/a'
5967.10.1 by Martin Pool
Stop unnecessary use of subprocesses in blackbox.test_cat: about 7x faster on wine
213
        out, err = self.run_bzr(['cat', '-d', url, 'README'])
5171.3.5 by Martin von Gagern
Add blackbox test for cat --directory.
214
        self.assertEqual('contents of a/README\n', out)
6283.1.1 by Jelmer Vernooij
Add hpss call count test for 'bzr cat'.
215
216
217
class TestSmartServerCat(tests.TestCaseWithTransport):
218
219
    def test_simple_branch_cat(self):
220
        self.setup_smart_server_with_call_log()
221
        t = self.make_branch_and_tree('branch')
222
        self.build_tree_contents([('branch/foo', 'thecontents')])
223
        t.add("foo")
224
        t.commit("message")
225
        self.reset_smart_call_log()
226
        out, err = self.run_bzr(['cat', "%s/foo" % self.get_url('branch')])
227
        # This figure represent the amount of work to perform this use case. It
228
        # is entirely ok to reduce this number if a test fails due to rpc_count
229
        # being too low. If rpc_count increases, more network roundtrips have
230
        # become necessary for this use case. Please do not adjust this number
231
        # upwards without agreement from bzr's network support maintainers.
6282.6.11 by Jelmer Vernooij
Adjust some call counts.
232
        self.assertLength(9, self.hpss_calls)
6366.1.1 by Jelmer Vernooij
Add test for cat connection count.
233
        self.assertLength(1, self.hpss_connections)
6282.6.42 by Jelmer Vernooij
merge hpss-get-checkout-format.
234
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)