summaryrefslogtreecommitdiff
path: root/commit.c
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2014-11-09 09:23:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-11-10 17:59:19 (GMT)
commit8c3845892363abf3fb5cf2fe61bc455554f50c68 (patch)
tree332ca210e57e116d5fb86daab3ca824de3968fc7 /commit.c
parent216d29ef257e48f95bc14765d5da17e7854a3109 (diff)
downloadgit-8c3845892363abf3fb5cf2fe61bc455554f50c68.zip
git-8c3845892363abf3fb5cf2fe61bc455554f50c68.tar.gz
git-8c3845892363abf3fb5cf2fe61bc455554f50c68.tar.bz2
commit: make ignore_non_trailer() non static
Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/commit.c b/commit.c
index ae7f2b1..07d2290 100644
--- a/commit.c
+++ b/commit.c
@@ -1660,3 +1660,49 @@ void print_commit_list(struct commit_list *list,
printf(format, sha1_to_hex(list->item->object.sha1));
}
}
+
+/*
+ * Inspect sb and determine the true "end" of the log message, in
+ * order to find where to put a new Signed-off-by: line. Ignored are
+ * trailing comment lines and blank lines, and also the traditional
+ * "Conflicts:" block that is not commented out, so that we can use
+ * "git commit -s --amend" on an existing commit that forgot to remove
+ * it.
+ *
+ * Returns the number of bytes from the tail to ignore, to be fed as
+ * the second parameter to append_signoff().
+ */
+int ignore_non_trailer(struct strbuf *sb)
+{
+ int boc = 0;
+ int bol = 0;
+ int in_old_conflicts_block = 0;
+
+ while (bol < sb->len) {
+ char *next_line;
+
+ if (!(next_line = memchr(sb->buf + bol, '\n', sb->len - bol)))
+ next_line = sb->buf + sb->len;
+ else
+ next_line++;
+
+ if (sb->buf[bol] == comment_line_char || sb->buf[bol] == '\n') {
+ /* is this the first of the run of comments? */
+ if (!boc)
+ boc = bol;
+ /* otherwise, it is just continuing */
+ } else if (starts_with(sb->buf + bol, "Conflicts:\n")) {
+ in_old_conflicts_block = 1;
+ if (!boc)
+ boc = bol;
+ } else if (in_old_conflicts_block && sb->buf[bol] == '\t') {
+ ; /* a pathname in the conflicts block */
+ } else if (boc) {
+ /* the previous was not trailing comment */
+ boc = 0;
+ in_old_conflicts_block = 0;
+ }
+ bol = next_line - sb->buf;
+ }
+ return boc ? sb->len - boc : 0;
+}