Vladimir Panteleev <g...@thecybershadow.net> writes:

> This patch adds --head support to show-ref's --verify logic, by
> explicitly checking if the "HEAD" ref is specified when --head is
> present.

> @@ -207,6 +207,8 @@ int cmd_show_ref(int argc, const char **argv, const char 
> *prefix)
>                               if (!quiet)
>                                       show_one(*pattern, &oid);
>                       }
> +                     else if (show_head && !strcmp(*pattern, "HEAD"))
> +                             head_ref(show_ref, NULL);
>                       else if (!quiet)
>                               die("'%s' - not a valid ref", *pattern);
>                       else

The context around here look like this:

                while (*pattern) {
                        struct object_id oid;

                        if (starts_with(*pattern, "refs/") &&
                            !read_ref(*pattern, oid.hash)) {
                                if (!quiet)
                                        show_one(*pattern, &oid);
                        }
                        else if (!quiet)
                                die("'%s' - not a valid ref", *pattern);
                        else
                                return 1;
                        pattern++;
                }

and viewed in the wider context, I notice that quiet is not honored
in the added code.  I think that is easily fixable by replacing this
hunk with something like:

-       if (starts_with(*pattern, "refs/") &&
+       if (to_show_ref(*pattern) &&

and then another hunk that implements to_show_ref() helper function,
perhaps like

        static int to_show_ref(const char *pattern)
        {
                if (starts_with(pattern, "refs/"))
                        return 1;
                if (show_head && !strcmp(pattern, "HEAD"))
                        return 1;
                return 0;
        }

or something.

Having said all that, using --verify on HEAD does not make much
sense, because if HEAD is missing in .git/, I do not think Git
considers that directory as a Git repository to begin with.  So from
that point of view, I am not sure what value this change adds to the
system, even though the change is almost correct (modulo the "quiet"
thing).

Reply via email to