Многострочный трейлер Git с пустыми строками (это ошибка?)

#git

#git

Вопрос:

Итак, трейлеры git (https://git-scm.com/docs/git-interpret-trailers ) поддерживает многострочные прицепы, «сворачивая» их, что означает, что последующие строки начинаются с одного пробела, чтобы указать, что они все еще принадлежат текущему прицепу.

В документации говорится:

При чтении трейлеров после токена, разделителя и значения могут быть пробелы. Внутри токена и значения также могут быть пробелы. Значение может быть разделено на несколько строк, причем каждая последующая строка начинается с пробела, как «сворачивание» в RFC 822.

Моя проблема в том, что git interpret-trailers --parse сбой происходит, если такой многострочный трейлер содержит пустую строку.

Я пытаюсь добавить трейлер, содержащий одну или несколько пустых строк. Однако эти пустые строки правильно свернуты, они содержат один пробел (так что это эквивалентно подписи 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"

содержимое 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"

что приводит, как и ожидалось, к следующему содержанию:

 $ 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 или такое поведение ожидается?


Комментарии:

1. Это хороший вопрос. В списке рассылки Git было много дискуссий о коде трейлера; вероятно, стоит поискать его, чтобы узнать, есть ли претензии в ту или иную сторону.

2. С git v2.35 это также не работает.

n a folded multi-linen trailer' --in-place test.txt
содержимое test.txt это сейчас:


и синтаксический анализ работает (он анализирует несколько строк в одну строку, что неожиданно, но, по крайней мере, что-то делает):


Однако теперь я добавляю многострочный трейлер, который содержит свободную строку (однако правильно сложенную с использованием пробела).:


что приводит, как и ожидалось, к следующему содержанию:


однако выполнение git interpret-trailers --parse не приводит к выводу (но код выхода равен 0):


версия git git version 2.30.0.windows.2

Итак, это ошибка в git или такое поведение ожидается?

Комментарии:

1. Это хороший вопрос. В списке рассылки Git было много дискуссий о коде трейлера; вероятно, стоит поискать его, чтобы узнать, есть ли претензии в ту или иную сторону.

2. С git v2.35 это также не работает.

n a folded multi-linen trailer whichn n contains ann empty line' --in-place test.txt

что приводит, как и ожидалось, к следующему содержанию:


однако выполнение git interpret-trailers --parse не приводит к выводу (но код выхода равен 0):


версия git git version 2.30.0.windows.2

Итак, это ошибка в git или такое поведение ожидается?

Комментарии:

1. Это хороший вопрос. В списке рассылки Git было много дискуссий о коде трейлера; вероятно, стоит поискать его, чтобы узнать, есть ли претензии в ту или иную сторону.

2. С git v2.35 это также не работает.

n a folded multi-linen trailer’ —in-place test.txt

содержимое test.txt это сейчас:


и синтаксический анализ работает (он анализирует несколько строк в одну строку, что неожиданно, но, по крайней мере, что-то делает):


Однако теперь я добавляю многострочный трейлер, который содержит свободную строку (однако правильно сложенную с использованием пробела).:


что приводит, как и ожидалось, к следующему содержанию:


однако выполнение git interpret-trailers --parse не приводит к выводу (но код выхода равен 0):


версия git git version 2.30.0.windows.2

Итак, это ошибка в git или такое поведение ожидается?

Комментарии:

1. Это хороший вопрос. В списке рассылки Git было много дискуссий о коде трейлера; вероятно, стоит поискать его, чтобы узнать, есть ли претензии в ту или иную сторону.

2. С git v2.35 это также не работает.