我目前正在将包装添加到Mercurial中维护的内容中。目前,该版本在Makefile中定义。我想改变它,以便我可以构建每日软件包或正确版本化的软件包。
Git提供了一个用途"描述"函数,可以为您提供最接近标记的构建和当前版本的描述。例如,如果我在内核中运行它:
git describe HEAD
GIT返回:
v3.0-rc7-68-g51414d4
告诉我修改时间晚于v3.0-rc7,git委托为51414d4
我可以在Mercurial中做些类似的事情吗?
答案 0 :(得分:12)
也许是这样的?
hg log -r . --template '{latesttag}-{latesttagdistance}-{node|short}\n'
当然,您应该使用AliasExtension为其创建别名。
但请注意,与“git describe”不同,此命令将始终显示“latesttagdistance”和“node | short”部分,而不是在latesttagdistance为0时省略它们。
答案 1 :(得分:6)
这是git describe
:
hg log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}"
{sub(...)}
功能可确保标记为v0.1.0
的工作副本显示为v0.1.0
而非v0.1.0-0-m123456789abc
。
请注意,哈希之前的m
用于 m ,这与git describe
使用g
g 它。
为方便起见,请将以下内容添加到~/.hgrc
:
[alias]
describe = log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}"
然后只需输入hg describe
。
如果您想模仿git describe --dirty
,事情会变得更加混乱 - 但您仍然可以将其全部隐藏在hg别名中:
[alias]
describe = !
dirtymark=;
case " $1 " in " --dirty ") dirtymark=-dirty; ;; esac;
echo $($HG log -r . --template "{latesttag}-{latesttagdistance}-m")$($HG id -i) |
sed -r -e "s/\+\$/${dirtymark}/" -e 's/-0-m[[:xdigit:]]+//'
现在运行hg describe --dirty
会生成如下字符串:
v0.1.0
v0.1.0-dirty
v0.1.0-1-mf6caaa650816
v0.1.0-1-mf6caaa650816-dirty
省略--dirty
选项意味着即使工作副本包含未提交的更改,您也永远不会获得{2}和(4)之类的-dirty
后缀。