Line | Count | Source |
1 | | #ifndef PRETTY_H |
2 | | #define PRETTY_H |
3 | | |
4 | | #include "date.h" |
5 | | #include "string-list.h" |
6 | | #include "color.h" |
7 | | |
8 | | struct commit; |
9 | | struct repository; |
10 | | struct strbuf; |
11 | | struct process_trailer_options; |
12 | | |
13 | | /* Commit formats */ |
14 | | enum 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 | | |
29 | | struct pretty_print_describe_status { |
30 | | unsigned int max_invocations; |
31 | | }; |
32 | | |
33 | | struct 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. */ |
64 | | static inline int cmit_fmt_is_mail(enum cmit_fmt fmt) |
65 | 0 | { |
66 | 0 | return (fmt == CMIT_FMT_EMAIL || fmt == CMIT_FMT_MBOXRD); |
67 | 0 | } Unexecuted instantiation: object-name.c:cmit_fmt_is_mail Unexecuted instantiation: pretty.c:cmit_fmt_is_mail Unexecuted instantiation: read-cache.c:cmit_fmt_is_mail Unexecuted instantiation: reflog-walk.c:cmit_fmt_is_mail Unexecuted instantiation: files-backend.c:cmit_fmt_is_mail Unexecuted instantiation: remote.c:cmit_fmt_is_mail Unexecuted instantiation: revision.c:cmit_fmt_is_mail Unexecuted instantiation: shallow.c:cmit_fmt_is_mail Unexecuted instantiation: submodule.c:cmit_fmt_is_mail Unexecuted instantiation: wt-status.c:cmit_fmt_is_mail Unexecuted instantiation: attr.c:cmit_fmt_is_mail Unexecuted instantiation: bisect.c:cmit_fmt_is_mail Unexecuted instantiation: bundle.c:cmit_fmt_is_mail Unexecuted instantiation: combine-diff.c:cmit_fmt_is_mail Unexecuted instantiation: commit-reach.c:cmit_fmt_is_mail Unexecuted instantiation: commit.c:cmit_fmt_is_mail Unexecuted instantiation: diff-merges.c:cmit_fmt_is_mail Unexecuted instantiation: diff-lib.c:cmit_fmt_is_mail Unexecuted instantiation: diff.c:cmit_fmt_is_mail Unexecuted instantiation: diffcore-pickaxe.c:cmit_fmt_is_mail Unexecuted instantiation: graph.c:cmit_fmt_is_mail Unexecuted instantiation: grep.c:cmit_fmt_is_mail Unexecuted instantiation: line-log.c:cmit_fmt_is_mail Unexecuted instantiation: list-objects.c:cmit_fmt_is_mail Unexecuted instantiation: log-tree.c:cmit_fmt_is_mail Unexecuted instantiation: merge-ort.c:cmit_fmt_is_mail Unexecuted instantiation: notes-cache.c:cmit_fmt_is_mail Unexecuted instantiation: range-diff.c:cmit_fmt_is_mail Unexecuted instantiation: sequencer.c:cmit_fmt_is_mail Unexecuted instantiation: list-objects-filter.c:cmit_fmt_is_mail |
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 | | */ |
74 | | struct userformat_want { |
75 | | unsigned notes:1; |
76 | | unsigned source:1; |
77 | | unsigned decorate:1; |
78 | | }; |
79 | | void 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 | | */ |
85 | | void 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 | | */ |
94 | | void 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 | | */ |
103 | | void 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 | | */ |
111 | | void 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 | | */ |
119 | | void 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 | | */ |
128 | | void 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 | | */ |
135 | | void 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 | | */ |
143 | | const 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. */ |
147 | | int commit_format_is_empty(enum cmit_fmt); |
148 | | |
149 | | /* Make subject of commit message suitable for filename */ |
150 | | void format_sanitized_subject(struct strbuf *sb, const char *msg, size_t len); |
151 | | |
152 | | int has_non_ascii(const char *text); |
153 | | |
154 | | /* |
155 | | * Set values of fields in "struct process_trailer_options" |
156 | | * according to trailers arguments. |
157 | | */ |
158 | | int 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 | | */ |
170 | | const char *show_ident_date(const struct ident_split *id, |
171 | | struct date_mode mode); |
172 | | |
173 | | |
174 | | #endif /* PRETTY_H */ |