diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-06-30 11:55:38 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-06-30 11:55:38 -0700 |
commit | 6f82be05191a4ec2adcbcac65078f87900ea8741 (patch) | |
tree | 26bf74e9fdd311cce2f1d63e3a42af30d30b8edb /t | |
parent | a53deac89eb6c65cd953c730f33b86ac3f72d647 (diff) | |
parent | 0c72cead8435b2865efc884060bd0bd49313cbd5 (diff) | |
download | git-6f82be05191a4ec2adcbcac65078f87900ea8741.tar.gz |
Merge branch 'jn/grep-open'
* jn/grep-open:
t/t7811-grep-open.sh: remove broken/redundant creation of fake "less" script
t/t7811-grep-open.sh: ensure fake "less" is made executable
t/lib-pager.sh: remove unnecessary '^' from 'expr' regular expression
grep -O: allow optional argument specifying the pager (or editor)
grep: Add the option '--open-files-in-pager'
Unify code paths of threaded greps
grep: refactor grep_objects loop into its own function
Conflicts:
t/t7006-pager.sh
Diffstat (limited to 't')
-rw-r--r-- | t/lib-pager.sh | 15 | ||||
-rwxr-xr-x | t/t7006-pager.sh | 16 | ||||
-rwxr-xr-x | t/t7810-grep.sh (renamed from t/t7002-grep.sh) | 0 | ||||
-rwxr-xr-x | t/t7811-grep-open.sh | 153 |
4 files changed, 172 insertions, 12 deletions
diff --git a/t/lib-pager.sh b/t/lib-pager.sh new file mode 100644 index 0000000000..ba03eab14f --- /dev/null +++ b/t/lib-pager.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +test_expect_success 'determine default pager' ' + test_might_fail git config --unset core.pager && + less=$( + unset PAGER GIT_PAGER; + git var GIT_PAGER + ) && + test -n "$less" +' + +if expr "$less" : '[a-z][a-z]*$' >/dev/null +then + test_set_prereq SIMPLEPAGER +fi diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh index 9a83241c94..c2a3c8e2e7 100755 --- a/t/t7006-pager.sh +++ b/t/t7006-pager.sh @@ -3,6 +3,7 @@ test_description='Test automatic use of a pager.' . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-pager.sh cleanup_fail() { echo >&2 cleanup failed @@ -158,21 +159,12 @@ test_expect_success 'color when writing to a file intended for a pager' ' colorful colorful.log ' -test_expect_success 'determine default pager' ' - unset PAGER GIT_PAGER; - test_might_fail git config --unset core.pager || - cleanup_fail && - - less=$(git var GIT_PAGER) && - test -n "$less" -' - -if expr "$less" : '[a-z][a-z]*$' >/dev/null && test_have_prereq TTY +if test_have_prereq SIMPLEPAGER && test_have_prereq TTY then - test_set_prereq SIMPLEPAGER + test_set_prereq SIMPLEPAGERTTY fi -test_expect_success SIMPLEPAGER 'default pager is used by default' ' +test_expect_success SIMPLEPAGERTTY 'default pager is used by default' ' unset PAGER GIT_PAGER; test_might_fail git config --unset core.pager && rm -f default_pager_used || diff --git a/t/t7002-grep.sh b/t/t7810-grep.sh index 8a6322765c..8a6322765c 100755 --- a/t/t7002-grep.sh +++ b/t/t7810-grep.sh diff --git a/t/t7811-grep-open.sh b/t/t7811-grep-open.sh new file mode 100755 index 0000000000..c110441344 --- /dev/null +++ b/t/t7811-grep-open.sh @@ -0,0 +1,153 @@ +#!/bin/sh + +test_description='git grep --open-files-in-pager +' + +. ./test-lib.sh +. "$TEST_DIRECTORY"/lib-pager.sh +unset PAGER GIT_PAGER + +test_expect_success 'setup' ' + test_commit initial grep.h " +enum grep_pat_token { + GREP_PATTERN, + GREP_PATTERN_HEAD, + GREP_PATTERN_BODY, + GREP_AND, + GREP_OPEN_PAREN, + GREP_CLOSE_PAREN, + GREP_NOT, + GREP_OR, +};" && + + test_commit add-user revision.c " + } + if (seen_dashdash) + read_pathspec_from_stdin(revs, &sb, prune); + strbuf_release(&sb); +} + +static void add_grep(struct rev_info *revs, const char *ptn, enum grep_pat_token what) +{ + append_grep_pattern(&revs->grep_filter, ptn, \"command line\", 0, what); +" && + + mkdir subdir && + test_commit subdir subdir/grep.c "enum grep_pat_token" && + + test_commit uninteresting unrelated "hello, world" && + + echo GREP_PATTERN >untracked +' + +test_expect_success SIMPLEPAGER 'git grep -O' ' + cat >$less <<-\EOF && + #!/bin/sh + printf "%s\n" "$@" >pager-args + EOF + chmod +x $less && + cat >expect.less <<-\EOF && + +/*GREP_PATTERN + grep.h + EOF + echo grep.h >expect.notless && + >empty && + + PATH=.:$PATH git grep -O GREP_PATTERN >out && + { + test_cmp expect.less pager-args || + test_cmp expect.notless pager-args + } && + test_cmp empty out +' + +test_expect_success 'git grep -O --cached' ' + test_must_fail git grep --cached -O GREP_PATTERN >out 2>msg && + grep open-files-in-pager msg +' + +test_expect_success 'git grep -O --no-index' ' + rm -f expect.less pager-args out && + cat >expect <<-\EOF && + grep.h + untracked + EOF + >empty && + + ( + GIT_PAGER='\''printf "%s\n" >pager-args'\'' && + export GIT_PAGER && + git grep --no-index -O GREP_PATTERN >out + ) && + test_cmp expect pager-args && + test_cmp empty out +' + +test_expect_success 'setup: fake "less"' ' + cat >less <<-\EOF && + #!/bin/sh + printf "%s\n" "$@" >actual + EOF + chmod +x less +' + +test_expect_success 'git grep -O jumps to line in less' ' + cat >expect <<-\EOF && + +/*GREP_PATTERN + grep.h + EOF + >empty && + + GIT_PAGER=./less git grep -O GREP_PATTERN >out && + test_cmp expect actual && + test_cmp empty out && + + git grep -O./less GREP_PATTERN >out2 && + test_cmp expect actual && + test_cmp empty out2 +' + +test_expect_success 'modified file' ' + rm -f actual && + cat >expect <<-\EOF && + +/*enum grep_pat_token + grep.h + revision.c + subdir/grep.c + unrelated + EOF + >empty && + + echo "enum grep_pat_token" >unrelated && + test_when_finished "git checkout HEAD unrelated" && + GIT_PAGER=./less git grep -F -O "enum grep_pat_token" >out && + test_cmp expect actual && + test_cmp empty out +' + +test_expect_success 'run from subdir' ' + rm -f actual && + echo grep.c >expect && + >empty && + + ( + cd subdir && + export GIT_PAGER && + GIT_PAGER='\''printf "%s\n" >../args'\'' && + git grep -O "enum grep_pat_token" >../out && + git grep -O"pwd >../dir; :" "enum grep_pat_token" >../out2 + ) && + case $(cat dir) in + *subdir) + : good + ;; + *) + false + ;; + esac && + test_cmp expect args && + test_cmp empty out && + test_cmp empty out2 +' + +test_done |