1#ifndef PRETTY_H 2#define PRETTY_H 3 4struct commit; 5 6/* Commit formats */ 7enum cmit_fmt { 8 CMIT_FMT_RAW, 9 CMIT_FMT_MEDIUM, 10 CMIT_FMT_DEFAULT = CMIT_FMT_MEDIUM, 11 CMIT_FMT_SHORT, 12 CMIT_FMT_FULL, 13 CMIT_FMT_FULLER, 14 CMIT_FMT_ONELINE, 15 CMIT_FMT_EMAIL, 16 CMIT_FMT_MBOXRD, 17 CMIT_FMT_USERFORMAT, 18 19 CMIT_FMT_UNSPECIFIED 20}; 21 22struct pretty_print_context { 23 /* 24 * Callers should tweak these to change the behavior of pp_* functions. 25 */ 26 enum cmit_fmt fmt; 27 int abbrev; 28 const char *after_subject; 29 int preserve_subject; 30 struct date_mode date_mode; 31 unsigned date_mode_explicit:1; 32 int print_email_subject; 33 int expand_tabs_in_log; 34 int need_8bit_cte; 35 char *notes_message; 36 struct reflog_walk_info *reflog_info; 37 struct rev_info *rev; 38 const char *output_encoding; 39 struct string_list *mailmap; 40 int color; 41 struct ident_split *from_ident; 42 43 /* 44 * Fields below here are manipulated internally by pp_* functions and 45 * should not be counted on by callers. 46 */ 47 struct string_list in_body_headers; 48 int graph_width; 49}; 50 51/* Check whether commit format is mail. */ 52static inline int cmit_fmt_is_mail(enum cmit_fmt fmt) 53{ 54 return (fmt == CMIT_FMT_EMAIL || fmt == CMIT_FMT_MBOXRD); 55} 56 57struct userformat_want { 58 unsigned notes:1; 59}; 60 61/* Set the flag "w->notes" if there is placeholder %N in "fmt". */ 62void userformat_find_requirements(const char *fmt, struct userformat_want *w); 63 64/* 65 * Shortcut for invoking pretty_print_commit if we do not have any context. 66 * Context would be set empty except "fmt". 67 */ 68void pp_commit_easy(enum cmit_fmt fmt, const struct commit *commit, 69 struct strbuf *sb); 70 71/* 72 * Get information about user and date from "line", format it and 73 * put it into "sb". 74 * Format of "line" must be readable for split_ident_line function. 75 * The resulting format is "what: name <email> date". 76 */ 77void pp_user_info(struct pretty_print_context *pp, const char *what, 78 struct strbuf *sb, const char *line, 79 const char *encoding); 80 81/* 82 * Format title line of commit message taken from "msg_p" and 83 * put it into "sb". 84 * First line of "msg_p" is also affected. 85 */ 86void pp_title_line(struct pretty_print_context *pp, const char **msg_p, 87 struct strbuf *sb, const char *encoding, 88 int need_8bit_cte); 89 90/* 91 * Get current state of commit message from "msg_p" and continue formatting 92 * by adding indentation and '>' signs. Put result into "sb". 93 */ 94void pp_remainder(struct pretty_print_context *pp, const char **msg_p, 95 struct strbuf *sb, int indent); 96 97/* 98 * Create a text message about commit using given "format" and "context". 99 * Put the result to "sb". 100 * Please use this function for custom formats. 101 */ 102void format_commit_message(const struct commit *commit, 103 const char *format, struct strbuf *sb, 104 const struct pretty_print_context *context); 105 106/* 107 * Parse given arguments from "arg", check it for correctness and 108 * fill struct rev_info. 109 */ 110void get_commit_format(const char *arg, struct rev_info *); 111 112/* 113 * Make a commit message with all rules from given "pp" 114 * and put it into "sb". 115 * Please use this function if you have a context (candidate for "pp"). 116 */ 117void pretty_print_commit(struct pretty_print_context *pp, 118 const struct commit *commit, 119 struct strbuf *sb); 120 121/* 122 * Change line breaks in "msg" to "line_separator" and put it into "sb". 123 * Return "msg" itself. 124 */ 125const char *format_subject(struct strbuf *sb, const char *msg, 126 const char *line_separator); 127 128/* Check if "cmit_fmt" will produce an empty output. */ 129int commit_format_is_empty(enum cmit_fmt); 130 131#endif /* PRETTY_H */