From: Ævar Arnfjörð Bjarmason Date: Wed, 24 Apr 2019 15:37:10 GMT Subject: Re: [PATCH 2/2] diffcore-pickaxe: add --pickaxe-raw-diff for use with -G Message-ID: <87o94vs9cp.fsf@evledraar.gmail.com> In-Reply-To: <20190424152215.16251-3-avarab@gmail.com> On Wed, Apr 24 2019, Ævar Arnfjörð Bjarmason wrote: > Add the ability for the -G pickaxe to search only through added > or removed lines in the diff, or even through an arbitrary amount of > context lines when combined with -U. > > This has been requested[1][2] a few times in the past, and isn't > currently possible. Instead users need to do -G and then write > their own post-parsing script to see if the matched added or > removed lines, or both. There was no way to match the adjacent context > lines other than running and grepping the equivalent of a "log -p -U". > > 1. https://public-inbox.org/git/xmqqwoqrr8y2.fsf@gitster-ct.c.googlers.com/ > 2. https://public-inbox.org/git/20190424102609.GA19697@vmlxhi-102.adit-jv.com/ I see now once I actually read Eugeniu Rosca's E-Mail upthread instead of just knee-jerk sending out patches that this doesn't actually solve his particular problem fully. I.e. if you want some AND/OR matching support this --pickaxe-raw-diff won't give you that, but it *does* make it much easier to script up such an option. Run it twice with -G"\+" and -G"-", "sort | uniq -c" the commit list, and see which things occur once or twice. Of course that doesn't give you more complex nested and/or cases, but if git-log grew support for that like git-grep has the -G option could use that, although at that point we'd probably want to spend effort on making the underlying machinery smarter to avoid duplicate work. Furthermore, and quoting Eugeniu upthread: In the context of [1], I would like to find all Linux commits which replaced: 'devm_request_threaded_irq(* IRQF_SHARED *)' by: 'devm_request_threaded_irq(* IRQF_ONESHOT *)' Such AND/OR machinery would give you what you wanted *most* of the time, but it would also find removed/added pairs that were "unrelated" as well as "related". Solving *that* problem is more complex, but something the diff machinery could in principle expose. But the "-G --pickaxe-raw-diff" feature I have as-is is very useful, I've had at least two people off-list ask me about a problem that would be solved by it just in the last 1/2 year (unrelated to them having seen the WIP patch I sent last October). It's more general than Junio's suggested --pickaxe-ignore-{add,del} options[1], but those could be implemented in terms of this underlying code if anyone cared to have those as aliases. You'd just take the -G and prefix the with "^\+" or "^-" as appropriate and turn on the DIFF_PICKAXE_G_RAW_DIFF flag. 1. https://public-inbox.org/git/xmqqwoqrr8y2.fsf@gitster-ct.c.googlers.com/