grep.c: teach --column to 'git-grep(1)'
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v3 Latest7 patches 3 repliesIn review
- v27 patches 7 repliesSuperseded
- v17 patches 22 repliesSuperseded
Patches in v3 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/7 | Documentation/config.txt: camel-case lineNumber for consistencyDocumentation/ | +1 | 0 replies | |
| 2/7 | grep.c: expose {,inverted} match column in match_line()grep.c | +39 | 0 replies | |
| 3/7 | grep.[ch]: extend grep_opt to allow showing matched columngrep.c grep.h | +39 | 0 replies | |
| 4/7 | grep.c: display column number of first matchgrep.c | +28 | 0 replies | |
| 5/7 | builtin/grep.c: add '--column' option to 'git-grep(1)'Documentation/ builtin/ t/ | +101 | 0 replies | |
| 6/7 | grep.c: add configuration variables to show matched optionDocumentation/ Documentation/ grep.c | +14 | 0 replies | |
| 7/7 | contrib/git-jump/git-jump: jump to exact locationcontrib/ contrib/ | +11 | 0 replies |
Reviews trailers per patch
None of the 7 patches has a Reviewed-by or Acked-by.
| Patch | Jeff King |
|---|---|
| 1/7 | |
| 2/7 | Co-authored-by |
| 3/7 | |
| 4/7 | |
| 5/7 | |
| 6/7 | |
| 7/7 |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH v3 0/7] grep.c: teach --column to 'git-grep(1)'
Hi,
Attached is my third--anticipate the final--re-roll of my series to teach 'git grep --column'.
Since the last time, only a couple of things have changed at Peff's suggestions in [1]. The changes are summarized here, and an inter-diff is available below:
- Change "%zu" to PRIuMAX (and an appropriate cast into uintmax_t). I plan to send a follow-up patch to convert this back to "%zu" to see how people feel about it, but I wanted to keep that out of the present series in order to not hold things up.
- Don't short-circuit AND when given --column, since an earlier NOT higher in the tree may cause an AND to be converted into an OR via de Morgan's Law, in which case the problem is reduced to the OR case (and should not have been short-circuited in the first place).
- Add a test in t7810 to cover this behavior (i.e., '--not \( -e x
--and -e y \)').
Thanks,
Taylor
[1]: https://public-inbox.org/git/[email protected]/
Taylor Blau (7):
Documentation/config.txt: camel-case lineNumber for consistency grep.c: expose {,inverted} match column in match_line() grep.[ch]: extend grep_opt to allow showing matched column grep.c: display column number of first match builtin/grep.c: add '--column' option to 'git-grep(1)' grep.c: add configuration variables to show matched option contrib/git-jump/git-jump: jump to exact location
Documentation/config.txt | 7 +- Documentation/git-grep.txt | 9 ++- builtin/grep.c | 1 + contrib/git-jump/README | 12 +++- contrib/git-jump/git-jump | 2 +- grep.c | 134 +++++++++++++++++++++++++++++-------- grep.h | 2 + t/t7810-grep.sh | 95 ++++++++++++++++++++++++++ 8 files changed, 228 insertions(+), 34 deletions(-)
Inter-diff (since: v2)
grep.c +11 -5
@@ -1286,11 +1286,17 @@ static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x, char *bol, 0);break ;case GREP_NODE_AND : -if (!match_expr_eval (opt, x->u.binary.left, bol, eol, ctx, col, - icol,0 )) -return 0 ; - h =match_expr_eval (opt, x->u.binary.right, bol, eol, ctx, col, + h =match_expr_eval (opt, x->u.binary.left, bol, eol, ctx, col, icol,0 ); +if (h || opt->columnnum) { +/* +* Don't short-circuit AND when given --column, since a +* NOT earlier in the tree may turn this into an OR. In +* this case, see the below comment. +*/ + h &=match_expr_eval (opt, x->u.binary.right, bol, eol, + ctx, col, icol,0 ); + }break ;case GREP_NODE_OR :if (!(collect_hits || opt->columnnum)) {
@@ -1447,7 +1453,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,*/ if (opt->columnnum && cno) {char buf[32 ]; -xsnprintf (buf,sizeof (buf),"%zu" , cno); +xsnprintf (buf,sizeof (buf),"%" PRIuMAX, (uintmax_t )cno);output_color (opt, buf,strlen (buf), opt->color_columnno);output_sep (opt, sign); }
t/t7810-grep.sh +13 -2
@@ -110,7 +110,7 @@ do test_cmp expected actual ' - test_expect_success "grep -w $L (with --column, extended)" ' + test_expect_success "grep -w $L (with --column, extended OR)" ' { echo ${HC}file:14:foo_mmap bar mmap echo ${HC}file:19:foo_mmap bar mmap baz
@@ -130,7 +130,7 @@ do test_cmp expected actual ' - test_expect_success "grep $L (with --column, --invert, extended)" ' + test_expect_success "grep $L (with --column, --invert, extended OR)" ' { echo ${HC}hello_world:6:HeLLo_world } >expected &&
@@ -139,6 +139,17 @@ do test_cmp expected actual ' + test_expect_success "grep $L (with --column, --invert, extended AND)" ' + { + echo ${HC}hello_world:3:Hello world + echo ${HC}hello_world:3:Hello_world + echo ${HC}hello_world:6:HeLLo_world + } >expected && + git grep --column --invert --not -e _ --and --not -e ll $H -- hello_world \ + >actual && + test_cmp expected actual + ' + test_expect_success "grep $L (with --column, double-negation)" ' { echo ${HC}file:1:foo_mmap bar mmap baz
--
2.18.0