trailer: reuse ignore_non_trailer() to ignore conflict lines
Make sure we look for trailers before any conflict line by reusing the ignore_non_trailer() function. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
8c38458923
commit
61cfef4ca4
|
@ -232,6 +232,8 @@ test_expect_success 'with message that has comments' '
|
||||||
|
|
||||||
Reviewed-by: Johan
|
Reviewed-by: Johan
|
||||||
Cc: Peff
|
Cc: Peff
|
||||||
|
# last comment
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
cat basic_patch >>expected &&
|
cat basic_patch >>expected &&
|
||||||
git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
|
git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
|
||||||
|
|
32
trailer.c
32
trailer.c
|
@ -2,6 +2,7 @@
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
|
#include "commit.h"
|
||||||
#include "trailer.h"
|
#include "trailer.h"
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, 2014 Christian Couder <chriscool@tuxfamily.org>
|
* Copyright (c) 2013, 2014 Christian Couder <chriscool@tuxfamily.org>
|
||||||
|
@ -769,6 +770,22 @@ static int find_trailer_start(struct strbuf **lines, int count)
|
||||||
return only_spaces ? count : 0;
|
return only_spaces ? count : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get the index of the end of the trailers */
|
||||||
|
static int find_trailer_end(struct strbuf **lines, int patch_start)
|
||||||
|
{
|
||||||
|
struct strbuf sb = STRBUF_INIT;
|
||||||
|
int i, ignore_bytes;
|
||||||
|
|
||||||
|
for (i = 0; i < patch_start; i++)
|
||||||
|
strbuf_addbuf(&sb, lines[i]);
|
||||||
|
ignore_bytes = ignore_non_trailer(&sb);
|
||||||
|
strbuf_release(&sb);
|
||||||
|
for (i = patch_start - 1; i >= 0 && ignore_bytes > 0; i--)
|
||||||
|
ignore_bytes -= lines[i]->len;
|
||||||
|
|
||||||
|
return i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int has_blank_line_before(struct strbuf **lines, int start)
|
static int has_blank_line_before(struct strbuf **lines, int start)
|
||||||
{
|
{
|
||||||
for (;start >= 0; start--) {
|
for (;start >= 0; start--) {
|
||||||
|
@ -791,14 +808,15 @@ static int process_input_file(struct strbuf **lines,
|
||||||
struct trailer_item **in_tok_last)
|
struct trailer_item **in_tok_last)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int patch_start, trailer_start, i;
|
int patch_start, trailer_start, trailer_end, i;
|
||||||
|
|
||||||
/* Get the line count */
|
/* Get the line count */
|
||||||
while (lines[count])
|
while (lines[count])
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
patch_start = find_patch_start(lines, count);
|
patch_start = find_patch_start(lines, count);
|
||||||
trailer_start = find_trailer_start(lines, patch_start);
|
trailer_end = find_trailer_end(lines, patch_start);
|
||||||
|
trailer_start = find_trailer_start(lines, trailer_end);
|
||||||
|
|
||||||
/* Print lines before the trailers as is */
|
/* Print lines before the trailers as is */
|
||||||
print_lines(lines, 0, trailer_start);
|
print_lines(lines, 0, trailer_start);
|
||||||
|
@ -807,14 +825,14 @@ static int process_input_file(struct strbuf **lines,
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
/* Parse trailer lines */
|
/* Parse trailer lines */
|
||||||
for (i = trailer_start; i < patch_start; i++) {
|
for (i = trailer_start; i < trailer_end; i++) {
|
||||||
if (lines[i]->buf[0] != comment_line_char) {
|
if (lines[i]->buf[0] != comment_line_char) {
|
||||||
struct trailer_item *new = create_trailer_item(lines[i]->buf);
|
struct trailer_item *new = create_trailer_item(lines[i]->buf);
|
||||||
add_trailer_item(in_tok_first, in_tok_last, new);
|
add_trailer_item(in_tok_first, in_tok_last, new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return patch_start;
|
return trailer_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_all(struct trailer_item **first)
|
static void free_all(struct trailer_item **first)
|
||||||
|
@ -831,7 +849,7 @@ void process_trailers(const char *file, int trim_empty, struct string_list *trai
|
||||||
struct trailer_item *in_tok_last = NULL;
|
struct trailer_item *in_tok_last = NULL;
|
||||||
struct trailer_item *arg_tok_first;
|
struct trailer_item *arg_tok_first;
|
||||||
struct strbuf **lines;
|
struct strbuf **lines;
|
||||||
int patch_start;
|
int trailer_end;
|
||||||
|
|
||||||
/* Default config must be setup first */
|
/* Default config must be setup first */
|
||||||
git_config(git_trailer_default_config, NULL);
|
git_config(git_trailer_default_config, NULL);
|
||||||
|
@ -840,7 +858,7 @@ void process_trailers(const char *file, int trim_empty, struct string_list *trai
|
||||||
lines = read_input_file(file);
|
lines = read_input_file(file);
|
||||||
|
|
||||||
/* Print the lines before the trailers */
|
/* Print the lines before the trailers */
|
||||||
patch_start = process_input_file(lines, &in_tok_first, &in_tok_last);
|
trailer_end = process_input_file(lines, &in_tok_first, &in_tok_last);
|
||||||
|
|
||||||
arg_tok_first = process_command_line_args(trailers);
|
arg_tok_first = process_command_line_args(trailers);
|
||||||
|
|
||||||
|
@ -851,7 +869,7 @@ void process_trailers(const char *file, int trim_empty, struct string_list *trai
|
||||||
free_all(&in_tok_first);
|
free_all(&in_tok_first);
|
||||||
|
|
||||||
/* Print the lines after the trailers as is */
|
/* Print the lines after the trailers as is */
|
||||||
print_lines(lines, patch_start, INT_MAX);
|
print_lines(lines, trailer_end, INT_MAX);
|
||||||
|
|
||||||
strbuf_list_free(lines);
|
strbuf_list_free(lines);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue