check return value of verify_ref_format()
Users of the ref-filter code must call verify_ref_format() before formatting any refs, but most ignore its return value. This means we may print an error on a syntactically bogus pattern, but keep going anyway. In most cases this results in a fatal error when we actually try to format a ref. But if you have no refs to show at all, then the behavior is confusing: git prints the error from verify_ref_format(), then exits with code 0 without showing any output. Let's instead abort immediately if we know we have a bogus format. We'll output the usage information if we have it handy (just like the existing call in cmd_for_each_ref() does), and otherwise just die(). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
80145b1e41
commit
2eda0102be
@ -53,7 +53,8 @@ static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting, con
|
||||
format = "%(refname:lstrip=2)";
|
||||
}
|
||||
|
||||
verify_ref_format(format);
|
||||
if (verify_ref_format(format))
|
||||
die(_("unable to parse format string"));
|
||||
filter->with_commit_tag_algo = 1;
|
||||
filter_refs(&array, filter, FILTER_REFS_TAGS);
|
||||
ref_array_sort(sorting, &array);
|
||||
@ -501,8 +502,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
||||
if (cmdmode == 'd')
|
||||
return for_each_tag_name(argv, delete_tag, NULL);
|
||||
if (cmdmode == 'v') {
|
||||
if (format)
|
||||
verify_ref_format(format);
|
||||
if (format && verify_ref_format(format))
|
||||
usage_with_options(git_tag_usage, options);
|
||||
return for_each_tag_name(argv, verify_tag, format);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user