带有空行的Git多行trailer(这是一个bug吗?)

n53p2ov0  于 2023-03-21  发布在  Git
关注(0)|答案(1)|浏览(98)

因此,git trailers(https://git-scm.com/docs/git-interpret-trailers)通过“折叠”来支持多行trailer,这意味着后续行以一个空格开始,以表示它们仍然属于当前trailer。
文档中写道:
当阅读预告片时,在标记、分隔符和值之后可以有空格。标记和值内部也可以有空格。值可以被拆分为多行,每一行都以空格开头,就像RFC 822中的“折叠”一样。
我的问题是,如果这样的多行结尾包含空行,git interpret-trailers --parse就会失败。
我试图添加一个包含一个或多个空行的trailer。这些空行是正确折叠的,但是,它们包含一个空格(所以这相当于添加到提交头的PGP签名,其中也包含一个空行,但是折叠)
但是如果我这样做,git interpret-trailers --parse就什么也不输出。

$ echo "Test" > test.txt
$ git interpret-trailers --where end --if-exists addIfDifferent --trailer "SingleLineTrailer: This is a single line trailer" --in-place test.txt
$ git interpret-trailers --where end --if-exists addIfDifferent --trailer "MultiLineTrailer: This is"$'\n a folded multi-line\n trailer' --in-place test.txt

test.txt的内容现在是:

$ cat test.txt
Test

SingleLineTrailer: This is a single line trailer
MultiLineTrailer: This is
 a folded multi-line
 trailer

并且解析工作正常(它将多行解析为一行,这是意料之外的,但至少做了一些事情):

$ git interpret-trailers --parse test.txt
SingleLineTrailer: This is a single line trailer
MultiLineTrailer: This is a folded multi-line trailer

然而,现在我添加了一个包含一个自由行的多行预告片(但是使用空格正确折叠):

$ git interpret-trailers --where end --if-exists addIfDifferent --trailer "MultiLineTrailer: This is"$'\n a folded multi-line\n trailer which\n \n contains an\n empty line' --in-place test.txt

如所预期的,其导致以下内容:

$ cat test.txt
Test

SingleLineTrailer: This is a single line trailer
MultiLineTrailer: This is
 a folded multi-line
 trailer
MultiLineTrailer: This is
 a folded multi-line
 trailer which

 contains an
 empty line

但是,运行git interpret-trailers --parse不会导致任何输出(但退出代码为0):

$ git interpret-trailers --parse test.txt
$ echo $?
0

git版本为git version 2.30.0.windows.2
那么,这是git中的一个bug,还是这种行为是预期的?

4smxwvx5

4smxwvx51#

这在Git邮件列表线程中被标记为“不会修复”/“不是bug”。

上下文

OP最终向Git邮件列表提交了一个bug report
一个quick patch被提出作为一个修复的问题.但随后滨野pointed out,提出的修复增加了复杂性.
Christian Couder不想放松当前的blank-line-before-trailers规则:
所以我觉得预告片不应该出现空行,如果出现了,就意味着预告片应该从最后一个空行开始,这可能已经放松了一点。
帖子中的两封终端邮件之一是Hamano的,并间接得出结论,这不是一个bug:
下一步是找出该段中对当前行为的描述中是否有任何不清楚的地方,这些地方可能导致报告的“bug”被证明是非bug。

相关问题