/brz/remove-bazaar

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