【问题标题】:Detect creating of branches or bookmarks in HG检测在 HG 中创建的分支或书签
【发布时间】:2014-09-08 12:16:13
【问题描述】:
【问题讨论】:
标签:
mercurial
mercurial-hook
【解决方案1】:
pushkey 和 prepushkey 挂钩可以检测书签的添加、删除和移动。
在 hgrc 中:
[hooks]
prepushkey=echo %HG_NAMESPACE% %HG_KEY% %HG_OLD% %HG_NEW%\n >> out.txt
HG_NAMESPACE 将包含“书签”,HG_KEY 将包含书签名称。
HG_OLD 将包含书签在操作之前的提交的哈希值。如果正在创建书签,则不会设置。
HG_NEW 将包含书签在操作之后的提交的哈希值。如果正在删除书签,则不会设置。
【解决方案2】:
- 书签
- 书签处理不需要提交
- 可以为历史中的任何更改集创建|修改书签,而不仅仅是当前的
- 书签可能是数据交换(拉|推)的结果,而不是本地用户的操作
- 所有可能的情况中只有一部分可以被钩子覆盖
- 分支机构
- 更改分支始终反映在提交中
- 变更集中的分支可能与父分支不同,这不仅是因为
hg branch(请参阅“合并分支”和“合并集”)的结果 - 而且我还没有适合这种情况的简单易用的解决方案
- 常用说明
- 您可以使用标准的
precommit 钩子(在提交之前执行并且可以启用|禁用提交)来测试提交中的不同条件或pretxncommit
- Mercurial 模板引擎具有分支关键字和书签,可在
hg log -T 中使用
- 在 pretxncommit 中,钩子提交已经存在,但尚未最终确定 - 这意味着您可以在任何 Mercurial 命令中使用
-r tip 和小费的父级操作提交的数据
钩子的脏骨架
hg log -T "{KEYWORD}\n" -r "tip + tip^" | ....
其中 KEYWORD 可能是 branch 或 bookmarks。日志的结果是两个字符串的输出,可以相同也可以不同(不确定书签,TBT!!),你必须比较(你想要并且可以)
PS:灵感来自EnsureCommitPolicy Wiki 和Mercurial pre commit hook topic 这里