Junio C Hamano <[email protected]> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html