Захватить дату принятия git (--format =% ci) в командном файле Windows? - PullRequest
0 голосов
/ 11 октября 2019

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

Пока что работает примерно так:

set file="%~dp0git_sha1.h"
echo #ifndef git_sha1H > %file%
echo #define git_sha1H >> %file%

set cmd=git rev-parse HEAD
set git_sha1=#define GIT_SHA1
for /f %%i in ('%cmd%') do set "git_sha1=%git_sha1% "%%i""
echo %git_sha1% >> %file%

echo #endif >> %file%

Теперь я пытаюсь добавить дату фиксации HEAD, которая будет сделана с: git show -s --format=%ci HEAD

Однако при дублировании средней секции для размещения этой команды я сталкиваюсь со всевозможными ошибками, такими как fatal: ambiguous argument 'ci': unknown revision or path not in the working tree, unknown pretty format 'ci' и т. Д.

Я сузил это до неэкранированных символов в цикле for ипридумал что-то вроде этого

set cmd2=git show -s --format^=%%ci HEAD
set git_date=#define GIT_DATE
for /f %%i in ('%cmd2%') do set "git_date=%git_date% "%%i""
echo %git_date% >> %file%

Тем не менее, этот STILL дает мне fatal: ambiguous argument '%ci: unknown revision or path not in the working tree.

Я прочитал это, поскольку экранированный ^= неправильно передается в git, так что он видит--format %ci HEAD, а не --format=%ci HEAD, но я не совсем уверен, где я здесь, особенно когда отдельная строка отладки echo %cmd2% показывает правильную команду.

Есть идеи?

1 Ответ

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

Вот как я бы посоветовал вам написать свой код, правильно использовать двойные кавычки и записать в ваш файл .h:

@Echo Off
Set "file=%~dp0git_sha1.h"
Set "cmd=git rev-parse HEAD"
Set "git_sha1=#define GIT_SHA1"
Set "cmd2=git show -s --format=%%ci HEAD"
Set "git_date=#define GIT_DATE"
For /F "Delims=" %%A In ('%cmd%')Do Set "git_sha1=%git_sha1% "%%A""
For /F "Delims=" %%A In ('%cmd2%')Do Set "git_date=%git_date% "%%A""

(Echo #ifndef git_sha1H
    Echo #define git_sha1H
    Echo %git_sha1%
    Echo %git_date%
    Echo #endif)>"%file%"

Обратите внимание, что я только что добавил ваш %cmd2%вывод до #endif в вашем выходном файле.

...