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

Re: feature request: git add--interactive --patch on regex-matched hunks only

From
Jeff King <peff@peff.net>
Date
Jul 27, 2011, 08:03 UTC
Message-ID
<20110727080303.GA8105@sigill.intra.peff.net>
In-Reply-To
<CACsJy8Birqg2Ldp1Mt4NWOq1aT0oigTcFA8S=RWcK5y+zstwDA@mail.gmail.com>
On Tue, Jul 26, 2011 at 07:44:06PM +0700, Nguyen Thai Ngoc Duy wrote:
> > I don't think there's a way to do --no-match style negation in the
> > regex itself, though.
> 
> Your coding skills are needed :)
OK. Patches to follow. :)
Show 8 quoted lines
> Speaking of names, I'm usually bad at naming, but here goes. How about
> --hunks=regex, --no-hunks=regex and --split-hunks? We may have
> --[no-]case-hunks later on but that does sound bad.
> 
> <over-engineering>maybe we should support multiple --hunks (or
> --no-hunks, but not a mix of them), all must be matched, because there
> are many lines in a hunk and people may want set patterns across
> lines</over-engineering>

My series lets you do multiple --hunks, and a hunk just needs to match any of them.

Having "--no-hunks" implies that you can negate just some of the filters. Like:

  git add -p --hunks=foo --no-hunks=bar

My series doesn't support that, though it would not be that big a deal to do so (the tricky part is defining the OR-ing and AND-ing sensibly). Something like:

  git add -p --negate-hunks --hunks=foo --hunks=bar

makes it clear that you are either selecting or de-selecting with your filter.

Technically somebody could also want:
  git add -p --hunk=foo --and --hunk=bar
but I didn't want to get into parsing arbitrary boolean expressions.
An easy flexible thing would be to just eval perl code like:
  git add -p --hunk-filter='/foo/ && !/bar/'

but I don't think we want to tie ourselves to the implementation being in perl forever.

Anyway, the series is:
  [1/5]: add--interactive: refactor patch mode argument processing
  [2/5]: add--interactive: factor out regex error handling
  [3/5]: add--interactive: allow hunk filtering on command line
  [4/5]: add--interactive: allow negatation of hunk filters
  [5/5]: add--interactive: add option to autosplit hunks

Lightly tested by me. You can either build on top, or just squash them into your commits as appropriate.

-Peff
Previous: Jeff KingNext: Jeff King
Message 14 of 19 in “feature request: git add--interactive --patch on regex-matched hunks only”
  1. Nguyen Thai Ngoc DuyJul 24, 2011
  2. Jeff KingJul 25, 2011
  3. Junio C HamanoJul 25, 2011
  4. Jeff KingJul 26, 2011
  5. Nguyen Thai Ngoc DuyJul 26, 2011
  6. Jeff KingJul 26, 2011
  7. Nguyen Thai Ngoc DuyJul 26, 2011
  8. Jeff KingJul 26, 2011
  9. Nguyen Thai Ngoc DuyJul 26, 2011
  10. Nguyen Thai Ngoc DuyJul 26, 2011
  11. Jeff KingJul 27, 2011
  12. Nguyen Thai Ngoc DuyJul 27, 2011
  13. Jeff KingJul 27, 2011
  14. Jeff KingJul 27, 2011
  15. 1/5 add--interactive: refactor patch mode argument processingJeff King, Jul 27, 2011
  16. 2/5 add--interactive: factor out regex error handlingJeff King, Jul 27, 2011
  17. 3/5 add--interactive: allow hunk filtering on command lineJeff King, Jul 27, 2011
  18. 4/5 add--interactive: allow negatation of hunk filtersJeff King, Jul 27, 2011
  19. 5/5 add--interactive: add option to autosplit hunksJeff King, Jul 27, 2011

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.