【问题标题】:Is it possible to specify Windows shell to use when specifying hooks in Mercurial?在 Mercurial 中指定挂钩时是否可以指定要使用的 Windows shell?
【发布时间】:2012-01-18 14:59:58
【问题描述】:

我正在尝试在 Windows IIS 服务器上的远程存储库(使用 hgweb)上设置挂钩。我遇到的问题是存储库在 hgweb 的配置中被指定为 UNC 路径,并且钩子使用 cmd.exe 不支持的 UNC 路径执行 cmd.exe。

是否可以指定一个不同的 shell 来代替运行?

【问题讨论】:

    标签: mercurial mercurial-hook


    【解决方案1】:

    据我所知,您无法告诉 Mercurial 在 Windows 上使用不同的 shell(但我认为您可以在 Linux 主机上使用)

    相反,您可以让钩子脚本调用到不同的 shell,并让 那个 shell 执行另一个脚本或一组命令。这很混乱,但不幸的是,Windows 并不以提供出色的脚本支持而著称,尤其是与基于 *nix 的平台相比时。

    【讨论】:

    • 或者你可以把它写成 python 钩子
    • @jk - 让它成为一个正确的答案......这是这个问题的正确答案。我的只是一种解决方法。
    • 好的,但我认为运行另一个程序/脚本的外部挂钩也是完全有效的
    • 不幸的是,cmd.exe 是由钩子运行的,如果当前路径是 UNC,它会忽略它并使用 Windows 路径作为当前路径,导致外部钩子不知道它在哪个存储库上正在努力。
    【解决方案2】:

    水星hooks can be defined two ways

    1. 作为外壳挂钩(外部挂钩)
    2. 作为 python 钩子(进程钩子)

    如果您将其更改为 python 钩子,那么您显然将拥有 python 的全部功能来做一些事情。当然,你没有理由不能用任何语言编写程序并按照 cdeszaq 的建议从外部挂钩执行它

    【讨论】:

    • 使用进程内 python 钩子的另一个好处是它是跨平台的,所以如果你切换到非 Windows 平台,你不必重新编写你的钩子脚本。
    • 问题似乎是使用外部挂钩时,Mercurial 从 cmd.exe 中启动这些挂钩 - 至少在我尝试调用“hg update”时(以获取远程仓库以在传入挂钩上进行更新) ) 它运行 cmd.exe。
    • @LeeAtkinson - 然后使用 python 钩子,因为它不会在外部 cmd 进程中运行,并且将在与 hg 本身相同的内部进程中运行。
    • @cdeszaq - 谢谢 - 我一直在寻找一个 python 挂钩的例子来调用“hg update”,但我没有找到任何 - 我猜是因为使用外部“hg update”是在大多数情况下简单且足够。我会将您的回复标记为答案(可能无法设置 shell) - 并继续我的 serahc 以获取仅限 python 的“hg 更新”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多