5255b676de24004cd93f0d6a36d5a1b22fad997f
   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        int (*filter)(const struct strbuf *, void *);
  76        void *filter_data;
  77};
  78
  79#define PROCESS_TRAILER_OPTIONS_INIT {0}
  80
  81void process_trailers(const char *file,
  82                      const struct process_trailer_options *opts,
  83                      struct list_head *new_trailer_head);
  84
  85void trailer_info_get(struct trailer_info *info, const char *str,
  86                      const struct process_trailer_options *opts);
  87
  88void trailer_info_release(struct trailer_info *info);
  89
  90/*
  91 * Format the trailers from the commit msg "msg" into the strbuf "out".
  92 * Note two caveats about "opts":
  93 *
  94 *   - this is primarily a helper for pretty.c, and not
  95 *     all of the flags are supported.
  96 *
  97 *   - this differs from process_trailers slightly in that we always format
  98 *     only the trailer block itself, even if the "only_trailers" option is not
  99 *     set.
 100 */
 101void format_trailers_from_commit(struct strbuf *out, const char *msg,
 102                                 const struct process_trailer_options *opts);
 103
 104#endif /* TRAILER_H */