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