sapling/eden/scm/tests/test-fb-hgext-tweakdefaults-grep.t
Xavier Deguillard bf8fbe7d7f grep: make it run with python3
Summary:
The input/output of a subprocess is bytes, let's encode/decode when
writing/reading from it.

Reviewed By: farnz

Differential Revision: D19665636

fbshipit-source-id: 840f6b7a0edbedb7e7de5a65eacab9e1a7f78864
2020-01-31 12:47:04 -08:00

145 lines
4.3 KiB
Perl

#chg-compatible
$ enable tweakdefaults rebase
Set up the repository with some simple files.
This is coupled with the files dictionary in
eden/scm/tests/fake-biggrep-client.py
$ hg init repo
$ cd repo
$ mkdir grepdir
$ cd grepdir
$ echo 'foobarbaz' > grepfile1
$ echo 'foobarboo' > grepfile2
$ mkdir subdir1
$ echo 'foobar_subdir' > subdir1/subfile1
$ mkdir subdir2
$ echo 'foobar_dirsub' > subdir2/subfile2
$ hg add grepfile1
$ hg add grepfile2
$ hg add subdir1/subfile1
$ hg add subdir2/subfile2
$ hg commit -m "Added some files"
$ echo 'foobarbazboo' > untracked1
Make sure grep finds patterns in tracked files, and excludes untracked files
$ hg grep -n foobar
grepfile1:1:foobarbaz
grepfile2:1:foobarboo
subdir1/subfile1:1:foobar_subdir
subdir2/subfile2:1:foobar_dirsub
$ hg grep -n barbaz
grepfile1:1:foobarbaz
$ hg grep -n barbaz .
grepfile1:1:foobarbaz
Test searching in subdirectories, from the repository root
$ hg grep -n foobar subdir1
subdir1/subfile1:1:foobar_subdir
$ hg grep -n foobar sub*
subdir1/subfile1:1:foobar_subdir
subdir2/subfile2:1:foobar_dirsub
Test searching in a sibling subdirectory, using a relative path
$ cd subdir1
$ hg grep -n foobar ../subdir2
../subdir2/subfile2:1:foobar_dirsub
$ hg grep -n foobar
subfile1:1:foobar_subdir
$ hg grep -n foobar .
subfile1:1:foobar_subdir
$ cd ..
Test mercurial file patterns
$ hg grep -n foobar 'glob:*rep*'
grepfile1:1:foobarbaz
grepfile2:1:foobarboo
Test using alternative grep commands
$ hg grep -i FooBarB
grepfile1:foobarbaz
grepfile2:foobarboo
#if osx
$ hg grep FooBarB
[1]
#else
$ hg grep FooBarB
[123]
#endif
$ hg grep --config grep.command='xargs -0 grep -i' FooBarB --traceback
grepfile1:foobarbaz
grepfile2:foobarboo
$ hg grep --config grep.command='xargs -0 echo searching' FooBarB subdir1
searching * -- subdir1/subfile1 (glob)
$ hg grep --config grep.command='xargs -0 echo foo ; false' FooBarB subdir2
foo ; false * -- subdir2/subfile2 (glob)
Test --include flag
$ hg grep --include '**/*file1' -n foobar
grepfile1:1:foobarbaz
subdir1/subfile1:1:foobar_subdir
$ hg grep -I '**/*file1' -n foobar
grepfile1:1:foobarbaz
subdir1/subfile1:1:foobar_subdir
Test --exclude flag
$ hg grep --exclude '**/*file1' -n foobar
grepfile2:1:foobarboo
subdir2/subfile2:1:foobar_dirsub
$ hg grep -X '**/*file1' -n foobar
grepfile2:1:foobarboo
subdir2/subfile2:1:foobar_dirsub
Test --include and --exclude flags together
$ hg grep --include '**/*file1' --exclude '**/grepfile1' -n foobar
subdir1/subfile1:1:foobar_subdir
$ hg grep -I '**/*file1' -X '**/grepfile1' -n foobar
subdir1/subfile1:1:foobar_subdir
#if symlink no-osx
Test symlinks
$ echo file_content > target_file
$ ln -s target_file sym_link
$ hg add sym_link
$ hg grep file_content
[123]
#endif
Test with context
$ hg grep --config grep.biggrepclient=$TESTDIR/fake-biggrep-client.py \
> --config grep.usebiggrep=True --config grep.biggrepcorpus=fake \
> --color=off \
> -n foobar | sort
grepfile1:1:foobarbaz_bg
grepfile2:1:foobarboo_bg
subdir1/subfile1:1:foobar_subdir_bg
subdir2/subfile2:1:foobar_dirsub_bg
Test basic biggrep client in subdir1
$ hg grep --config grep.biggrepclient=$TESTDIR/fake-biggrep-client.py \
> --config grep.usebiggrep=True --config grep.biggrepcorpus=fake \
> --cwd subdir1 foobar | sort
subfile1:foobar_subdir_bg
Test basic biggrep client with subdir2 matcher
$ hg grep --config grep.biggrepclient=$TESTDIR/fake-biggrep-client.py \
> --config grep.usebiggrep=True --config grep.biggrepcorpus=fake \
> foobar subdir2 | sort
subdir2/subfile2:foobar_dirsub_bg
Test biggrep searching in a sibling subdirectory, using a relative path
$ cd subdir1
$ hg grep --config grep.biggrepclient=$TESTDIR/fake-biggrep-client.py \
> --config grep.usebiggrep=True --config grep.biggrepcorpus=fake \
> foobar ../subdir2 -n | sort
../subdir2/subfile2:1:foobar_dirsub_bg
$ hg grep --config grep.biggrepclient=$TESTDIR/fake-biggrep-client.py \
> --config grep.usebiggrep=True --config grep.biggrepcorpus=fake \
> -n foobar | sort
subfile1:1:foobar_subdir_bg
$ hg grep --config grep.biggrepclient=$TESTDIR/fake-biggrep-client.py \
> --config grep.usebiggrep=True --config grep.biggrepcorpus=fake \
> -n foobar . | sort
subfile1:1:foobar_subdir_bg
$ cd ..