【问题标题】:How do I prevent a commit using pre-commit and hg incoming?如何使用预提交和 hg 传入来防止提交?
【发布时间】:2014-08-07 15:47:09
【问题描述】:

有时,我团队中的开发人员在提交自己的变更集之前忘记拉入其他开发人员的变更集(诚然,我也这样做)。对于为期一周的项目,新提交跳过的树中可能有数十个更改。当尝试推送时,hg 使用新的远程头消息中止,然后它们拉入并合并所有这些新提交。我正在寻找的是一种简单的方法来测试在某人提交之前是否有任何新更改以及是否有防止提交发生。理想情况下,会有一条明确的消息说明提交失败的原因。

这对于一个钩子来说似乎应该很容易完成,但是预提交钩子将继续状态码为 0,并且当没有更改时,hg 传入将返回 1。我需要做的就是反转 hg 传入命令的状态,但我找不到执行此操作的语法。我发现的大多数搜索结果都直接涉及编写 python 钩子,但对于这样一个简单的问题,这似乎有点过头了。

我正在寻找这样的东西:

[hooks]
pre-commit != hg incoming
or
pre-commit = hg incoming == 0

我也不确定消息会去哪里。

【问题讨论】:

  • 如果您也需要消息,python 脚本可能不会那么矫枉过正!
  • @Vince:我不需要消息,它只是理想的。我认为我的挫败感是由于无法将简单的逻辑 NOT 应用于 Hg 命令的结果。
  • some remote 状态为 BAD IDEA (tm) 的情况下阻止 任何本地 操作。无论如何,您可以尝试使用 shell-alias 重新定义 hg commit

标签: mercurial mercurial-hook


【解决方案1】:

Windows 上,您可以使用此命令检查传入的更改:

[hooks]
pre-commit.checkNew = CMD /V /C "hg incoming & IF !ErrorLevel! EQU 0 (Exit 1) Else (Exit 0)"

如果发现新更改,它将取消提交,您将需要提取(并可能合并)新更改。

【讨论】:

    【解决方案2】:

    你基本上是对的,但你搞错了:

    [hooks]
    precommit = ! hg incoming
    

    钩子中没有可以取消提交的破折号。

    但是,如果您将 DVCS 系统变成人们在没有连接到互联网的情况下无法提交的东西,您的同事就会把您串起来。 :)

    【讨论】:

    • 感谢@Ry4an。我们使用 bitbucket,它有时确实无法访问,但是,这将是一个本地挂钩,开发人员可以轻松删除。这实际上只是一个提醒,以防止出现“哎呀,我忘了先拉”这种情况。
    • 那个钩子仍然对我不起作用。我得到“中止:precommit 钩子以状态 1 [代码:255] 退出”(来自 tortoiseHg)。从命令行我得到'!' is not recognized as an internal or external command, operable program or batch file. abort: precommit hook exited with status 1
    • 啊!你在窗户上! ! 是 unix shell 的一部分。它否定任何命令的退出代码。 ! true ; echo $? 打印 1 (因为 1 在退出代码土地中为假)
    【解决方案3】:

    我通过再次阅读文档找到了解决方案:control if hook can proceed。我在哪里找到了正在使用的 grep 命令。

    [hooks]
    precommit.comment = REM Don't forget to pull first!
    precommit.test = hg incoming | grep -q "no changes found"
    

    当开发人员提交失败时,他们可以检查输出日志并查看注释。不太漂亮,但大部分时间应该足够了。 -q 防止“未找到更改”出现在日志中,这在提交失败后会造成混淆。我添加了我自己的扩展名 .comment 和 .test 以便钩子以正确的顺序运行(c 在 t 之前)。

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2022-07-12
      • 2016-02-07
      相关资源
      最近更新 更多