/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.40.11 by Parth Malwankar
added basic test
1
# Copyright (C) 2010 Canonical Ltd
2
#
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.
7
#
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.
12
#
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
import os
18
import re
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
19
import unicodedata as ud
0.40.11 by Parth Malwankar
added basic test
20
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
21
from bzrlib import tests, osutils
0.40.11 by Parth Malwankar
added basic test
22
23
class TestGrep(tests.TestCaseWithTransport):
0.40.25 by Parth Malwankar
added test case for multilevel dir.
24
    def _str_contains(self, base, pattern, flags=re.MULTILINE|re.DOTALL):
0.40.26 by Parth Malwankar
test passing for multiple matches
25
        res = re.findall(pattern, base, flags)
26
        return res != []
0.40.11 by Parth Malwankar
added basic test
27
0.40.26 by Parth Malwankar
test passing for multiple matches
28
    def _mk_file(self, path, line_prefix, total_lines, versioned):
0.40.13 by Parth Malwankar
added tests for -R and -i
29
        text=''
30
        for i in range(total_lines):
31
            text += line_prefix + str(i+1) + "\n"
32
0.40.12 by Parth Malwankar
added test for versioned file
33
        open(path, 'w').write(text)
34
        if versioned:
35
            self.run_bzr(['add', path])
0.40.25 by Parth Malwankar
added test case for multilevel dir.
36
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.12 by Parth Malwankar
added test for versioned file
37
0.41.14 by Parth Malwankar
updated help and added test.
38
    def _update_file(self, path, text, checkin=True):
0.40.34 by Parth Malwankar
added tests for single revision history search
39
        """append text to file 'path' and check it in"""
40
        open(path, 'a').write(text)
0.41.14 by Parth Malwankar
updated help and added test.
41
        if checkin:
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
42
            self.run_bzr(['ci', path, '-m', '"' + path + '"'])
0.40.34 by Parth Malwankar
added tests for single revision history search
43
0.40.37 by Parth Malwankar
grep now accepts rev range
44
    def _mk_unknown_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
45
        self._mk_file(path, line_prefix, total_lines, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
46
47
    def _mk_versioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
48
        self._mk_file(path, line_prefix, total_lines, versioned=True)
0.40.13 by Parth Malwankar
added tests for -R and -i
49
50
    def _mk_dir(self, path, versioned):
51
        os.mkdir(path)
52
        if versioned:
53
            self.run_bzr(['add', path])
0.40.26 by Parth Malwankar
test passing for multiple matches
54
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.13 by Parth Malwankar
added tests for -R and -i
55
0.40.37 by Parth Malwankar
grep now accepts rev range
56
    def _mk_unknown_dir(self, path):
0.40.26 by Parth Malwankar
test passing for multiple matches
57
        self._mk_dir(path, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
58
59
    def _mk_versioned_dir(self, path):
60
        self._mk_dir(path, versioned=True)
61
0.40.37 by Parth Malwankar
grep now accepts rev range
62
    def test_basic_unknown_file(self):
0.41.13 by Parth Malwankar
working tree grep is now working
63
        """Search for pattern in specfic file.
64
65
        If specified file is unknown, grep it anyway."""
0.40.11 by Parth Malwankar
added basic test
66
        wd = 'foobar0'
67
        self.make_branch_and_tree(wd)
68
        os.chdir(wd)
0.40.37 by Parth Malwankar
grep now accepts rev range
69
        self._mk_unknown_file('file0.txt')
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
70
0.40.11 by Parth Malwankar
added basic test
71
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.41.13 by Parth Malwankar
working tree grep is now working
72
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
73
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
74
        out, err = self.run_bzr(['grep', 'line1'])
75
        self.assertFalse(self._str_contains(out, "file0.txt"))
76
0.41.23 by Parth Malwankar
added tests for --include/exclude
77
    def test_ver_basic_file(self):
0.41.17 by Parth Malwankar
added tests.
78
        """(versioned) Search for pattern in specfic file.
79
        """
0.41.14 by Parth Malwankar
updated help and added test.
80
        wd = 'foobar0'
81
        self.make_branch_and_tree(wd)
82
        os.chdir(wd)
83
        self._mk_versioned_file('file0.txt')
84
        out, err = self.run_bzr(['grep', '-r', '1', 'line1', 'file0.txt'])
85
        self.assertTrue(self._str_contains(out, "file0.txt~1:line1"))
86
0.41.17 by Parth Malwankar
added tests.
87
    def test_wtree_basic_file(self):
88
        """(wtree) Search for pattern in specfic file.
89
        """
0.40.12 by Parth Malwankar
added test for versioned file
90
        wd = 'foobar0'
91
        self.make_branch_and_tree(wd)
92
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
93
        self._mk_versioned_file('file0.txt')
0.41.14 by Parth Malwankar
updated help and added test.
94
        self._update_file('file0.txt', 'ABC\n', checkin=False)
95
96
        out, err = self.run_bzr(['grep', 'ABC', 'file0.txt'])
97
        self.assertTrue(self._str_contains(out, "file0.txt:ABC"))
98
99
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'ABC', 'file0.txt'])
100
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.12 by Parth Malwankar
added test for versioned file
101
0.41.23 by Parth Malwankar
added tests for --include/exclude
102
    def test_ver_basic_include(self):
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
103
        """(versioned) Ensure that -I flag is respected.
0.41.22 by Parth Malwankar
added basic --exclude/include tests
104
        """
105
        wd = 'foobar0'
106
        self.make_branch_and_tree(wd)
107
        os.chdir(wd)
108
        self._mk_versioned_file('file0.aa')
109
        self._mk_versioned_file('file0.bb')
110
        self._mk_versioned_file('file0.cc')
111
        out, err = self.run_bzr(['grep', '-r', 'last:1',
112
            '--include', '*.aa', '--include', '*.bb', 'line1'])
113
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
114
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
115
        self.assertFalse(self._str_contains(out, "file0.cc"))
116
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
117
        out, err = self.run_bzr(['grep', '-r', 'last:1',
118
            '-I', '*.aa', '-I', '*.bb', 'line1'])
119
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
120
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
121
        self.assertFalse(self._str_contains(out, "file0.cc"))
122
0.41.22 by Parth Malwankar
added basic --exclude/include tests
123
    def test_wtree_basic_include(self):
124
        """(wtree) Ensure that --include flag is respected.
125
        """
126
        wd = 'foobar0'
127
        self.make_branch_and_tree(wd)
128
        os.chdir(wd)
129
        self._mk_versioned_file('file0.aa')
130
        self._mk_versioned_file('file0.bb')
131
        self._mk_versioned_file('file0.cc')
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
132
0.41.22 by Parth Malwankar
added basic --exclude/include tests
133
        out, err = self.run_bzr(['grep', '--include', '*.aa',
134
            '--include', '*.bb', 'line1'])
135
        self.assertTrue(self._str_contains(out, "file0.aa:line1"))
136
        self.assertTrue(self._str_contains(out, "file0.bb:line1"))
137
        self.assertFalse(self._str_contains(out, "file0.cc"))
138
0.41.23 by Parth Malwankar
added tests for --include/exclude
139
    def test_ver_basic_exclude(self):
0.41.22 by Parth Malwankar
added basic --exclude/include tests
140
        """(versioned) Ensure that --exclude flag is respected.
141
        """
142
        wd = 'foobar0'
143
        self.make_branch_and_tree(wd)
144
        os.chdir(wd)
145
        self._mk_versioned_file('file0.aa')
146
        self._mk_versioned_file('file0.bb')
147
        self._mk_versioned_file('file0.cc')
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
148
0.41.22 by Parth Malwankar
added basic --exclude/include tests
149
        out, err = self.run_bzr(['grep', '-r', 'last:1',
150
            '--exclude', '*.cc', 'line1'])
151
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
152
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
153
        self.assertFalse(self._str_contains(out, "file0.cc"))
154
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
155
        out, err = self.run_bzr(['grep', '-r', 'last:1',
156
            '-X', '*.cc', 'line1'])
157
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
158
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
159
        self.assertFalse(self._str_contains(out, "file0.cc"))
160
0.41.22 by Parth Malwankar
added basic --exclude/include tests
161
    def test_wtree_basic_exclude(self):
162
        """(wtree) Ensure that --exclude flag is respected.
163
        """
164
        wd = 'foobar0'
165
        self.make_branch_and_tree(wd)
166
        os.chdir(wd)
167
        self._mk_versioned_file('file0.aa')
168
        self._mk_versioned_file('file0.bb')
169
        self._mk_versioned_file('file0.cc')
170
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'line1'])
171
        self.assertTrue(self._str_contains(out, "file0.aa:line1"))
172
        self.assertTrue(self._str_contains(out, "file0.bb:line1"))
173
        self.assertFalse(self._str_contains(out, "file0.cc"))
174
0.41.23 by Parth Malwankar
added tests for --include/exclude
175
    def test_ver_multiple_files(self):
0.41.17 by Parth Malwankar
added tests.
176
        """(versioned) Search for pattern in multiple files.
177
        """
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
178
        wd = 'foobar0'
179
        self.make_branch_and_tree(wd)
180
        os.chdir(wd)
181
        self._mk_versioned_file('file0.txt', total_lines=2)
182
        self._mk_versioned_file('file1.txt', total_lines=2)
183
        self._mk_versioned_file('file2.txt', total_lines=2)
184
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line[1-2]'])
185
186
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
187
        self.assertTrue(self._str_contains(out, "file0.txt~.:line2"))
188
        self.assertTrue(self._str_contains(out, "file1.txt~.:line1"))
189
        self.assertTrue(self._str_contains(out, "file1.txt~.:line2"))
190
        self.assertTrue(self._str_contains(out, "file2.txt~.:line1"))
191
        self.assertTrue(self._str_contains(out, "file2.txt~.:line2"))
192
193
    def test_multiple_wtree_files(self):
0.41.17 by Parth Malwankar
added tests.
194
        """(wtree) Search for pattern in multiple files in working tree.
195
        """
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
196
        wd = 'foobar0'
197
        self.make_branch_and_tree(wd)
198
        os.chdir(wd)
199
        self._mk_versioned_file('file0.txt', total_lines=2)
200
        self._mk_versioned_file('file1.txt', total_lines=2)
201
        self._mk_versioned_file('file2.txt', total_lines=2)
202
        self._update_file('file0.txt', 'HELLO\n', checkin=False)
203
        self._update_file('file1.txt', 'HELLO\n', checkin=True)
204
        self._update_file('file2.txt', 'HELLO\n', checkin=False)
205
206
        out, err = self.run_bzr(['grep', 'HELLO',
207
            'file0.txt', 'file1.txt', 'file2.txt'])
208
209
        self.assertTrue(self._str_contains(out, "file0.txt:HELLO"))
210
        self.assertTrue(self._str_contains(out, "file1.txt:HELLO"))
211
        self.assertTrue(self._str_contains(out, "file2.txt:HELLO"))
212
213
        out, err = self.run_bzr(['grep', 'HELLO', '-r', 'last:1',
214
            'file0.txt', 'file1.txt', 'file2.txt'])
215
216
        self.assertFalse(self._str_contains(out, "file0.txt"))
217
        self.assertTrue(self._str_contains(out, "file1.txt~.:HELLO"))
218
        self.assertFalse(self._str_contains(out, "file2.txt"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
219
0.41.23 by Parth Malwankar
added tests for --include/exclude
220
    def test_ver_null_option(self):
0.41.17 by Parth Malwankar
added tests.
221
        """(versioned) --null option should use NUL instead of newline.
222
        """
223
        wd = 'foobar0'
224
        self.make_branch_and_tree(wd)
225
        os.chdir(wd)
226
        self._mk_versioned_file('file0.txt', total_lines=3)
227
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
228
        nref = ud.normalize(u'NFC', u"file0.txt~1:line1\0file0.txt~1:line2\0file0.txt~1:line3\0")
229
0.41.17 by Parth Malwankar
added tests.
230
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--null', 'line[1-3]'])
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
231
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
232
        self.assertTrue(nout == nref)
0.41.17 by Parth Malwankar
added tests.
233
234
        out, err = self.run_bzr(['grep', '-r', 'last:1', '-Z', 'line[1-3]'])
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
235
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
236
        self.assertTrue(nout == nref)
0.41.17 by Parth Malwankar
added tests.
237
238
    def test_wtree_null_option(self):
239
        """(wtree) --null option should use NUL instead of newline.
240
        """
0.40.27 by Parth Malwankar
added test for null option
241
        wd = 'foobar0'
242
        self.make_branch_and_tree(wd)
243
        os.chdir(wd)
244
        self._mk_versioned_file('file0.txt', total_lines=3)
245
246
        out, err = self.run_bzr(['grep', '--null', 'line[1-3]'])
247
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
248
249
        out, err = self.run_bzr(['grep', '-Z', 'line[1-3]'])
250
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
251
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
252
    def test_versioned_file_in_dir_no_recursive(self):
0.41.17 by Parth Malwankar
added tests.
253
        """(versioned) Should not recurse with --no-recursive"""
254
        wd = 'foobar0'
255
        self.make_branch_and_tree(wd)
256
        os.chdir(wd)
257
        self._mk_versioned_dir('dir0')
258
        self._mk_versioned_file('dir0/file0.txt')
259
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
260
        self.assertFalse(self._str_contains(out, "file0.txt~.:line1"))
261
262
    def test_wtree_file_in_dir_no_recursive(self):
263
        """(wtree) Should not recurse with --no-recursive"""
0.40.13 by Parth Malwankar
added tests for -R and -i
264
        wd = 'foobar0'
265
        self.make_branch_and_tree(wd)
266
        os.chdir(wd)
267
        self._mk_versioned_dir('dir0')
268
        self._mk_versioned_file('dir0/file0.txt')
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
269
        out, err = self.run_bzr(['grep', '--no-recursive', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
270
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
271
272
    def test_versioned_file_in_dir_recurse(self):
0.41.17 by Parth Malwankar
added tests.
273
        """(versioned) Should recurse by default.
274
        """
275
        wd = 'foobar0'
276
        self.make_branch_and_tree(wd)
277
        os.chdir(wd)
278
        self._mk_versioned_dir('dir0')
279
        self._mk_versioned_file('dir0/file0.txt')
280
        out, err = self.run_bzr(['grep', '-r', '-1', 'line1'])
281
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~.:line1"))
282
283
    def test_wtree_file_in_dir_recurse(self):
284
        """(wtree) Should recurse by default.
285
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
286
        wd = 'foobar0'
287
        self.make_branch_and_tree(wd)
288
        os.chdir(wd)
289
        self._mk_versioned_dir('dir0')
290
        self._mk_versioned_file('dir0/file0.txt')
0.41.4 by Parth Malwankar
--recurse is default.
291
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
292
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
0.40.23 by Parth Malwankar
added test case for search while inside dir.
293
294
    def test_versioned_file_within_dir(self):
0.41.17 by Parth Malwankar
added tests.
295
        """(versioned) Search for pattern while in nested dir.
296
        """
297
        wd = 'foobar0'
298
        self.make_branch_and_tree(wd)
299
        os.chdir(wd)
300
        self._mk_versioned_dir('dir0')
301
        self._mk_versioned_file('dir0/file0.txt')
302
        os.chdir('dir0')
303
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
304
        self.assertTrue(self._str_contains(out, "^file0.txt~.:line1"))
305
0.41.23 by Parth Malwankar
added tests for --include/exclude
306
    def test_versioned_include_file_within_dir(self):
307
        """(versioned) Ensure --include is respected with file within dir.
308
        """
309
        wd = 'foobar0'
310
        self.make_branch_and_tree(wd)
311
        os.chdir(wd)
312
        self._mk_versioned_dir('dir0')
313
        self._mk_versioned_file('dir0/file0.txt')
314
        self._mk_versioned_file('dir0/file1.aa')
315
        os.chdir('dir0')
316
        out, err = self.run_bzr(['grep', '-r', 'last:1',
317
            '--include', '*.aa', 'line1'])
318
        self.assertTrue(self._str_contains(out, "^file1.aa~.:line1"))
319
        self.assertFalse(self._str_contains(out, "file0.txt"))
320
321
    def test_versioned_exclude_file_within_dir(self):
322
        """(versioned) Ensure --exclude is respected with file within dir.
323
        """
324
        wd = 'foobar0'
325
        self.make_branch_and_tree(wd)
326
        os.chdir(wd)
327
        self._mk_versioned_dir('dir0')
328
        self._mk_versioned_file('dir0/file0.txt')
329
        self._mk_versioned_file('dir0/file1.aa')
330
        os.chdir('dir0')
331
        out, err = self.run_bzr(['grep', '-r', 'last:1',
332
            '--exclude', '*.txt', 'line1'])
333
        self.assertTrue(self._str_contains(out, "^file1.aa~.:line1"))
334
        self.assertFalse(self._str_contains(out, "file0.txt"))
335
0.41.17 by Parth Malwankar
added tests.
336
    def test_wtree_file_within_dir(self):
337
        """(wtree) Search for pattern while in nested dir.
338
        """
0.40.23 by Parth Malwankar
added test case for search while inside dir.
339
        wd = 'foobar0'
340
        self.make_branch_and_tree(wd)
341
        os.chdir(wd)
342
        self._mk_versioned_dir('dir0')
343
        self._mk_versioned_file('dir0/file0.txt')
344
        os.chdir('dir0')
345
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
346
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
347
0.41.23 by Parth Malwankar
added tests for --include/exclude
348
    def test_wtree_include_file_within_dir(self):
349
        """(wtree) Ensure --include is respected with file within dir.
350
        """
351
        wd = 'foobar0'
352
        self.make_branch_and_tree(wd)
353
        os.chdir(wd)
354
        self._mk_versioned_dir('dir0')
355
        self._mk_versioned_file('dir0/file0.txt')
356
        self._mk_versioned_file('dir0/file1.aa')
357
        os.chdir('dir0')
358
        out, err = self.run_bzr(['grep', '--include', '*.aa', 'line1'])
359
        self.assertTrue(self._str_contains(out, "^file1.aa:line1"))
360
        self.assertFalse(self._str_contains(out, "file0.txt"))
361
362
    def test_wtree_exclude_file_within_dir(self):
363
        """(wtree) Ensure --exclude is respected with file within dir.
364
        """
365
        wd = 'foobar0'
366
        self.make_branch_and_tree(wd)
367
        os.chdir(wd)
368
        self._mk_versioned_dir('dir0')
369
        self._mk_versioned_file('dir0/file0.txt')
370
        self._mk_versioned_file('dir0/file1.aa')
371
        os.chdir('dir0')
372
        out, err = self.run_bzr(['grep', '--exclude', '*.txt', 'line1'])
373
        self.assertTrue(self._str_contains(out, "^file1.aa:line1"))
374
        self.assertFalse(self._str_contains(out, "file0.txt"))
375
376
    def test_versioned_include_from_outside_dir(self):
377
        """(versioned) Ensure --include is respected during recursive search.
378
        """
379
        wd = 'foobar0'
380
        self.make_branch_and_tree(wd)
381
        os.chdir(wd)
382
383
        self._mk_versioned_dir('dir0')
384
        self._mk_versioned_file('dir0/file0.aa')
385
386
        self._mk_versioned_dir('dir1')
387
        self._mk_versioned_file('dir1/file1.bb')
388
389
        self._mk_versioned_dir('dir2')
390
        self._mk_versioned_file('dir2/file2.cc')
391
392
        out, err = self.run_bzr(['grep', '-r', 'last:1',
393
            '--include', '*.aa', '--include', '*.bb', 'line1'])
394
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa~.:line1"))
395
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb~.:line1"))
396
        self.assertFalse(self._str_contains(out, "file1.cc"))
397
398
    def test_wtree_include_from_outside_dir(self):
399
        """(wtree) Ensure --include is respected during recursive search.
400
        """
401
        wd = 'foobar0'
402
        self.make_branch_and_tree(wd)
403
        os.chdir(wd)
404
405
        self._mk_versioned_dir('dir0')
406
        self._mk_versioned_file('dir0/file0.aa')
407
408
        self._mk_versioned_dir('dir1')
409
        self._mk_versioned_file('dir1/file1.bb')
410
411
        self._mk_versioned_dir('dir2')
412
        self._mk_versioned_file('dir2/file2.cc')
413
414
        out, err = self.run_bzr(['grep', '--include', '*.aa',
415
            '--include', '*.bb', 'line1'])
416
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa:line1"))
417
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb:line1"))
418
        self.assertFalse(self._str_contains(out, "file1.cc"))
419
420
    def test_versioned_exclude_from_outside_dir(self):
421
        """(versioned) Ensure --exclude is respected during recursive search.
422
        """
423
        wd = 'foobar0'
424
        self.make_branch_and_tree(wd)
425
        os.chdir(wd)
426
427
        self._mk_versioned_dir('dir0')
428
        self._mk_versioned_file('dir0/file0.aa')
429
430
        self._mk_versioned_dir('dir1')
431
        self._mk_versioned_file('dir1/file1.bb')
432
433
        self._mk_versioned_dir('dir2')
434
        self._mk_versioned_file('dir2/file2.cc')
435
436
        out, err = self.run_bzr(['grep', '-r', 'last:1',
437
            '--exclude', '*.cc', 'line1'])
438
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa~.:line1"))
439
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb~.:line1"))
440
        self.assertFalse(self._str_contains(out, "file1.cc"))
441
442
    def test_wtree_exclude_from_outside_dir(self):
443
        """(wtree) Ensure --exclude is respected during recursive search.
444
        """
445
        wd = 'foobar0'
446
        self.make_branch_and_tree(wd)
447
        os.chdir(wd)
448
449
        self._mk_versioned_dir('dir0')
450
        self._mk_versioned_file('dir0/file0.aa')
451
452
        self._mk_versioned_dir('dir1')
453
        self._mk_versioned_file('dir1/file1.bb')
454
455
        self._mk_versioned_dir('dir2')
456
        self._mk_versioned_file('dir2/file2.cc')
457
458
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'line1'])
459
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa:line1"))
460
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb:line1"))
461
        self.assertFalse(self._str_contains(out, "file1.cc"))
462
463
    def test_workingtree_files_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
464
        """(wtree) Grep for pattern with dirs passed as argument.
465
        """
0.40.41 by Parth Malwankar
added test for dir arg provided by user
466
        wd = 'foobar0'
467
        self.make_branch_and_tree(wd)
468
        os.chdir(wd)
469
470
        self._mk_versioned_dir('dir0')
471
        self._mk_versioned_file('dir0/file0.txt')
472
473
        self._mk_versioned_dir('dir1')
474
        self._mk_versioned_file('dir1/file1.txt')
475
476
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
477
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
478
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
479
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
480
    def test_versioned_files_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
481
        """(versioned) Grep for pattern with dirs passed as argument.
482
        """
483
        wd = 'foobar0'
484
        self.make_branch_and_tree(wd)
485
        os.chdir(wd)
486
487
        self._mk_versioned_dir('dir0')
488
        self._mk_versioned_file('dir0/file0.txt')
489
490
        self._mk_versioned_dir('dir1')
491
        self._mk_versioned_file('dir1/file1.txt')
492
493
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1', 'dir0', 'dir1'])
494
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~.:line1"))
495
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt~.:line1"))
496
497
    def test_wtree_files_from_outside_dir(self):
498
        """(wtree) Grep for pattern with dirs passed as argument.
499
        """
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
500
        wd = 'foobar0'
501
        self.make_branch_and_tree(wd)
502
        os.chdir(wd)
503
504
        self._mk_versioned_dir('dir0')
505
        self._mk_versioned_file('dir0/file0.txt')
506
507
        self._mk_versioned_dir('dir1')
508
        self._mk_versioned_file('dir1/file1.txt')
509
510
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
511
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
512
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
513
514
    def test_versioned_files_from_outside_two_dirs(self):
0.41.17 by Parth Malwankar
added tests.
515
        """(versioned) Grep for pattern with two levels of nested dir.
516
        """
517
        wd = 'foobar0'
518
        self.make_branch_and_tree(wd)
519
        os.chdir(wd)
520
521
        self._mk_versioned_dir('dir0')
522
        self._mk_versioned_file('dir0/file0.txt')
523
524
        self._mk_versioned_dir('dir1')
525
        self._mk_versioned_file('dir1/file1.txt')
526
527
        self._mk_versioned_dir('dir0/dir00')
528
        self._mk_versioned_file('dir0/dir00/file0.txt')
529
530
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1', 'dir0/dir00'])
531
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt~.:line1"))
532
533
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
534
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt~.:line1"))
535
536
    def test_wtree_files_from_outside_two_dirs(self):
537
        """(wtree) Grep for pattern with two levels of nested dir.
538
        """
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
539
        wd = 'foobar0'
540
        self.make_branch_and_tree(wd)
541
        os.chdir(wd)
542
543
        self._mk_versioned_dir('dir0')
544
        self._mk_versioned_file('dir0/file0.txt')
545
546
        self._mk_versioned_dir('dir1')
547
        self._mk_versioned_file('dir1/file1.txt')
548
549
        self._mk_versioned_dir('dir0/dir00')
550
        self._mk_versioned_file('dir0/dir00/file0.txt')
551
552
        out, err = self.run_bzr(['grep', 'line1', 'dir0/dir00'])
553
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
554
0.41.4 by Parth Malwankar
--recurse is default.
555
        out, err = self.run_bzr(['grep', 'line1'])
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
556
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
0.40.41 by Parth Malwankar
added test for dir arg provided by user
557
0.40.25 by Parth Malwankar
added test case for multilevel dir.
558
    def test_versioned_file_within_dir_two_levels(self):
0.41.17 by Parth Malwankar
added tests.
559
        """(versioned) Search for pattern while in nested dir (two levels).
560
        """
561
        wd = 'foobar0'
562
        self.make_branch_and_tree(wd)
563
        os.chdir(wd)
564
        self._mk_versioned_dir('dir0')
565
        self._mk_versioned_dir('dir0/dir1')
566
        self._mk_versioned_file('dir0/dir1/file0.txt')
567
        os.chdir('dir0')
568
569
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
570
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt~.:line1"))
571
572
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--from-root', 'line1'])
573
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt~.:line1"))
574
575
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
576
        self.assertFalse(self._str_contains(out, "file0.txt"))
577
578
    def test_wtree_file_within_dir_two_levels(self):
579
        """(wtree) Search for pattern while in nested dir (two levels).
580
        """
0.40.25 by Parth Malwankar
added test case for multilevel dir.
581
        wd = 'foobar0'
582
        self.make_branch_and_tree(wd)
583
        os.chdir(wd)
584
        self._mk_versioned_dir('dir0')
585
        self._mk_versioned_dir('dir0/dir1')
586
        self._mk_versioned_file('dir0/dir1/file0.txt')
587
        os.chdir('dir0')
0.41.4 by Parth Malwankar
--recurse is default.
588
589
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
590
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt:line1"))
0.41.4 by Parth Malwankar
--recurse is default.
591
0.40.25 by Parth Malwankar
added test case for multilevel dir.
592
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
593
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
0.41.4 by Parth Malwankar
--recurse is default.
594
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
595
        out, err = self.run_bzr(['grep', '--no-recursive', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
596
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
597
0.41.17 by Parth Malwankar
added tests.
598
    def test_versioned_ignore_case_no_match(self):
599
        """(versioned) Match fails without --ignore-case.
600
        """
601
        wd = 'foobar0'
602
        self.make_branch_and_tree(wd)
603
        os.chdir(wd)
604
        self._mk_versioned_file('file0.txt')
605
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'LinE1', 'file0.txt'])
606
        self.assertFalse(self._str_contains(out, "file0.txt~.:line1"))
607
608
    def test_wtree_ignore_case_no_match(self):
609
        """(wtree) Match fails without --ignore-case.
610
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
611
        wd = 'foobar0'
612
        self.make_branch_and_tree(wd)
613
        os.chdir(wd)
614
        self._mk_versioned_file('file0.txt')
615
        out, err = self.run_bzr(['grep', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
616
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
617
0.41.17 by Parth Malwankar
added tests.
618
    def test_versioned_ignore_case_match(self):
619
        """(versioned) Match fails without --ignore-case.
620
        """
621
        wd = 'foobar0'
622
        self.make_branch_and_tree(wd)
623
        os.chdir(wd)
624
        self._mk_versioned_file('file0.txt')
625
        out, err = self.run_bzr(['grep', '-r', 'last:1',
626
            '-i', 'LinE1', 'file0.txt'])
627
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
628
        out, err = self.run_bzr(['grep', '-r', 'last:1',
629
            '--ignore-case', 'LinE1', 'file0.txt'])
630
        self.assertTrue(self._str_contains(out, "^file0.txt~.:line1"))
631
632
    def test_wtree_ignore_case_match(self):
633
        """(wtree) Match fails without --ignore-case.
634
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
635
        wd = 'foobar0'
636
        self.make_branch_and_tree(wd)
637
        os.chdir(wd)
638
        self._mk_versioned_file('file0.txt')
639
        out, err = self.run_bzr(['grep', '-i', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
640
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
0.40.24 by Parth Malwankar
added support for --line-number.
641
        out, err = self.run_bzr(['grep', '--ignore-case', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
642
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
643
0.41.17 by Parth Malwankar
added tests.
644
    def test_versioned_from_root_fail(self):
645
        """(versioned) Match should fail without --from-root.
646
        """
647
        wd = 'foobar0'
648
        self.make_branch_and_tree(wd)
649
        os.chdir(wd)
650
        self._mk_versioned_file('file0.txt')
651
        self._mk_versioned_dir('dir0')
652
        os.chdir('dir0')
653
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
654
        self.assertFalse(self._str_contains(out, "file0.txt"))
655
656
    def test_wtree_from_root_fail(self):
657
        """(wtree) Match should fail without --from-root.
658
        """
0.40.14 by Parth Malwankar
added test for --from-root
659
        wd = 'foobar0'
660
        self.make_branch_and_tree(wd)
661
        os.chdir(wd)
662
        self._mk_versioned_file('file0.txt')
663
        self._mk_versioned_dir('dir0')
664
        os.chdir('dir0')
665
        out, err = self.run_bzr(['grep', 'line1'])
0.41.17 by Parth Malwankar
added tests.
666
        self.assertFalse(self._str_contains(out, "file0.txt"))
667
668
    def test_versioned_from_root_pass(self):
669
        """(versioned) Match pass with --from-root.
670
        """
671
        wd = 'foobar0'
672
        self.make_branch_and_tree(wd)
673
        os.chdir(wd)
674
        self._mk_versioned_file('file0.txt')
675
        self._mk_versioned_dir('dir0')
676
        os.chdir('dir0')
677
        out, err = self.run_bzr(['grep', '-r', 'last:1',
678
            '--from-root', 'line1'])
679
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
680
681
    def test_wtree_from_root_pass(self):
682
        """(wtree) Match pass with --from-root.
683
        """
0.40.14 by Parth Malwankar
added test for --from-root
684
        wd = 'foobar0'
685
        self.make_branch_and_tree(wd)
686
        os.chdir(wd)
687
        self._mk_versioned_file('file0.txt')
688
        self._mk_versioned_dir('dir0')
689
        os.chdir('dir0')
690
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.41.17 by Parth Malwankar
added tests.
691
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
692
693
    def test_versioned_with_line_number(self):
694
        """(versioned) Search for pattern with --line-number.
695
        """
696
        wd = 'foobar0'
697
        self.make_branch_and_tree(wd)
698
        os.chdir(wd)
699
        self._mk_versioned_file('file0.txt')
700
701
        out, err = self.run_bzr(['grep', '-r', 'last:1',
702
            '--line-number', 'line3', 'file0.txt'])
703
        self.assertTrue(self._str_contains(out, "file0.txt~.:3:line3"))
704
705
        out, err = self.run_bzr(['grep', '-r', 'last:1',
706
            '-n', 'line1', 'file0.txt'])
707
        self.assertTrue(self._str_contains(out, "file0.txt~.:1:line1"))
708
709
    def test_wtree_with_line_number(self):
710
        """(wtree) Search for pattern with --line-number.
711
        """
0.40.24 by Parth Malwankar
added support for --line-number.
712
        wd = 'foobar0'
713
        self.make_branch_and_tree(wd)
714
        os.chdir(wd)
715
        self._mk_versioned_file('file0.txt')
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
716
0.40.24 by Parth Malwankar
added support for --line-number.
717
        out, err = self.run_bzr(['grep', '--line-number', 'line3', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
718
        self.assertTrue(self._str_contains(out, "file0.txt:3:line3"))
719
0.40.24 by Parth Malwankar
added support for --line-number.
720
        out, err = self.run_bzr(['grep', '-n', 'line1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
721
        self.assertTrue(self._str_contains(out, "file0.txt:1:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
722
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
723
    def test_revno_basic_history_grep_file(self):
0.41.17 by Parth Malwankar
added tests.
724
        """Search for pattern in specific revision number in a file.
725
        """
0.40.34 by Parth Malwankar
added tests for single revision history search
726
        wd = 'foobar0'
727
        fname = 'file0.txt'
728
        self.make_branch_and_tree(wd)
729
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
730
        self._mk_versioned_file(fname, total_lines=0)
0.40.34 by Parth Malwankar
added tests for single revision history search
731
        self._update_file(fname, text="v2 text\n")
732
        self._update_file(fname, text="v3 text\n")
733
        self._update_file(fname, text="v4 text\n")
734
735
        # rev 2 should not have text 'v3'
736
        out, err = self.run_bzr(['grep', '-r', '2', 'v3', fname])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
737
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.34 by Parth Malwankar
added tests for single revision history search
738
739
        # rev 3 should not have text 'v3'
740
        out, err = self.run_bzr(['grep', '-r', '3', 'v3', fname])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
741
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3.*"))
0.40.34 by Parth Malwankar
added tests for single revision history search
742
743
        # rev 3 should not have text 'v3' with line number
744
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3', fname])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
745
        self.assertTrue(self._str_contains(out, "file0.txt~3:2:v3.*"))
0.40.34 by Parth Malwankar
added tests for single revision history search
746
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
747
    def test_revno_basic_history_grep_full(self):
0.41.17 by Parth Malwankar
added tests.
748
        """Search for pattern in specific revision number in a file.
749
        """
0.40.34 by Parth Malwankar
added tests for single revision history search
750
        wd = 'foobar0'
751
        fname = 'file0.txt'
752
        self.make_branch_and_tree(wd)
753
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
754
        self._mk_versioned_file(fname, total_lines=0) # rev1
755
        self._mk_versioned_file('file1.txt')          # rev2
756
        self._update_file(fname, text="v3 text\n")    # rev3
757
        self._update_file(fname, text="v4 text\n")    # rev4
758
        self._update_file(fname, text="v5 text\n")    # rev5
0.40.34 by Parth Malwankar
added tests for single revision history search
759
760
        # rev 2 should not have text 'v3'
761
        out, err = self.run_bzr(['grep', '-r', '2', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
762
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.34 by Parth Malwankar
added tests for single revision history search
763
764
        # rev 3 should not have text 'v3'
765
        out, err = self.run_bzr(['grep', '-r', '3', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
766
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
0.40.34 by Parth Malwankar
added tests for single revision history search
767
768
        # rev 3 should not have text 'v3' with line number
769
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
770
        self.assertTrue(self._str_contains(out, "file0.txt~3:1:v3"))
771
772
    def test_revno_versioned_file_in_dir(self):
0.41.17 by Parth Malwankar
added tests.
773
        """Grep specific version of file withing dir.
774
        """
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
775
        wd = 'foobar0'
776
        self.make_branch_and_tree(wd)
777
        os.chdir(wd)
778
        self._mk_versioned_dir('dir0')                      # rev1
779
        self._mk_versioned_file('dir0/file0.txt')           # rev2
780
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
781
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
782
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
783
784
        # v4 should not be present in revno 3
0.41.4 by Parth Malwankar
--recurse is default.
785
        out, err = self.run_bzr(['grep', '-r', 'last:3', 'v4'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
786
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt"))
787
788
        # v4 should be present in revno 4
0.41.4 by Parth Malwankar
--recurse is default.
789
        out, err = self.run_bzr(['grep', '-r', 'last:2', 'v4'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
790
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v4"))
791
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
792
    def test_revno_range_basic_history_grep(self):
0.41.17 by Parth Malwankar
added tests.
793
        """Search for pattern in revision range for file.
794
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
795
        wd = 'foobar0'
796
        fname = 'file0.txt'
797
        self.make_branch_and_tree(wd)
798
        os.chdir(wd)
799
        self._mk_versioned_file(fname, total_lines=0) # rev1
800
        self._mk_versioned_file('file1.txt')          # rev2
801
        self._update_file(fname, text="v3 text\n")    # rev3
802
        self._update_file(fname, text="v4 text\n")    # rev4
803
        self._update_file(fname, text="v5 text\n")    # rev5
804
        self._update_file(fname, text="v6 text\n")    # rev6
805
806
        out, err = self.run_bzr(['grep', '-r', '1..', 'v3'])
807
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
808
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
809
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
810
811
        out, err = self.run_bzr(['grep', '-r', '1..5', 'v3'])
812
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
813
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
814
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
815
        self.assertFalse(self._str_contains(out, "file0.txt~6:v3"))
816
817
    def test_revno_range_versioned_file_in_dir(self):
0.41.17 by Parth Malwankar
added tests.
818
        """Grep rev-range for pattern for file withing a dir.
819
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
820
        wd = 'foobar0'
821
        self.make_branch_and_tree(wd)
822
        os.chdir(wd)
823
        self._mk_versioned_dir('dir0')                      # rev1
824
        self._mk_versioned_file('dir0/file0.txt')           # rev2
825
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
826
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
827
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
828
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
829
0.41.4 by Parth Malwankar
--recurse is default.
830
        out, err = self.run_bzr(['grep', '-r', '2..5', 'v3'])
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
831
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
832
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
833
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
834
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
835
836
    def test_revno_range_versioned_file_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
837
        """Grep rev-range for pattern from outside dir.
838
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
839
        wd = 'foobar0'
840
        self.make_branch_and_tree(wd)
841
        os.chdir(wd)
842
        self._mk_versioned_dir('dir0')                      # rev1
843
        self._mk_versioned_file('dir0/file0.txt')           # rev2
844
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
845
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
846
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
847
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
848
849
        out, err = self.run_bzr(['grep', '-r', '2..5', 'v3', 'dir0'])
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
850
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
851
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
852
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
853
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
0.40.13 by Parth Malwankar
added tests for -R and -i
854
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
855
    def test_levels(self):
0.41.17 by Parth Malwankar
added tests.
856
        """--levels=0 should show findings from merged revision.
857
        """
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
858
        wd0 = 'foobar0'
859
        wd1 = 'foobar1'
860
861
        self.make_branch_and_tree(wd0)
862
        os.chdir(wd0)
863
        self._mk_versioned_file('file0.txt')
864
        os.chdir('..')
865
866
        out, err = self.run_bzr(['branch', wd0, wd1])
867
        os.chdir(wd1)
868
        self._mk_versioned_file('file1.txt')
869
        os.chdir(osutils.pathjoin('..', wd0))
870
871
        out, err = self.run_bzr(['merge', osutils.pathjoin('..', wd1)])
872
        out, err = self.run_bzr(['ci', '-m', 'merged'])
873
874
        out, err = self.run_bzr(['grep', 'line1'])
875
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
876
        self.assertTrue(self._str_contains(out, "file1.txt:line1"))
877
0.41.17 by Parth Malwankar
added tests.
878
        # levels should be ignored by wtree grep
879
        out, err = self.run_bzr(['grep', '--levels=0', 'line1'])
880
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
881
        self.assertTrue(self._str_contains(out, "file1.txt:line1"))
882
0.40.77 by Parth Malwankar
fixed test case.
883
        out, err = self.run_bzr(['grep', '-r', 'last:1..', '--levels=0', 'line1'])
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
884
        self.assertTrue(self._str_contains(out, "file0.txt~2:line1"))
885
        self.assertTrue(self._str_contains(out, "file1.txt~2:line1"))
886
        self.assertTrue(self._str_contains(out, "file0.txt~1.1.1:line1"))
887
        self.assertTrue(self._str_contains(out, "file1.txt~1.1.1:line1"))
888
0.40.77 by Parth Malwankar
fixed test case.
889
        out, err = self.run_bzr(['grep', '-r',  '-1..', '-n', '--levels=0', 'line1'])
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
890
        self.assertTrue(self._str_contains(out, "file0.txt~2:1:line1"))
891
        self.assertTrue(self._str_contains(out, "file1.txt~2:1:line1"))
892
        self.assertTrue(self._str_contains(out, "file0.txt~1.1.1:1:line1"))
893
        self.assertTrue(self._str_contains(out, "file1.txt~1.1.1:1:line1"))
894
0.41.17 by Parth Malwankar
added tests.
895
    def test_versioned_binary_file_grep(self):
896
        """(versioned) Grep for pattern in binary file.
897
        """
898
        wd = 'foobar0'
899
        self.make_branch_and_tree(wd)
900
        os.chdir(wd)
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
901
        self._mk_versioned_file('file0.bin')
902
        self._update_file('file0.bin', "\x00lineNN\x00\n")
903
904
        # note: set --verbose/-v flag to get the skip message.
905
        out, err = self.run_bzr(['grep', '-v', '-r', 'last:1',
906
            'lineNN', 'file0.bin'])
907
        self.assertFalse(self._str_contains(out, "file0.bin"))
908
        self.assertTrue(self._str_contains(err, "Binary file.*file0.bin.*skipped"))
0.41.17 by Parth Malwankar
added tests.
909
910
    def test_wtree_binary_file_grep(self):
911
        """(wtree) Grep for pattern in binary file.
912
        """
0.40.47 by Parth Malwankar
fixes bug #531336. binary files are now skipped.
913
        wd = 'foobar0'
914
        self.make_branch_and_tree(wd)
915
        os.chdir(wd)
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
916
        self._mk_versioned_file('file0.bin')
917
        self._update_file('file0.bin', "\x00lineNN\x00\n")
918
919
        # note: set --verbose/-v flag to get the skip message.
920
        out, err = self.run_bzr(['grep', '-v', 'lineNN', 'file0.bin'])
921
        self.assertFalse(self._str_contains(out, "file0.bin:line1"))
922
        self.assertTrue(self._str_contains(err, "Binary file.*file0.bin.*skipped"))
923
924
        # binary warning should not be shown without --verbose
925
        out, err = self.run_bzr(['grep', 'lineNN', 'file0.bin'])
926
        self.assertFalse(self._str_contains(out, "file0.bin:line1"))
927
        self.assertFalse(self._str_contains(err, "Binary file"))
0.40.47 by Parth Malwankar
fixes bug #531336. binary files are now skipped.
928