git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 14/15] pretty: introduce get_pretty_userformat

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Jun 9, 2013, 17:54 UTC
Message-ID
<1370800474-8940-15-git-send-email-artagnon@gmail.com>
In-Reply-To
<1370800474-8940-1-git-send-email-artagnon@gmail.com>

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@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 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
Previous: Ramkumar RamachandraNext: Ramkumar Ramachandra
Message 15 of 19 in “Towards a more awesome git branch”
  1. 00/15 Towards a more awesome git branchRamkumar Ramachandra, Jun 9, 2013
  2. 01/15 for-each-ref, quote: convert *_quote_print -> *_quote_bufRamkumar Ramachandra, Jun 9, 2013
  3. 02/15 for-each-ref: don't print out elements directlyRamkumar Ramachandra, Jun 9, 2013
  4. 03/15 tar-tree: remove dependency on sq_quote_print()Ramkumar Ramachandra, Jun 9, 2013
  5. 04/15 quote: remove sq_quote_print()Ramkumar Ramachandra, Jun 9, 2013
  6. 05/15 pretty: extend pretty_print_context with callbackRamkumar Ramachandra, Jun 9, 2013
  7. 06/15 pretty: limit recursion in format_commit_one()Ramkumar Ramachandra, Jun 9, 2013
  8. 07/15 pretty: allow passing NULL commit to format_commit_message()Ramkumar Ramachandra, Jun 9, 2013
  9. 08/15 for-each-ref: get --pretty using format_commit_message()Ramkumar Ramachandra, Jun 9, 2013
  10. 09/15 for-each-ref: teach verify_format() about pretty's syntaxRamkumar Ramachandra, Jun 9, 2013
  11. 10/15 for-each-ref: introduce format specifier %>(*) and %<(*)Ramkumar Ramachandra, Jun 9, 2013
  12. 11/15 for-each-ref: introduce %(HEAD) markerRamkumar Ramachandra, Jun 9, 2013
  13. 12/15 for-each-ref: introduce %(upstream:track[short])Ramkumar Ramachandra, Jun 9, 2013
  14. 13/15 for-each-ref: improve responsiveness of %(upstream:track)Ramkumar Ramachandra, Jun 9, 2013
  15. 14/15 pretty: introduce get_pretty_userformatRamkumar Ramachandra, Jun 9, 2013
  16. 15/15 for-each-ref: use get_pretty_userformat in --prettyRamkumar Ramachandra, Jun 9, 2013
  17. Duy NguyenJun 10, 2013
  18. Ramkumar RamachandraJun 10, 2013
  19. Junio C HamanoJun 10, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.