Skip to content

Commit

Permalink
diff.c: associate a flag with each pattern and use it for compiling r…
Browse files Browse the repository at this point in the history
…egex

This is in preparation for allowing extended regular expression patterns.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
drafnel authored and gitster committed Sep 19, 2008
1 parent 45e7ca0 commit a013585
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 12 deletions.
21 changes: 12 additions & 9 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,14 @@ static int parse_lldiff_command(const char *var, const char *ep, const char *val
struct funcname_pattern_entry {
char *name;
char *pattern;
int cflags;
};
static struct funcname_pattern_list {
struct funcname_pattern_list *next;
struct funcname_pattern_entry e;
} *funcname_pattern_list;

static int parse_funcname_pattern(const char *var, const char *ep, const char *value)
static int parse_funcname_pattern(const char *var, const char *ep, const char *value, int cflags)
{
const char *name;
int namelen;
Expand All @@ -123,6 +124,7 @@ static int parse_funcname_pattern(const char *var, const char *ep, const char *v
}
free(pp->e.pattern);
pp->e.pattern = xstrdup(value);
pp->e.cflags = cflags;
return 0;
}

Expand Down Expand Up @@ -185,7 +187,8 @@ int git_diff_basic_config(const char *var, const char *value, void *cb)
if (!strcmp(ep, ".funcname")) {
if (!value)
return config_error_nonbool(var);
return parse_funcname_pattern(var, ep, value);
return parse_funcname_pattern(var, ep, value,
0);
}
}
}
Expand Down Expand Up @@ -1395,16 +1398,16 @@ static const struct funcname_pattern_entry builtin_funcname_pattern[] = {
"new\\|return\\|switch\\|throw\\|while\\)\n"
"^[ ]*\\(\\([ ]*"
"[A-Za-z_][A-Za-z_0-9]*\\)\\{2,\\}"
"[ ]*([^;]*\\)$" },
"[ ]*([^;]*\\)$", 0 },
{ "pascal", "^\\(\\(procedure\\|function\\|constructor\\|"
"destructor\\|interface\\|implementation\\|"
"initialization\\|finalization\\)[ \t]*.*\\)$"
"\\|"
"^\\(.*=[ \t]*\\(class\\|record\\).*\\)$"
},
{ "bibtex", "\\(@[a-zA-Z]\\{1,\\}[ \t]*{\\{0,1\\}[ \t]*[^ \t\"@',\\#}{~%]*\\).*$" },
{ "tex", "^\\(\\\\\\(\\(sub\\)*section\\|chapter\\|part\\)\\*\\{0,1\\}{.*\\)$" },
{ "ruby", "^\\s*\\(\\(class\\|module\\|def\\)\\s.*\\)$" },
"^\\(.*=[ \t]*\\(class\\|record\\).*\\)$",
0 },
{ "bibtex", "\\(@[a-zA-Z]\\{1,\\}[ \t]*{\\{0,1\\}[ \t]*[^ \t\"@',\\#}{~%]*\\).*$", 0 },
{ "tex", "^\\(\\\\\\(\\(sub\\)*section\\|chapter\\|part\\)\\*\\{0,1\\}{.*\\)$", 0 },
{ "ruby", "^\\s*\\(\\(class\\|module\\|def\\)\\s.*\\)$", 0 },
};

static const struct funcname_pattern_entry *diff_funcname_pattern(struct diff_filespec *one)
Expand Down Expand Up @@ -1530,7 +1533,7 @@ static void builtin_diff(const char *name_a,
xecfg.ctxlen = o->context;
xecfg.flags = XDL_EMIT_FUNCNAMES;
if (pe)
xdiff_set_find_func(&xecfg, pe->pattern);
xdiff_set_find_func(&xecfg, pe->pattern, pe->cflags);
if (!diffopts)
;
else if (!prefixcmp(diffopts, "--unified="))
Expand Down
4 changes: 2 additions & 2 deletions xdiff-interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ static long ff_regexp(const char *line, long len,
return result;
}

void xdiff_set_find_func(xdemitconf_t *xecfg, const char *value)
void xdiff_set_find_func(xdemitconf_t *xecfg, const char *value, int cflags)
{
int i;
struct ff_regs *regs;
Expand All @@ -231,7 +231,7 @@ void xdiff_set_find_func(xdemitconf_t *xecfg, const char *value)
expression = buffer = xstrndup(value, ep - value);
else
expression = value;
if (regcomp(&reg->re, expression, 0))
if (regcomp(&reg->re, expression, cflags))
die("Invalid regexp to look for hunk header: %s", expression);
free(buffer);
value = ep + 1;
Expand Down
2 changes: 1 addition & 1 deletion xdiff-interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ int parse_hunk_header(char *line, int len,
int read_mmfile(mmfile_t *ptr, const char *filename);
int buffer_is_binary(const char *ptr, unsigned long size);

extern void xdiff_set_find_func(xdemitconf_t *xecfg, const char *line);
extern void xdiff_set_find_func(xdemitconf_t *xecfg, const char *line, int cflags);

#endif

0 comments on commit a013585

Please sign in to comment.