Добавить пробел между трейлером и% s, только если трейлер существует - PullRequest
1 голос
/ 14 октября 2019

Я пытаюсь создать формат, чтобы показать что-то вроде этого:

[сокращенный хэш] [номер-проблемы] [тема]

Номер проблемы - это трейлер, который имеетформат "Issue: [Issue-Key]". Но иногда сообщение о коммите не имеет этой информации.

Я написал следующий формат:

git log --format='%h %(trailers:key=Issue,valueonly,separator=%x2C) %s'

В тех случаях, когда номер проблемы отсутствует при фиксациисообщения, этот формат добавляет два пробела между сокращением хеша и темой.

Как я могу поместить этот формат таким образом, чтобы пробел между темой и номером проблемы возникал только при наличии номера проблемы?

Вот пример моего журнала в этом формате:

Formated log

А вот оригинальные сообщения о коммитах:

Original commit messages

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Вы можете добиться такого же эффекта, поставив пробел перед трейлером, если и только если трейлер присутствует, немного дальше в разделе PRETTY FORMATS (этот заголовок действительно нуждается в восклицательном знаке, нет?), Есть

Если после% заполнителя добавить знак «+» (плюс), прямой перевод вставляется непосредственно перед расширением, если и только если заполнитель расширяется до непустой строки.

Если вы добавите - (знак минус) после% заполнителя, все последовательные переводы строк, непосредственно предшествующие расширению, будут удалены тогда и только тогда, когда заполнитель развернется до пустой строки.

Если добавить (пробел) после% заполнителя, пробел вставляется непосредственно перед раскрытием, если и только если заполнитель расширяется до непустой строки.

, поэтому используйте, например,

pretty=format:'%h% (trailers:key=Issue,valueonly,separator=%x2C)% s'

помещать разделители пробелов только перед полями, в которых есть что-то, что стоит разделять.

1 голос
/ 14 октября 2019

Вы можете передать вывод в sed, чтобы удалить лишнее пространство

git log --format='%h %(trailers:key=Issue,valueonly,separator=%x2C) %s' | sed -E 's/^([a-f0-9]{10}  /\1 /'


-E: Regular expression  
^: Start of line  
[a-f0-9]{10}: match up to first 10 hex numbers  
\1 :Paste hex match from beginning of line  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...