gpt4 book ai didi

windows - 如何获得确认所有未提交更改的工作目录哈希?

转载 作者:可可西里 更新时间:2023-11-01 13:59:30 25 4
gpt4 key购买 nike

我的软件构建过程的一部分包括将工作目录父目录的哈希值转换为 C++ 字符串,以便包含在“版本”输出中。这是通过使用 hg identify -i 获取全局修订 ID,并将此输出复制到 .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 识别新文件和删除文件?

理想情况下,我希望不必使用扩展程序,但会考虑将它们作为一种选择。


更新

根据 Oben Sonne 关于使用 hg sthg 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 的输出中有任何内容,在这种情况下它是 +。我已经做了一些测试,它似乎有效。

是否有另一种解决方案可以减少批处理文件中的麻烦?或者这是我能得到的最好的?

最佳答案

如何简单地检查 hg st 的输出是否为空?如果没有,请将 + 自己添加到版本中(如果 hg id 尚未给出)。

更新:为了防止双重 + 问题,您可以运行 hg id -r .,它永远不会给您尾随 +

关于windows - 如何获得确认所有未提交更改的工作目录哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com