зеркало из https://github.com/microsoft/git.git
pretty.c: refactor trailer logic to `format_set_trailers_options()`
Refactored trailers formatting logic inside pretty.c to a new function `format_set_trailers_options()`. This new function returns the non-zero in case of unusual. The caller handles the non-zero by "goto trailers_out". This change will allow us to reuse the same logic in other places. 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>
This commit is contained in:
Родитель
727331dce1
Коммит
90563aedca
87
pretty.c
87
pretty.c
|
@ -1148,6 +1148,54 @@ static int format_trailer_match_cb(const struct strbuf *key, void *ud)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int format_set_trailers_options(struct process_trailer_options *opts,
|
||||||
|
struct string_list *filter_list,
|
||||||
|
struct strbuf *sepbuf,
|
||||||
|
struct strbuf *kvsepbuf,
|
||||||
|
const char **arg)
|
||||||
|
{
|
||||||
|
for (;;) {
|
||||||
|
const char *argval;
|
||||||
|
size_t arglen;
|
||||||
|
|
||||||
|
if (match_placeholder_arg_value(*arg, "key", arg, &argval, &arglen)) {
|
||||||
|
uintptr_t len = arglen;
|
||||||
|
|
||||||
|
if (!argval)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (len && argval[len - 1] == ':')
|
||||||
|
len--;
|
||||||
|
string_list_append(filter_list, argval)->util = (char *)len;
|
||||||
|
|
||||||
|
opts->filter = format_trailer_match_cb;
|
||||||
|
opts->filter_data = filter_list;
|
||||||
|
opts->only_trailers = 1;
|
||||||
|
} else if (match_placeholder_arg_value(*arg, "separator", arg, &argval, &arglen)) {
|
||||||
|
char *fmt;
|
||||||
|
|
||||||
|
strbuf_reset(sepbuf);
|
||||||
|
fmt = xstrndup(argval, arglen);
|
||||||
|
strbuf_expand(sepbuf, fmt, strbuf_expand_literal_cb, NULL);
|
||||||
|
free(fmt);
|
||||||
|
opts->separator = sepbuf;
|
||||||
|
} else if (match_placeholder_arg_value(*arg, "key_value_separator", arg, &argval, &arglen)) {
|
||||||
|
char *fmt;
|
||||||
|
|
||||||
|
strbuf_reset(kvsepbuf);
|
||||||
|
fmt = xstrndup(argval, arglen);
|
||||||
|
strbuf_expand(kvsepbuf, fmt, strbuf_expand_literal_cb, NULL);
|
||||||
|
free(fmt);
|
||||||
|
opts->key_value_separator = kvsepbuf;
|
||||||
|
} else if (!match_placeholder_bool_arg(*arg, "only", arg, &opts->only_trailers) &&
|
||||||
|
!match_placeholder_bool_arg(*arg, "unfold", arg, &opts->unfold) &&
|
||||||
|
!match_placeholder_bool_arg(*arg, "keyonly", arg, &opts->key_only) &&
|
||||||
|
!match_placeholder_bool_arg(*arg, "valueonly", arg, &opts->value_only))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
||||||
const char *placeholder,
|
const char *placeholder,
|
||||||
void *context)
|
void *context)
|
||||||
|
@ -1425,45 +1473,8 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
||||||
|
|
||||||
if (*arg == ':') {
|
if (*arg == ':') {
|
||||||
arg++;
|
arg++;
|
||||||
for (;;) {
|
if (format_set_trailers_options(&opts, &filter_list, &sepbuf, &kvsepbuf, &arg))
|
||||||
const char *argval;
|
|
||||||
size_t arglen;
|
|
||||||
|
|
||||||
if (match_placeholder_arg_value(arg, "key", &arg, &argval, &arglen)) {
|
|
||||||
uintptr_t len = arglen;
|
|
||||||
|
|
||||||
if (!argval)
|
|
||||||
goto trailer_out;
|
goto trailer_out;
|
||||||
|
|
||||||
if (len && argval[len - 1] == ':')
|
|
||||||
len--;
|
|
||||||
string_list_append(&filter_list, argval)->util = (char *)len;
|
|
||||||
|
|
||||||
opts.filter = format_trailer_match_cb;
|
|
||||||
opts.filter_data = &filter_list;
|
|
||||||
opts.only_trailers = 1;
|
|
||||||
} else if (match_placeholder_arg_value(arg, "separator", &arg, &argval, &arglen)) {
|
|
||||||
char *fmt;
|
|
||||||
|
|
||||||
strbuf_reset(&sepbuf);
|
|
||||||
fmt = xstrndup(argval, arglen);
|
|
||||||
strbuf_expand(&sepbuf, fmt, strbuf_expand_literal_cb, NULL);
|
|
||||||
free(fmt);
|
|
||||||
opts.separator = &sepbuf;
|
|
||||||
} else if (match_placeholder_arg_value(arg, "key_value_separator", &arg, &argval, &arglen)) {
|
|
||||||
char *fmt;
|
|
||||||
|
|
||||||
strbuf_reset(&kvsepbuf);
|
|
||||||
fmt = xstrndup(argval, arglen);
|
|
||||||
strbuf_expand(&kvsepbuf, fmt, strbuf_expand_literal_cb, NULL);
|
|
||||||
free(fmt);
|
|
||||||
opts.key_value_separator = &kvsepbuf;
|
|
||||||
} else if (!match_placeholder_bool_arg(arg, "only", &arg, &opts.only_trailers) &&
|
|
||||||
!match_placeholder_bool_arg(arg, "unfold", &arg, &opts.unfold) &&
|
|
||||||
!match_placeholder_bool_arg(arg, "keyonly", &arg, &opts.key_only) &&
|
|
||||||
!match_placeholder_bool_arg(arg, "valueonly", &arg, &opts.value_only))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (*arg == ')') {
|
if (*arg == ')') {
|
||||||
format_trailers_from_commit(sb, msg + c->subject_off, &opts);
|
format_trailers_from_commit(sb, msg + c->subject_off, &opts);
|
||||||
|
|
11
pretty.h
11
pretty.h
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
struct commit;
|
struct commit;
|
||||||
struct strbuf;
|
struct strbuf;
|
||||||
|
struct process_trailer_options;
|
||||||
|
|
||||||
/* Commit formats */
|
/* Commit formats */
|
||||||
enum cmit_fmt {
|
enum cmit_fmt {
|
||||||
|
@ -142,4 +143,14 @@ int commit_format_is_empty(enum cmit_fmt);
|
||||||
/* Make subject of commit message suitable for filename */
|
/* Make subject of commit message suitable for filename */
|
||||||
void format_sanitized_subject(struct strbuf *sb, const char *msg, size_t len);
|
void format_sanitized_subject(struct strbuf *sb, const char *msg, size_t len);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set values of fields in "struct process_trailer_options"
|
||||||
|
* according to trailers arguments.
|
||||||
|
*/
|
||||||
|
int format_set_trailers_options(struct process_trailer_options *opts,
|
||||||
|
struct string_list *filter_list,
|
||||||
|
struct strbuf *sepbuf,
|
||||||
|
struct strbuf *kvsepbuf,
|
||||||
|
const char **arg);
|
||||||
|
|
||||||
#endif /* PRETTY_H */
|
#endif /* PRETTY_H */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче