Skip to content

Commit

Permalink
grep: move context hunk mark handling into show_line()
Browse files Browse the repository at this point in the history
Move last_shown into struct grep_opt, to make it available in
show_line(), and then make the function handle the printing of hunk
marks for context lines in a central place.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
René Scharfe authored and gitster committed Jul 2, 2009
1 parent 8cfe5f1 commit 5dd06d3
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 15 deletions.
26 changes: 11 additions & 15 deletions grep.c
Expand Up @@ -490,6 +490,12 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
{
int rest = eol - bol;

if (opt->pre_context || opt->post_context) {
if (opt->last_shown && lno > opt->last_shown + 1)
fputs("--\n", stdout);
}
opt->last_shown = lno;

if (opt->null_following_name)
sign = '\0';
if (opt->pathname)
Expand Down Expand Up @@ -531,12 +537,12 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name,
char *eol;
} *prev = NULL, *pcl;
unsigned last_hit = 0;
unsigned last_shown = 0;
int binary_match_only = 0;
const char *hunk_mark = "";
unsigned count = 0;
enum grep_context ctx = GREP_CONTEXT_HEAD;

opt->last_shown = 0;

if (buffer_is_binary(buf, size)) {
switch (opt->binary) {
case GREP_BINARY_DEFAULT:
Expand All @@ -552,8 +558,6 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name,

if (opt->pre_context)
prev = xcalloc(opt->pre_context, sizeof(*prev));
if (opt->pre_context || opt->post_context)
hunk_mark = "--\n";

while (left) {
char *eol, ch;
Expand Down Expand Up @@ -607,33 +611,25 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name,
from = lno - opt->pre_context;
else
from = 1;
if (from <= last_shown)
from = last_shown + 1;
if (last_shown && from != last_shown + 1)
fputs(hunk_mark, stdout);
if (from <= opt->last_shown)
from = opt->last_shown + 1;
while (from < lno) {
pcl = &prev[lno-from-1];
show_line(opt, pcl->bol, pcl->eol,
name, from, '-');
from++;
}
last_shown = lno-1;
}
if (last_shown && lno != last_shown + 1)
fputs(hunk_mark, stdout);
if (!opt->count)
show_line(opt, bol, eol, name, lno, ':');
last_shown = last_hit = lno;
last_hit = lno;
}
else if (last_hit &&
lno <= last_hit + opt->post_context) {
/* If the last hit is within the post context,
* we need to show this line.
*/
if (last_shown && lno != last_shown + 1)
fputs(hunk_mark, stdout);
show_line(opt, bol, eol, name, lno, '-');
last_shown = lno;
}
if (opt->pre_context) {
memmove(prev+1, prev,
Expand Down
1 change: 1 addition & 0 deletions grep.h
Expand Up @@ -84,6 +84,7 @@ struct grep_opt {
int regflags;
unsigned pre_context;
unsigned post_context;
unsigned last_shown;
};

extern void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *origin, int no, enum grep_pat_token t);
Expand Down

0 comments on commit 5dd06d3

Please sign in to comment.