Mercurial 如何为名称遵循模式的标记创建revset别名?

Mercurial 如何为名称遵循模式的标记创建revset别名?,mercurial,mercurial-revsets,Mercurial,Mercurial Revsets,在我的存储库中,我有version-1.2.3格式的标签。我想创建一个revset别名new(),其调用方式如下: hg日志-r'新(1.2.3,1.2.4)' …并扩展到: hg log-r'::version-1.2.4-::version-1.2.3'#1.2.4有什么新功能? 当我尝试这样做时: [revsetalias] new($1, $2) = ::version-$2 - ::version-$1 …Mercurial将其解释为从版本中减去版本$2(例如1.2.3),这不是

在我的存储库中,我有
version-1.2.3
格式的标签。我想创建一个revset别名
new()
,其调用方式如下:

hg日志-r'新(1.2.3,1.2.4)'
…并扩展到:

hg log-r'::version-1.2.4-::version-1.2.3'#1.2.4有什么新功能?
当我尝试这样做时:

[revsetalias]
new($1, $2) = ::version-$2 - ::version-$1
…Mercurial将其解释为从版本
中减去版本
$2
(例如
1.2.3
),这不是我的意图

我还尝试了使用
##
串联运算符:

new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1
但是
hg log-r'new(1.2.3,1.2.4)
给了我这个错误:

hg: parse error at 13: syntax error

我还尝试使用
祖先()
而不是
语法,但仍然出现语法错误。这可能吗?

旁注
$1::$2
将更具可读性,并且只提供DAG的相同部分
仅()
提供正确的结果在所有情况下,根据@lc2817答案中的讨论,DAG可能会失败)

我几乎成功地得到了答案,但在最后一步中遇到了一些麻烦(并且不知道如何调试):在[revsetalias]中聚合所有内容

前言

因为参数是标记,tag()谓词允许在参数中使用regexp,所以我将使用它们

Revset
tag(“re:version\”)
显示以“version-”开头的所有标记

硬编码数字为字符串的Revset显示单个变更集

hg log -r "tag('re:version\-1.7$')
changeset:   2912:454a12f024f3
(尾随的$是必需的,否则它将是所有1.7*标记)

我在revsetalias中的最佳尝试是
标记('re:version\-\$1$)
——没有错误,也没有输出:我无法获得完全展开的命令,以便查看所有处理和替换,并使用参数化的revsetalias检测我的错误


HTH

我测试了以下几项:

new($1, $2) = (::"version-" ## $2) - (::"version-" ## $1)
参考
$1::$2
不会给你同样的东西,它意味着
$1
$2
我更喜欢的等效转速设置是:

new($1, $2) = only("version-" ## $2, "version-" ## $1)
根据文档,它严格等同于您想要的:

"only(set, [set])"
      Changesets that are ancestors of the first set that are not ancestors of
      any other head in the repo. If a second set is specified, the result is
      ancestors of the first set that are not ancestors of the second set
      (i.e. ::<set1> - ::<set2>).
“仅限(设置,[set])”
不是第一个集合祖先的第一个集合的祖先的变更集
回购协议中的任何其他主体。如果指定了第二个集合,则结果为
第一组的祖先不是第二组的祖先
(即::-:)。

$1::$2
不是严格意义上的“修订之间”——它是介于$1和$2之间的DAG——我无法想象真正的用例,当它与only()不同时。远方祖先的悬空合并1美元?从同一个基础上考虑两个版本:HG-Log-R“E2B7D1::AEDC1A”不返回任何HG log -R“仅”(E2B7D1,AEDC1A)返回B和c@LazyBadger:$1不是$2的祖先。它们都是树干上的树枝$1::$2对我不起作用。好吧,好吧-你赢了。但我使用并测试了真实世界中的真实存储库,而不是大脑受损的“犀牛”课程教程中的用例workflow@LazyBadger每个版本都有一个单独的分支。