Jeff King <peff@xxxxxxxx> writes: > On Fri, Feb 08, 2013 at 04:47:01PM -0800, Junio C Hamano wrote: > >> > Yeah, that actually is a good point. We should be using logmsg_reencode >> > so that we look for strings in the user's encoding. >> >> Perhaps like this. Just like the previous one (which should be >> discarded), this makes the function always use the temporary strbuf, >> so doing this upfront actually loses more code than it adds ;-) > > I didn't see this in What's Cooking or pu. We should probably pick an > approach and go with it. > > I think using logmsg_reencode makes sense. I'd be in favor of avoiding > the extra copy in the common case, so something like the patch below. If > you feel strongly about the code cleanup at the minor run-time expense, > I won't argue too much, though. Sounds good to me. Care to do the log message while at it? > --- > diff --git a/revision.c b/revision.c > index d7562ee..a08d0a5 100644 > --- a/revision.c > +++ b/revision.c > @@ -2268,7 +2268,10 @@ static int commit_match(struct commit *commit, struct rev_info *opt) > static int commit_match(struct commit *commit, struct rev_info *opt) > { > int retval; > + const char *encoding; > + const char *message; > struct strbuf buf = STRBUF_INIT; > + > if (!opt->grep_filter.pattern_list && !opt->grep_filter.header_list) > return 1; > > @@ -2279,13 +2282,23 @@ static int commit_match(struct commit *commit, struct rev_info *opt) > strbuf_addch(&buf, '\n'); > } > > + /* > + * We grep in the user's output encoding, under the assumption that it > + * is the encoding they are most likely to write their grep pattern > + * for. In addition, it means we will match the "notes" encoding below, > + * so we will not end up with a buffer that has two different encodings > + * in it. > + */ > + encoding = get_log_output_encoding(); > + message = logmsg_reencode(commit, encoding); > + > /* Copy the commit to temporary if we are using "fake" headers */ > if (buf.len) > - strbuf_addstr(&buf, commit->buffer); > + strbuf_addstr(&buf, message); > > if (opt->grep_filter.header_list && opt->mailmap) { > if (!buf.len) > - strbuf_addstr(&buf, commit->buffer); > + strbuf_addstr(&buf, message); > > commit_rewrite_person(&buf, "\nauthor ", opt->mailmap); > commit_rewrite_person(&buf, "\ncommitter ", opt->mailmap); > @@ -2294,18 +2307,18 @@ static int commit_match(struct commit *commit, struct rev_info *opt) > /* Append "fake" message parts as needed */ > if (opt->show_notes) { > if (!buf.len) > - strbuf_addstr(&buf, commit->buffer); > - format_display_notes(commit->object.sha1, &buf, > - get_log_output_encoding(), 1); > + strbuf_addstr(&buf, message); > + format_display_notes(commit->object.sha1, &buf, encoding, 1); > } > > - /* Find either in the commit object, or in the temporary */ > + /* Find either in the original commit message, or in the temporary */ > if (buf.len) > retval = grep_buffer(&opt->grep_filter, buf.buf, buf.len); > else > retval = grep_buffer(&opt->grep_filter, > - commit->buffer, strlen(commit->buffer)); > + message, strlen(message)); > strbuf_release(&buf); > + logmsg_free(message, commit); > return retval; > } > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html