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