git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v6 2/2] pretty: colorize pattern matches in commit messages

From
Jeff King <peff@peff.net>
Date
Sep 21, 2021, 01:39 UTC
Message-ID
<YUk3zwuse56v76ze@coredump.intra.peff.net>
In-Reply-To
<YUk0OEXg36QXrkDm@coredump.intra.peff.net>
On Mon, Sep 20, 2021 at 09:24:08PM -0400, Jeff King wrote:
Show 11 quoted lines
> > +	buf = (char *)line;
> > +	eol = buf + linelen;
> 
> OK, so we got rid of the copy of "line", which is nice. But we are
> casting away const-ness, which is a potential red flag (is somebody
> going to modify this string, even though we promised our caller we would
> not?). We'd probably want a comment to explain why we are doing so, and
> why it is OK (e.g., if somebody in the call stack modifies it
> temporarily).
> 
> More on this in a moment.

The root of the issue is that grep_next_match() takes a non-const buffer, and so on. And indeed, it _does_ eventually get modified, although only temporarily. I think we can clean that up, though.

Here are two patches I prepared on top of your series to show what's possible, though I think we should do one of:

  - put them at the front of your series (with the appropriate
    adjustments) as preparatory cleanup
  - keep them separate. You can put a comment above the cast to mention
    what's going on and why it's OK for now, and then later when they're
    both merged, we can remove that cast.

The second option creates a little extra work for the maintainer (they both touch match_one_patter(), so there will be some textual conflicts). But it does mean we avoid a dependencies; the cleanups don't derail your series, nor does your series hold up the cleanups. So I could go either way.

  [1/2]: grep: stop modifying buffer in strip_timestamp
  [2/2]: grep: mark "haystack" buffers as const
 grep.c   | 30 ++++++++++++------------------
 grep.h   |  3 ++-
 pretty.c |  6 +++---
 3 files changed, 17 insertions(+), 22 deletions(-)
-Peff
Previous: Jeff KingNext: Jeff King
Message 4 of 10 in “grep: refactor next_match() and match_one_pattern() for external use”
  1. 1/2 grep: refactor next_match() and match_one_pattern() for external useHamza Mahfooz, Sep 21, 2021
  2. 2/2 pretty: colorize pattern matches in commit messagesHamza Mahfooz, Sep 21, 2021
  3. Jeff KingSep 21, 2021
  4. Jeff KingSep 21, 2021
  5. 1/2 grep: stop modifying buffer in strip_timestampJeff King, Sep 21, 2021
  6. 2/2 grep: mark "haystack" buffers as constJeff King, Sep 21, 2021
  7. Jeff KingSep 21, 2021
  8. Hamza MahfoozSep 21, 2021
  9. Jeff KingSep 21, 2021
  10. Jeff KingSep 21, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.