88
88
self._mk_versioned_file('file2.txt', total_lines=2)
89
89
out, err = self.run_bzr(['grep', 'line[1-2]'])
91
self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
92
self.assertTrue(out, self._str_contains(out, "file0.txt:line2"))
93
self.assertTrue(out, self._str_contains(out, "file1.txt:line1"))
94
self.assertTrue(out, self._str_contains(out, "file1.txt:line2"))
95
self.assertTrue(out, self._str_contains(out, "file2.txt:line1"))
96
self.assertTrue(out, self._str_contains(out, "file2.txt:line2"))
91
self.assertTrue(self._str_contains(out, "file0.txt:line1"))
92
self.assertTrue(self._str_contains(out, "file0.txt:line2"))
93
self.assertTrue(self._str_contains(out, "file1.txt:line1"))
94
self.assertTrue(self._str_contains(out, "file1.txt:line2"))
95
self.assertTrue(self._str_contains(out, "file2.txt:line1"))
96
self.assertTrue(self._str_contains(out, "file2.txt:line2"))
98
98
def test_null_option(self):
99
99
"""--null option should use NUL instead of newline"""
151
151
self._mk_versioned_file('dir0/dir1/file0.txt')
153
153
out, err = self.run_bzr(['grep', '-R', 'line1'])
154
self.assertTrue(out, self._str_contains(out, "^dir1/file0.txt:line1"))
154
self.assertTrue(self._str_contains(out, "^dir1/file0.txt:line1"))
155
155
out, err = self.run_bzr(['grep', '--from-root', 'line1'])
156
self.assertTrue(out, self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
156
self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
157
157
out, err = self.run_bzr(['grep', 'line1'])
158
self.assertFalse(out, self._str_contains(out, "file0.txt"))
158
self.assertFalse(self._str_contains(out, "file0.txt"))
160
160
def test_ignore_case_no_match(self):
161
161
"""match fails without --ignore-case"""
205
205
self.make_branch_and_tree(wd)
207
207
self._mk_versioned_file('file0.txt')
208
209
out, err = self.run_bzr(['grep', '--line-number', 'line3', 'file0.txt'])
209
self.assertTrue(out, self._str_contains(out, "file0.txt:3:line1"))
210
self.assertTrue(self._str_contains(out, "file0.txt:3:line3"))
210
212
out, err = self.run_bzr(['grep', '-n', 'line1', 'file0.txt'])
211
self.assertTrue(out, self._str_contains(out, "file0.txt:1:line1"))
213
self.assertTrue(self._str_contains(out, "file0.txt:1:line1"))
213
def test_basic_history_grep_file(self):
215
def test_revno_basic_history_grep_file(self):
214
216
"""search for pattern in specific revision number in a file"""
216
218
fname = 'file0.txt'
217
219
self.make_branch_and_tree(wd)
219
self._mk_versioned_file(fname)
221
self._mk_versioned_file(fname, total_lines=0)
220
222
self._update_file(fname, text="v2 text\n")
221
223
self._update_file(fname, text="v3 text\n")
222
224
self._update_file(fname, text="v4 text\n")
224
226
# rev 2 should not have text 'v3'
225
227
out, err = self.run_bzr(['grep', '-r', '2', 'v3', fname])
226
self.assertFalse(out, self._str_contains(out, "file0.txt"))
228
self.assertFalse(self._str_contains(out, "file0.txt"))
228
230
# rev 3 should not have text 'v3'
229
231
out, err = self.run_bzr(['grep', '-r', '3', 'v3', fname])
230
self.assertTrue(out, self._str_contains(out, "file0.txt~3:v3.*"))
232
self.assertTrue(self._str_contains(out, "file0.txt~3:v3.*"))
232
234
# rev 3 should not have text 'v3' with line number
233
235
out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3', fname])
234
self.assertTrue(out, self._str_contains(out, "file0.txt~3:2:v3.*"))
236
self.assertTrue(self._str_contains(out, "file0.txt~3:2:v3.*"))
236
def test_basic_history_grep_full(self):
238
def test_revno_basic_history_grep_full(self):
237
239
"""search for pattern in specific revision number in a file"""
239
241
fname = 'file0.txt'
240
242
self.make_branch_and_tree(wd)
242
self._mk_versioned_file(fname) # rev1
243
self._mk_versioned_file('file1.txt') # rev2
244
self._update_file(fname, text="v3 text\n") # rev3
245
self._update_file(fname, text="v4 text\n") # rev4
246
self._update_file(fname, text="v5 text\n") # rev5
244
self._mk_versioned_file(fname, total_lines=0) # rev1
245
self._mk_versioned_file('file1.txt') # rev2
246
self._update_file(fname, text="v3 text\n") # rev3
247
self._update_file(fname, text="v4 text\n") # rev4
248
self._update_file(fname, text="v5 text\n") # rev5
248
250
# rev 2 should not have text 'v3'
249
251
out, err = self.run_bzr(['grep', '-r', '2', 'v3'])
250
self.assertFalse(out, self._str_contains(out, "file0.txt"))
252
self.assertFalse(self._str_contains(out, "file0.txt"))
252
254
# rev 3 should not have text 'v3'
253
255
out, err = self.run_bzr(['grep', '-r', '3', 'v3'])
254
self.assertTrue(out, self._str_contains(out, "file0.txt~3:v3.*"))
256
self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
256
258
# rev 3 should not have text 'v3' with line number
257
259
out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3'])
258
self.assertTrue(out, self._str_contains(out, "file0.txt~3:2:v3.*"))
260
self.assertTrue(self._str_contains(out, "file0.txt~3:1:v3"))
262
def test_revno_versioned_file_in_dir(self):
263
"""we create a file 'foobar0/dir0/file0.txt' and grep specific version of content"""
265
self.make_branch_and_tree(wd)
267
self._mk_versioned_dir('dir0') # rev1
268
self._mk_versioned_file('dir0/file0.txt') # rev2
269
self._update_file('dir0/file0.txt', "v3 text\n") # rev3
270
self._update_file('dir0/file0.txt', "v4 text\n") # rev4
271
self._update_file('dir0/file0.txt', "v5 text\n") # rev5
273
# v4 should not be present in revno 3
274
out, err = self.run_bzr(['grep', '-r', 'last:3', '-R', 'v4'])
275
self.assertFalse(self._str_contains(out, "^dir0/file0.txt"))
277
# v4 should be present in revno 4
278
out, err = self.run_bzr(['grep', '-r', 'last:2', '-R', 'v4'])
279
self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v4"))