Часть моего процесса сборки программного обеспечения включает получение хэша родительского рабочего каталога в строку C ++ для включения в вывод "version". Это делается с помощью hg identify -i
, чтобы получить глобальный идентификатор ревизии, и копированием этого вывода в файл .h для включения. Я делаю это в пакетном файле Windows:
setlocal enabledelayedexpansion
for /f "tokens=1 delims=;=" %%a in ('hg identify -i') do (
echo const std::string revision^(_T^("%%a"^)^); > rev.h
)
Что выведет что-то вроде этого в файл:
const std::string revision(_T("3b746fd492c6"));
Если в рабочем каталоге есть незафиксированные изменения, к хешу добавляется +
, что делает строку "3b746fd492c6+"
. Это позволяет мне легко проверить, является ли контролируемая мной версия программного обеспечения управляемой или нет - если строка содержит +
, то программное обеспечение не воспроизводится из репозитория.
Однако hg identify
добавляет +
для обозначения незафиксированных изменений, но не распознает неотслеживаемые файлы. Если я зафиксирую все изменения, но забуду добавить этот важный класс «делать вещи», hg identify
не будет указывать на это.
Итак, мой вопрос: как я могу получить необходимую функциональность?
Как я могу имитировать hg identify
распознавание новых и удаленных файлов?
В идеале я бы не хотел использовать расширения, но рассмотрю их как опцию.
Обновление
Исходя из предложения Обена Сонна об использовании комбинации hg st
и hg id -r .
, я пришел к следующему пакетному файлу, который дает довольно хороший результат:
@echo off
set REPOMODS=
for /F %%a IN ('hg st -n') DO set REPOMODS=+
for /f "tokens=1 delims=;=" %%a in ('hg identify -i -r .') do (
echo const std::string revision^(_T^("%%a%REPOMODS%"^)^); > rev.h
)
%REPOMODS%
пусто, если на выходе hg st
ничего нет, в этом случае это +
. Я сделал несколько тестов, и это похоже на работу.
Есть ли другое решение, которое требует меньше ошибок в пакетных файлах? Или это лучшее, что я получу?