Re: [PATCH] diffcore: add a filter to find a specific blob
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Dec 14, 2017, 22:52 UTC
- Message-ID
- <20171214225200.GA44616@aiede.mtv.corp.google.com>
- In-Reply-To
- <CAGZ79kZdUuoM79n09ziG0F7WCWNLpZ2AiFA6fb_qgND1b3_F9A@mail.gmail.com>
Hi,
Stefan Beller wrote:
> On Thu, Dec 14, 2017 at 1:22 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 7 quoted lines
>> - what about mode changes? If the file became executable but the >> blob content didn't change, does that commit match? > > ./git log --find-object=$(git rev-parse ba67504f:t/perf/p3400-rebase.sh) > > claims it does find the mode change (commit ba67504f is just a mode > change)
Thanks. Reminder to self to add a test + docs about that (as a followup change; this isn't a complaint about the patch).
Show 6 quoted lines
>> - are copies and renames shown (if I am passing -M -C)? > > It restricts the commits shown, not the renamed files. But I assume > you mean it the same way as with mode changes. > I did not find a good commit in gits history to demonstrate, but as > it is orthogonal to the object id restrictions, I would think it works
Ok, will add test + doc.
>> Nit, not related to this change: it would be nice to have a long >> option to go along with the short name '-t' --- e.g. --include-trees. > > follow up patches welcome. :)
Will think more and try to send a patch if it still seems like a good idea in a day or so. ;)
Show 5 quoted lines
>> Another nit: s/gitlink entry/submodule commit/, perhaps. The commit >> object is not a gitlink entry: it is pointed to by a gitlink entry. > > Well, what if the user doesn't have a submodule, but uses gitlinks > for other purposes? We do inspect the gitlink, so it is correct IMHO.
It's a language nit. The argument to --find-object is a commit object name, not a gitlink entry. A gitlink entry looks like
160000 <path> <object>
Show 7 quoted lines
>> Another documentation idea: it may be nice to point out that this >> is only about the preimage and postimage submodule commit and that >> it doesn't look at the history in between. > > That is sensible. One might be tempted to ask: "Which superproject > commit contains a submodule pointer, that has commit $X in the > submodule history?", but this new option is totally not answering this.
Ok, will try to come up with wording.
Show 10 quoted lines
>>> The >>> reason why these commits both occur prior to v2.0.0 are evil >>> merges that are not found using this new mechanism. >> >> Would it be worth the doc mentioning that this doesn't look at merges >> unless you use one of the -m/-c/--cc options, or does that go without >> saying? > > I assumed it goes without saying, just like the lacking -t could mean > to ignore trees. ;)
I suspect it's worth a mention, based on the discussion in this thread (i.e. without such docs it was non-obvious and took some time to diagnose).
[...]
Show 12 quoted lines
>>> +--find-object=<object-id>:: >>> + Restrict the output such that one side of the diff >>> + matches the given object id. The object can be a blob, >>> + gitlink entry or tree (when `-t` is given). >> >> I like this name --find-object more than --blobfind! I am not sure it >> quite matches what the user is looking for, though. We are not >> looking for all occurences of the object; we only care about when the >> object appears (was added or removed) in the diff. > > Thanks! Yes, but the 'edges' are so few commits that a further walk > will reveal all you need to know?
Sorry for the lack of clarity: I actually like this behavior *more* than a "find trees pointing to object" behavior. I'm just saying the name sets an unclear expectation.
[...]
> Regarding finding a better name, I would want to hear from others, > I am happy with --find-object, though I can see --pickaxe-object > or --object--filter to be a good narrative as well.
Drat, I was hoping for an opinion.
Based on the answers above about mode changes and renames, at the moment --object-filter seems clearest to me.
Thanks, Jonathan