]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ref-filter: add `short` modifier to 'parent' atom
authorHariom Verma <hariom18599@gmail.com>
Fri, 21 Aug 2020 21:41:48 +0000 (21:41 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 28 Aug 2020 20:52:50 +0000 (13:52 -0700)
Sometimes while using 'parent' 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 'parent' hash.

Let's introduce `short` option to 'parent' 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 40ebdfcc419f58fefd0c3376ed6aa0a2f13a49db..dd09763e7df1331ab538ddfcce66d49dacfa3f88 100644 (file)
@@ -222,7 +222,7 @@ 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
+Fields `tree` and `parent` can also be used with modifier `:short` and
 `:short=<length>` just like `objectname`.
 
 For commit and tag objects, the special `creatordate` and `creator`
index 3449fe45d814a2055fad211f5f384c7470d7519a..c7d81088e4d3d8281de1e41adbdd00f4890f1122 100644 (file)
@@ -498,7 +498,7 @@ static struct {
        { "objectname", SOURCE_OTHER, FIELD_STR, oid_atom_parser },
        { "deltabase", SOURCE_OTHER, FIELD_STR, deltabase_atom_parser },
        { "tree", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
-       { "parent", SOURCE_OBJ },
+       { "parent", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
        { "numparent", SOURCE_OBJ, FIELD_ULONG },
        { "object", SOURCE_OBJ },
        { "type", SOURCE_OBJ },
@@ -1011,14 +1011,14 @@ static void grab_commit_values(struct atom_value *val, int deref, struct object
                        v->value = commit_list_count(commit->parents);
                        v->s = xstrfmt("%lu", (unsigned long)v->value);
                }
-               else if (!strcmp(name, "parent")) {
+               else if (starts_with(name, "parent")) {
                        struct commit_list *parents;
                        struct strbuf s = STRBUF_INIT;
                        for (parents = commit->parents; parents; parents = parents->next) {
-                               struct commit *parent = parents->item;
+                               struct object_id *oid = &parents->item->object.oid;
                                if (parents != commit->parents)
                                        strbuf_addch(&s, ' ');
-                               strbuf_addstr(&s, oid_to_hex(&parent->object.oid));
+                               strbuf_addstr(&s, do_grab_oid("parent", oid, &used_atom[i]));
                        }
                        v->s = strbuf_detach(&s, NULL);
                }
index e30bbff6d9a5c8ad5e40deb16105b097c7cd36e8..79d5b293872ac90397a5001bddeb72d8d4ebae93 100755 (executable)
@@ -120,6 +120,9 @@ 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 parent:short ''
+test_atom head parent:short=1 ''
+test_atom head parent:short=10 ''
 test_atom head numparent 0
 test_atom head object ''
 test_atom head type ''
@@ -174,6 +177,9 @@ test_atom tag tree:short ''
 test_atom tag tree:short=1 ''
 test_atom tag tree:short=10 ''
 test_atom tag parent ''
+test_atom tag parent:short ''
+test_atom tag parent:short=1 ''
+test_atom tag parent:short=10 ''
 test_atom tag numparent ''
 test_atom tag object $(git rev-parse refs/tags/testtag^0)
 test_atom tag type 'commit'