Git fork
at reftables-rust 174 lines 4.8 kB view raw
1#ifndef PRETTY_H 2#define PRETTY_H 3 4#include "date.h" 5#include "string-list.h" 6#include "color.h" 7 8struct commit; 9struct repository; 10struct strbuf; 11struct process_trailer_options; 12 13/* Commit formats */ 14enum cmit_fmt { 15 CMIT_FMT_RAW, 16 CMIT_FMT_MEDIUM, 17 CMIT_FMT_DEFAULT = CMIT_FMT_MEDIUM, 18 CMIT_FMT_SHORT, 19 CMIT_FMT_FULL, 20 CMIT_FMT_FULLER, 21 CMIT_FMT_ONELINE, 22 CMIT_FMT_EMAIL, 23 CMIT_FMT_MBOXRD, 24 CMIT_FMT_USERFORMAT, 25 26 CMIT_FMT_UNSPECIFIED 27}; 28 29struct pretty_print_describe_status { 30 unsigned int max_invocations; 31}; 32 33struct pretty_print_context { 34 /* 35 * Callers should tweak these to change the behavior of pp_* functions. 36 */ 37 enum cmit_fmt fmt; 38 int abbrev; 39 char *after_subject; 40 int preserve_subject; 41 struct date_mode date_mode; 42 unsigned date_mode_explicit:1; 43 int expand_tabs_in_log; 44 int need_8bit_cte; 45 char *notes_message; 46 struct reflog_walk_info *reflog_info; 47 struct rev_info *rev; 48 const char *output_encoding; 49 struct string_list *mailmap; 50 enum git_colorbool color; 51 struct ident_split *from_ident; 52 unsigned encode_email_headers:1; 53 struct pretty_print_describe_status *describe_status; 54 55 /* 56 * Fields below here are manipulated internally by pp_* functions and 57 * should not be counted on by callers. 58 */ 59 struct string_list in_body_headers; 60 int graph_width; 61}; 62 63/* Check whether commit format is mail. */ 64static inline int cmit_fmt_is_mail(enum cmit_fmt fmt) 65{ 66 return (fmt == CMIT_FMT_EMAIL || fmt == CMIT_FMT_MBOXRD); 67} 68 69/* 70 * Examine the user-specified format given by "fmt" (or if NULL, the global one 71 * previously saved by get_commit_format()), and set flags based on which items 72 * the format will need when it is expanded. 73 */ 74struct userformat_want { 75 unsigned notes:1; 76 unsigned source:1; 77 unsigned decorate:1; 78}; 79void userformat_find_requirements(const char *fmt, struct userformat_want *w); 80 81/* 82 * Shortcut for invoking pretty_print_commit if we do not have any context. 83 * Context would be set empty except "fmt". 84 */ 85void pp_commit_easy(enum cmit_fmt fmt, const struct commit *commit, 86 struct strbuf *sb); 87 88/* 89 * Get information about user and date from "line", format it and 90 * put it into "sb". 91 * Format of "line" must be readable for split_ident_line function. 92 * The resulting format is "what: name <email> date". 93 */ 94void pp_user_info(struct pretty_print_context *pp, const char *what, 95 struct strbuf *sb, const char *line, 96 const char *encoding); 97 98/* 99 * Format subject line of commit message taken from "msg_p" and 100 * put it into "sb". 101 * First line of "msg_p" is also affected. 102 */ 103void pp_email_subject(struct pretty_print_context *pp, const char **msg_p, 104 struct strbuf *sb, const char *encoding, 105 int need_8bit_cte); 106 107/* 108 * Get current state of commit message from "msg_p" and continue formatting 109 * by adding indentation and '>' signs. Put result into "sb". 110 */ 111void pp_remainder(struct pretty_print_context *pp, const char **msg_p, 112 struct strbuf *sb, int indent); 113 114/* 115 * Create a text message about commit using given "format" and "context". 116 * Put the result to "sb". 117 * Please use this function for custom formats. 118 */ 119void repo_format_commit_message(struct repository *r, 120 const struct commit *commit, 121 const char *format, struct strbuf *sb, 122 const struct pretty_print_context *context); 123 124/* 125 * Parse given arguments from "arg", check it for correctness and 126 * fill struct rev_info. 127 */ 128void get_commit_format(const char *arg, struct rev_info *); 129 130/* 131 * Make a commit message with all rules from given "pp" 132 * and put it into "sb". 133 * Please use this function if you have a context (candidate for "pp"). 134 */ 135void pretty_print_commit(struct pretty_print_context *pp, 136 const struct commit *commit, 137 struct strbuf *sb); 138 139/* 140 * Change line breaks in "msg" to "line_separator" and put it into "sb". 141 * Return "msg" itself. 142 */ 143const char *format_subject(struct strbuf *sb, const char *msg, 144 const char *line_separator); 145 146/* Check if "cmit_fmt" will produce an empty output. */ 147int commit_format_is_empty(enum cmit_fmt); 148 149/* Make subject of commit message suitable for filename */ 150void format_sanitized_subject(struct strbuf *sb, const char *msg, size_t len); 151 152int has_non_ascii(const char *text); 153 154/* 155 * Set values of fields in "struct process_trailer_options" 156 * according to trailers arguments. 157 */ 158int format_set_trailers_options(struct process_trailer_options *opts, 159 struct string_list *filter_list, 160 struct strbuf *sepbuf, 161 struct strbuf *kvsepbuf, 162 const char **arg, 163 char **invalid_arg); 164 165/* 166 * Like show_date, but pull the timestamp and tz parameters from 167 * the ident_split. It will also sanity-check the values and produce 168 * a well-known sentinel date if they appear bogus. 169 */ 170const char *show_ident_date(const struct ident_split *id, 171 struct date_mode mode); 172 173 174#endif /* PRETTY_H */