Stefan Beller [off-list ref] writes:
the information to what is shown. For example:
$ ./git log --oneline --blobfind=v2.0.0:Makefile
b2feb64309 Revert the whole "ask curl-config" topic for now
47fbfded53 i18n: only extract comments marked with "TRANSLATORS:"
This part is a bit stale???
quoted hunk
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index dd0dba5b1d..67a99e522b 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -500,6 +500,12 @@ information.
--pickaxe-regex::
Treat the <string> given to `-S` as an extended POSIX regular
expression to match.
+
+--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,
+ or gitlink entry.
OK. In principle you should also be able to find a tree, but I do
not now how useful it would be. Extending it to gitlink, which is
another kind of leaf node in the reachability DAG, does make tons of
sense---it's a no brainer that I feel ashamed not to have thought of
myself ;-)
+LIB_OBJS += diffcore-oidfind.o
Just to nitpick, but "blobfind" was to find "blob", and if you are
extending it to find any "object", then that should be "objfind".
"oid" is _A_ way to refer to an object (i.e. the _name_ of it), and
name is *not* the same as the thing the name refers to, so...
+static int parse_oidfind_opt(struct diff_options *opt, const char *arg)
+{
+ struct object_id oid;
+
+ /* We don't even need to have the object, any oid works. */
+ if (get_oid_blob(arg, &oid))
+ return error("unable to resolve '%s'", arg);
Should this still be get_oid_blob(), or should it be less specific
to blobs?
+test_expect_success 'find the greeting blob' '
+ cat >expect <<-EOF &&
+ Revert "add the greeting blob"
+ add the greeting blob
+ EOF
+
+ git log --format=%s --find-object=greeting^{blob} >actual &&
+
+ test_cmp expect actual
+'
Makes sense.
+
+test_expect_success 'setup a submodule' '
+ test_create_repo sub &&
+ test_commit -C sub sub &&
+ git submodule add ./sub sub &&
+ git commit -a -m "add sub"
+'
+
+test_expect_success 'find a submodule' '
+ cat >expect <<-EOF &&
+ add sub
+ EOF
+
+ git log --format=%s --find-object=HEAD:sub >actual &&
+
+ test_cmp expect actual
+'
Nice (and cute).
+test_done
Looking good. Thanks.