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