]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ref-filter: add `short` modifier to 'tree' atom
authorHariom Verma <hariom18599@gmail.com>
Fri, 21 Aug 2020 21:41:47 +0000 (21:41 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 28 Aug 2020 20:52:50 +0000 (13:52 -0700)
Sometimes while using 'tree' atom, user might want to see abbrev hash
instead of full 40 character hash.

Just like 'objectname', it might be convenient for users to have the
`:short` and `:short=<length>` option for printing 'tree' hash.

Let's introduce `short` option to 'tree' atom.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Heba Waly <heba.waly@gmail.com>
Signed-off-by: Hariom Verma <hariom18599@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-for-each-ref.txt
ref-filter.c
t/t6300-for-each-ref.sh

index e6ce8af612a951d249aeecfc113a872ffd0ca9b0..40ebdfcc419f58fefd0c3376ed6aa0a2f13a49db 100644 (file)
@@ -222,6 +222,8 @@ worktreepath::
 In addition to the above, for commit and tag objects, the header
 field names (`tree`, `parent`, `object`, `type`, and `tag`) can
 be used to specify the value in the header field.
+Field `tree` can also be used with modifier `:short` and
+`:short=<length>` just like `objectname`.
 
 For commit and tag objects, the special `creatordate` and `creator`
 fields will correspond to the appropriate date or name-email-date tuple
index 066975b306429d5c67800480fddb6dc8fd9c269a..3449fe45d814a2055fad211f5f384c7470d7519a 100644 (file)
@@ -497,7 +497,7 @@ static struct {
        { "objectsize", SOURCE_OTHER, FIELD_ULONG, objectsize_atom_parser },
        { "objectname", SOURCE_OTHER, FIELD_STR, oid_atom_parser },
        { "deltabase", SOURCE_OTHER, FIELD_STR, deltabase_atom_parser },
-       { "tree", SOURCE_OBJ },
+       { "tree", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
        { "parent", SOURCE_OBJ },
        { "numparent", SOURCE_OBJ, FIELD_ULONG },
        { "object", SOURCE_OBJ },
@@ -1005,10 +1005,9 @@ static void grab_commit_values(struct atom_value *val, int deref, struct object
                        continue;
                if (deref)
                        name++;
-               if (!strcmp(name, "tree")) {
-                       v->s = xstrdup(oid_to_hex(get_commit_tree_oid(commit)));
-               }
-               else if (!strcmp(name, "numparent")) {
+               if (grab_oid(name, "tree", get_commit_tree_oid(commit), v, &used_atom[i]))
+                       continue;
+               if (!strcmp(name, "numparent")) {
                        v->value = commit_list_count(commit->parents);
                        v->s = xstrfmt("%lu", (unsigned long)v->value);
                }
index 64fbc91146aebe2acc4d404000125c80dbb40ce8..e30bbff6d9a5c8ad5e40deb16105b097c7cd36e8 100755 (executable)
@@ -116,6 +116,9 @@ test_atom head objectname:short $(git rev-parse --short refs/heads/master)
 test_atom head objectname:short=1 $(git rev-parse --short=1 refs/heads/master)
 test_atom head objectname:short=10 $(git rev-parse --short=10 refs/heads/master)
 test_atom head tree $(git rev-parse refs/heads/master^{tree})
+test_atom head tree:short $(git rev-parse --short refs/heads/master^{tree})
+test_atom head tree:short=1 $(git rev-parse --short=1 refs/heads/master^{tree})
+test_atom head tree:short=10 $(git rev-parse --short=10 refs/heads/master^{tree})
 test_atom head parent ''
 test_atom head numparent 0
 test_atom head object ''
@@ -167,6 +170,9 @@ test_atom tag objectname:short $(git rev-parse --short refs/tags/testtag)
 test_atom head objectname:short=1 $(git rev-parse --short=1 refs/heads/master)
 test_atom head objectname:short=10 $(git rev-parse --short=10 refs/heads/master)
 test_atom tag tree ''
+test_atom tag tree:short ''
+test_atom tag tree:short=1 ''
+test_atom tag tree:short=10 ''
 test_atom tag parent ''
 test_atom tag numparent ''
 test_atom tag object $(git rev-parse refs/tags/testtag^0)