From: Max Bernstein <max@xxxxxxxxxxxxxxxxx> The docs (for example, https://git-scm.com/docs/git-interpret-trailers) say that whitespace should be allowed inside tokens: > There can also be whitespaces inside the token and the value. The code since e4319562bc2834096fade432fd90c985b96476db does not allow that, so re-enable and add a test. Signed-off-by: Max Bernstein <max@xxxxxxxxxxxxxxxxx> --- trailer: allow spaces in tokens Changed since v1: * "Fixed" a format-patch test. I'm not sure if the new output is what everyone might expect for this particular case. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1309%2Ftekknolagi%2Fmaint-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1309/tekknolagi/maint-v2 Pull-Request: https://github.com/git/git/pull/1309 Range-diff vs v1: 1: 404a6d1b193 ! 1: 4d490851ac2 trailer: allow spaces in tokens @@ Commit message Signed-off-by: Max Bernstein <max@xxxxxxxxxxxxxxxxx> + ## t/t4014-format-patch.sh ## +@@ t/t4014-format-patch.sh: test_expect_success 'signoff: not really a signoff' ' + 4:Subject: [PATCH] subject + 8: + 9:I want to mention about Signed-off-by: here. +- 10: +- 11:Signed-off-by: C O Mitter <committer@xxxxxxxxxxx> ++ 10:Signed-off-by: C O Mitter <committer@xxxxxxxxxxx> + EOF + test_cmp expect actual + ' + ## t/t7513-interpret-trailers.sh ## @@ t/t7513-interpret-trailers.sh: test_expect_success 'only-trailers omits non-trailer in middle of block' ' test_cmp expected actual t/t4014-format-patch.sh | 3 +-- t/t7513-interpret-trailers.sh | 40 +++++++++++++++++++++++++++++++++++ trailer.c | 7 +----- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index fbec8ad2ef7..db95cb6ee66 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -1544,8 +1544,7 @@ test_expect_success 'signoff: not really a signoff' ' 4:Subject: [PATCH] subject 8: 9:I want to mention about Signed-off-by: here. - 10: - 11:Signed-off-by: C O Mitter <committer@xxxxxxxxxxx> + 10:Signed-off-by: C O Mitter <committer@xxxxxxxxxxx> EOF test_cmp expect actual ' diff --git a/t/t7513-interpret-trailers.sh b/t/t7513-interpret-trailers.sh index 97f10905d23..47bf83003ef 100755 --- a/t/t7513-interpret-trailers.sh +++ b/t/t7513-interpret-trailers.sh @@ -1481,6 +1481,46 @@ test_expect_success 'only-trailers omits non-trailer in middle of block' ' test_cmp expected actual ' +test_expect_success 'supports spaces inside token' ' + git config --unset trailer.sign.command && + cat >expected <<-\EOF && + Signed-off-by: nobody <nobody@nowhere> + some other trailer: a value + Signed-off-by: somebody <somebody@somewhere> + EOF + echo "wrote to expected" 1>&2 && + git interpret-trailers --only-trailers >actual <<-\EOF && + subject + + it is important that the trailers below are signed-off-by + so that they meet the "25% trailers Git knows about" heuristic + + Signed-off-by: nobody <nobody@nowhere> + some other trailer: a value + Signed-off-by: somebody <somebody@somewhere> + EOF + test_cmp expected actual +' + +test_expect_success 'does not support space at beginning of token' ' + cat >expected <<-\EOF && + Signed-off-by: nobody <nobody@nowhere> not a trailer: thing + Signed-off-by: somebody <somebody@somewhere> + EOF + echo "wrote to expected" 1>&2 && + git interpret-trailers --only-trailers --unfold >actual <<-\EOF && + subject + + it is important that the trailers below are signed-off-by + so that they meet the "25% trailers Git knows about" heuristic + + Signed-off-by: nobody <nobody@nowhere> + not a trailer: thing + Signed-off-by: somebody <somebody@somewhere> + EOF + test_cmp expected actual +' + test_expect_success 'only input' ' git config trailer.sign.command "echo config-value" && cat >expected <<-\EOF && diff --git a/trailer.c b/trailer.c index d419c20735e..d02a9154512 100644 --- a/trailer.c +++ b/trailer.c @@ -618,17 +618,12 @@ static int token_matches_item(const char *tok, struct arg_item *item, size_t tok */ static ssize_t find_separator(const char *line, const char *separators) { - int whitespace_found = 0; const char *c; for (c = line; *c; c++) { if (strchr(separators, *c)) return c - line; - if (!whitespace_found && (isalnum(*c) || *c == '-')) + if (isalnum(*c) || *c == '-' || (c != line && (*c == ' ' || *c == '\t'))) continue; - if (c != line && (*c == ' ' || *c == '\t')) { - whitespace_found = 1; - continue; - } break; } return -1; base-commit: ad60dddad72dfb8367bd695028b5b8dc6c33661b -- gitgitgadget