Junio C Hamano <gits...@pobox.com> writes:

> Wouldn't it make more sense to see if the given pattern matches a
> tail substring of the ref, instead of using the hardcoded "strip
> refs/heads/, refs/tags or refs/, and then match once" logic?  That
> way, --refs=origin/* can find refs/remotes/origin/master by running
> fnmatch of origin/* against its substrings, i.e.
>
>       refs/remotes/origin/master
>         remotes/origin/master
>         origin/master
>
> and find that the pattern matches it.
>
> Perhaps it is just the matter of adding something like:
> ...
> and then at the beginning of name_ref() do this:
>
>       int can_abbreviate_output = data->name_only;
>
>       if (data->tags_only && prefixcmp(path, "refs/tags/"))
>               return 0;
>       if (data->ref_filter) {
>               switch (subpath_matches(path, data->ref_filter)) {
>               case -1: /* did not match */
>                       return 0;
>               default: /* matched subpath */
>                       can_abbreviate_output = 1;
>                       break;
>               case 0: /* matched fully */
>                       break;
>               }
>       }
>
> The logic before calling name_rev() will be kept as "only decide how
> the output looks like", without mixing the unrelated "decide if we
> want to use it" logic in.

... which may make the "call name_rev with this abbreviated path"
logic look something like this:

        if (o && o->type == OBJ_COMMIT) {
                if (can_abbreviate_output)
                        path = shorten_unambiguous_ref(path, 0);
                else if (!prefixcmp(path, "refs/heads/"))
                        path = path + 11;
                else if (data->tags_only
                    && data->name_only
                    && !prefixcmp(path, "refs/tags/"))
                        path = path + 10;
                else if (!prefixcmp(path, "refs/"))
                        path = path + 5;

                name_rev((struct commit *) o, xstrdup(path), 0, 0, deref);
        }

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to