[PATCH v2 14/15] pretty: introduce get_pretty_userformat
From: Ramkumar Ramachandra <hidden>
Date: 2016-06-15 22:57:38
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- commit.h | 1 + pretty.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+)
diff --git a/commit.h b/commit.h
index 38dc0c0..7755282 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.247.g485169c