about summary refs log tree commit diff
path: root/third_party/git/trailer.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/trailer.h')
-rw-r--r--third_party/git/trailer.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/third_party/git/trailer.h b/third_party/git/trailer.h
new file mode 100644
index 0000000000..203acf4ee1
--- /dev/null
+++ b/third_party/git/trailer.h
@@ -0,0 +1,106 @@
+#ifndef TRAILER_H
+#define TRAILER_H
+
+#include "list.h"
+
+struct strbuf;
+
+enum trailer_where {
+	WHERE_DEFAULT,
+	WHERE_END,
+	WHERE_AFTER,
+	WHERE_BEFORE,
+	WHERE_START
+};
+enum trailer_if_exists {
+	EXISTS_DEFAULT,
+	EXISTS_ADD_IF_DIFFERENT_NEIGHBOR,
+	EXISTS_ADD_IF_DIFFERENT,
+	EXISTS_ADD,
+	EXISTS_REPLACE,
+	EXISTS_DO_NOTHING
+};
+enum trailer_if_missing {
+	MISSING_DEFAULT,
+	MISSING_ADD,
+	MISSING_DO_NOTHING
+};
+
+int trailer_set_where(enum trailer_where *item, const char *value);
+int trailer_set_if_exists(enum trailer_if_exists *item, const char *value);
+int trailer_set_if_missing(enum trailer_if_missing *item, const char *value);
+
+struct trailer_info {
+	/*
+	 * True if there is a blank line before the location pointed to by
+	 * trailer_start.
+	 */
+	int blank_line_before_trailer;
+
+	/*
+	 * Pointers to the start and end of the trailer block found. If there
+	 * is no trailer block found, these 2 pointers point to the end of the
+	 * input string.
+	 */
+	const char *trailer_start, *trailer_end;
+
+	/*
+	 * Array of trailers found.
+	 */
+	char **trailers;
+	size_t trailer_nr;
+};
+
+/*
+ * A list that represents newly-added trailers, such as those provided
+ * with the --trailer command line option of git-interpret-trailers.
+ */
+struct new_trailer_item {
+	struct list_head list;
+
+	const char *text;
+
+	enum trailer_where where;
+	enum trailer_if_exists if_exists;
+	enum trailer_if_missing if_missing;
+};
+
+struct process_trailer_options {
+	int in_place;
+	int trim_empty;
+	int only_trailers;
+	int only_input;
+	int unfold;
+	int no_divider;
+	int value_only;
+	const struct strbuf *separator;
+	int (*filter)(const struct strbuf *, void *);
+	void *filter_data;
+};
+
+#define PROCESS_TRAILER_OPTIONS_INIT {0}
+
+void process_trailers(const char *file,
+		      const struct process_trailer_options *opts,
+		      struct list_head *new_trailer_head);
+
+void trailer_info_get(struct trailer_info *info, const char *str,
+		      const struct process_trailer_options *opts);
+
+void trailer_info_release(struct trailer_info *info);
+
+/*
+ * Format the trailers from the commit msg "msg" into the strbuf "out".
+ * Note two caveats about "opts":
+ *
+ *   - this is primarily a helper for pretty.c, and not
+ *     all of the flags are supported.
+ *
+ *   - this differs from process_trailers slightly in that we always format
+ *     only the trailer block itself, even if the "only_trailers" option is not
+ *     set.
+ */
+void format_trailers_from_commit(struct strbuf *out, const char *msg,
+				 const struct process_trailer_options *opts);
+
+#endif /* TRAILER_H */