[PATCH 14/15] pretty: introduce get_pretty_userformat

2013-07-09 Thread Ramkumar Ramachandra
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 artag...@gmail.com
Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 14/15] pretty: introduce get_pretty_userformat

2013-06-04 Thread Ramkumar Ramachandra
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 artag...@gmail.com
---
 commit.h |  1 +
 pretty.c | 25 +
 2 files changed, 26 insertions(+)

diff --git a/commit.h b/commit.h
index 04bd935..48424c9 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.GIT

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html