1#ifndef TRAILER_H 2#define TRAILER_H 3 4#include "list.h" 5 6struct strbuf; 7 8enum trailer_where { 9 WHERE_DEFAULT, 10 WHERE_END, 11 WHERE_AFTER, 12 WHERE_BEFORE, 13 WHERE_START 14}; 15enum trailer_if_exists { 16 EXISTS_DEFAULT, 17 EXISTS_ADD_IF_DIFFERENT_NEIGHBOR, 18 EXISTS_ADD_IF_DIFFERENT, 19 EXISTS_ADD, 20 EXISTS_REPLACE, 21 EXISTS_DO_NOTHING 22}; 23enum trailer_if_missing { 24 MISSING_DEFAULT, 25 MISSING_ADD, 26 MISSING_DO_NOTHING 27}; 28 29int trailer_set_where(enum trailer_where *item, const char *value); 30int trailer_set_if_exists(enum trailer_if_exists *item, const char *value); 31int trailer_set_if_missing(enum trailer_if_missing *item, const char *value); 32 33struct trailer_info { 34 /* 35 * True if there is a blank line before the location pointed to by 36 * trailer_start. 37 */ 38 int blank_line_before_trailer; 39 40 /* 41 * Pointers to the start and end of the trailer block found. If there 42 * is no trailer block found, these 2 pointers point to the end of the 43 * input string. 44 */ 45 const char *trailer_start, *trailer_end; 46 47 /* 48 * Array of trailers found. 49 */ 50 char **trailers; 51 size_t trailer_nr; 52}; 53 54/* 55 * A list that represents newly-added trailers, such as those provided 56 * with the --trailer command line option of git-interpret-trailers. 57 */ 58struct new_trailer_item { 59 struct list_head list; 60 61 const char *text; 62 63 enum trailer_where where; 64 enum trailer_if_exists if_exists; 65 enum trailer_if_missing if_missing; 66}; 67 68struct process_trailer_options { 69 int in_place; 70 int trim_empty; 71 int only_trailers; 72 int only_input; 73 int unfold; 74 int no_divider; 75}; 76 77#define PROCESS_TRAILER_OPTIONS_INIT {0} 78 79void process_trailers(const char *file, 80 const struct process_trailer_options *opts, 81 struct list_head *new_trailer_head); 82 83void trailer_info_get(struct trailer_info *info, const char *str, 84 const struct process_trailer_options *opts); 85 86void trailer_info_release(struct trailer_info *info); 87 88/* 89 * Format the trailers from the commit msg "msg" into the strbuf "out". 90 * Note two caveats about "opts": 91 * 92 * - this is primarily a helper for pretty.c, and not 93 * all of the flags are supported. 94 * 95 * - this differs from process_trailers slightly in that we always format 96 * only the trailer block itself, even if the "only_trailers" option is not 97 * set. 98 */ 99void format_trailers_from_commit(struct strbuf *out, const char *msg, 100 const struct process_trailer_options *opts); 101 102#endif /* TRAILER_H */