This helper function is intended to be used by callers implementing --pretty themselves; it parses pretty.* configuration variables recursively and hands the user-defined format back to the caller. No builtins are supported, as CMT_FMT_* are really only useful when displaying commits. Callers might like to define their own builtins in the future. Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- commit.h | 1 + pretty.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/commit.h b/commit.h index ced7100..331a2db 100644 --- a/commit.h +++ b/commit.h @@ -113,6 +113,7 @@ extern char *logmsg_reencode(const struct commit *commit, const char *output_encoding); extern void logmsg_free(char *msg, const struct commit *commit); extern void get_commit_format(const char *arg, struct rev_info *); +extern const char *get_pretty_userformat(const char *arg); extern const char *format_subject(struct strbuf *sb, const char *msg, const char *line_separator); extern void userformat_find_requirements(const char *fmt, struct userformat_want *w); diff --git a/pretty.c b/pretty.c index 28c0a72..70e4e44 100644 --- a/pretty.c +++ b/pretty.c @@ -174,6 +174,31 @@ void get_commit_format(const char *arg, struct rev_info *rev) } /* + * Function to parse --pretty string, lookup pretty.* configuration + * variables and return the format string, assuming no builtin + * formats. Not limited to commits, unlike get_commit_format(). + */ +const char *get_pretty_userformat(const char *arg) +{ + struct cmt_fmt_map *commit_format; + + if (!arg || !*arg) + return NULL; + + if (!prefixcmp(arg, "format:") || !prefixcmp(arg, "tformat:")) + return xstrdup(strchr(arg, ':' + 1)); + + if (strchr(arg, '%')) + return xstrdup(arg); + + commit_format = find_commit_format(arg); + if (!commit_format || commit_format->format != CMIT_FMT_USERFORMAT) + die("invalid --pretty format: %s", arg); + + return xstrdup(commit_format->user_format); +} + +/* * Generic support for pretty-printing the header */ static int get_one_line(const char *msg) -- 1.8.3.2.736.g869de25 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html