【问题标题】:mercurial pre-push hook parameter to obtain the remote repo pathmercurial pre-push hook参数获取远程repo路径
【发布时间】:2023-03-30 06:43:01
【问题描述】:

我正在尝试实现一个 mercurial pre-push 钩子,它检查目标 repo 路径并通过 ssh-add 添加适当的 id。不太好的解决方案是检查命令行参数,如果不强制路径,则从 hgrc 文件中读取默认值,但有没有更简洁的方法来获取远程路径?

我打印了传递给钩子方法的 kwargs,但似乎没有任何东西可以容纳我需要的东西。我也尝试过谷歌搜索,但可用的信息几乎没有,这似乎真的有点像黑色艺术。因此,任何对体面的文档和/或示例的引用也将不胜感激。

干杯,

【问题讨论】:

    标签: mercurial mercurial-hook


    【解决方案1】:

    查看hg help config,您似乎可以使用“prechangegroup”挂钩和HG_URL 环境变量:

    "prechangegroup"
      Run before a changegroup is added via push, pull or unbundle. Exit
      status 0 allows the changegroup to proceed. Non-zero status will cause
      the push, pull or unbundle to fail. URL from which changes will come is
      in "$HG_URL".
    

    【讨论】:

    • 尽管这看起来很有希望,但不幸的是,这个钩子在常规推送之前或之后都不会被调用。
    • 嗯,我猜我被文档弄糊涂了。如果将更改添加到当前存储库(因此其他人向您推送或您从其他人那里拉取),则会运行此挂钩。确实对你没用。
    【解决方案2】:

    您应该能够使用“pre-changegroup”和“pre-push”钩子(注意破折号)。它以 $HG_ARGS 形式提供命令行参数。

    如果 $HG_ARGS 是有效的 url,您可以使用该 url。如果未提供任何内容,请使用作为钩子关键字参数给出的 ui 对象。

    使用以下命令从配置中检索默认路径:ui.config('paths', 'default')

    您也可以在配置文件中编写其他命名的 url/路径,如果 $HG_ARGS 不包含 ui.config 路径对象的有效 url 和关键字,您也应该能够验证它

    【讨论】:

    • 这也不会被调用,即使调用了,我也不想依赖 $HG_ARGS 因为,如果没有提供参数,我们将关闭默认值.hgrc.
    • 对不起。那个钩子在远程仓库上。我没有意识到你想要它本地
    • 我实际上都想要一些东西,我尝试使用远程 repo,但它仍然没有在我的 ubuntu 设置中被调用,我不知道环境是否有什么不同。
    • 根据文档,您可以使用“预推”(未测试)。再次查看 $HG_ARGS 以检索 url。如果没有提供参数,则使用 ui.config 从 .hgrc 获取默认路径
    • 我花了一段时间才回到这一点,但这是我实现这一点的 python 方式(不喜欢说 pythonic)。如果该方法接收 'ui' 作为参数,则 ui.config('paths', 'default') 完成这项工作。 @rfkortekaas 建议使用 ui.config ,但我不太确定该怎么做,玩了一会儿就想通了。如果他更新他的答案,我很乐意投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2021-12-31
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多