问题标签 [mercurial-hook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1640 浏览

python - 为 Mercurial Hook 设置环境变量

我正在尝试调用一个 shell 脚本,该脚本通过一个 mercurial 钩子在我们的服务器上设置一堆环境变量。当一个新的变更组进来时,shell 脚本会被很好地调用,但是环境变量并没有传递到对 shell 脚本的调用。

我在存储库上的 hgrc 文件如下所示:

我可以看到 shell 脚本的输出,然后是 env 命令的输出,但是 env 命令不包含 shell 脚本设置的新环境变量。

我已经验证了 shell 脚本在单独运行时可以正常工作,但是在 mercurial 钩子的上下文中运行时,它没有正确设置环境。

0 投票
9 回答
7893 浏览

version-control - Mercurial 钩子没有正确执行

这应该是一件非常简单的事情,但由于某种原因,它不适用于我的 Mercurial 存储库。我想要的只是让远程仓库hg update在有人推送时自动运行。所以我在 .hg/hgrc 文件中有这个:

很简单,对吧?但由于某种原因,这永远不会执行。我还尝试编写一个执行此操作的 shell 脚本。.hg/hgrc 看起来像这样:

hg-update 看起来像这样:

但同样,这不会更新。的内容hg help被写入works.txt,但没有任何内容被写入hg update。我在这里有什么明显的遗漏吗?这已经困扰我好几天了,我似乎无法让它发挥作用。

更新

好的,再次使用-v从我的工作站推送到远程仓库的命令行上的开关不会打印任何详细消息,即使我echo.hg/hgrc. 但是,当我从同一文件系统上的 repo 克隆进行推送时(我通过 SSH 登录),这就是我得到的:

所以它有效,但只有当我从同一个文件系统推送时。如果我尝试通过网络从另一个工作站推送到 repo,它就不起作用。

0 投票
2 回答
1233 浏览

version-control - 使用 Mercurial 挂钩创建/加载数据库转储以进行版本控制

我已经开始使用 Mercurial 对我的 Drupal 项目源文件进行版本控制(我既是 VCS 又是 Mercurial 新手)。但是,数据库仍然是“版本控制的”,使用日期为 .sql.gz 文件的目录。

我想要的是在我的存储库中的某处有一个单一的数据库转储文件,当数据库更改时,它将被当前转储覆盖,并在我想回滚到另一个版本时导入到数据库中。

我手动完成了它,并且有效。但我真正想要的是在每次提交/更新时自动进行转储/加载的东西。我真的更喜欢它与 Mercurial 挂钩,而不是像 makefile 这样首先转储数据库然后提交的外部东西,因为我喜欢使用 TortoiseHg 的工具,而且我不想运行另一个脚本。

现在,看起来像挂钩这样的东西mysql .... < dumpfile.sqlupdate是每次更新后加载数据库转储的一种简单方法。但是自动倾销呢?

关于 SVN 的预提交钩子有一个类似的问题,接受的答案是这可能是个坏主意。它适用于 Mercurial 吗?也许另一个钩子(prechangegroup?)会起作用?

编辑:

我应该指出,我自己在本地机器上使用它。它不应该扩展到单个用户之外。

0 投票
4 回答
9378 浏览

mercurial - 有用的水银钩子

你遇到过哪些有用的 Mercurial 钩子?

Mercurial 书中有一些示例钩子:

我个人不觉得这些很有用。我想看看:

  • 拒绝多头
  • 通过合并拒绝变更组(如果您希望用户始终变基,则很有用)
    • 通过合并拒绝变更组,除非提交消息具有特殊字符串
  • 自动链接到 Fogbugz 或 TFS(类似于 bugzilla 挂钩)
  • 黑名单,将拒绝具有某些变更集 ID 的推送。(如果您使用 MQ 从其他克隆中提取更改,则很有用)

请坚持使用具有 bat 和 bash 或 Python 的钩子。这样,*nix 和 Windows 用户都可以使用它们。

0 投票
3 回答
2116 浏览

mercurial - 向 TortoiseHg 添加钩子

我正在使用 TortoiseHg 并想在我的 repo 中应用一个钩子。我的 repo 的 .hg/hgrc 文件如下:

问题是我不知道 TortoiseHg 的 PYTHONPATH 变量设置在哪里。我该如何改变它?或者我应该把我的 Python 文件放在哪里,以便 TortoiseHg 的 Python 解释器可以看到它?

我在 TortoiseHg 的文档中或通过 Google 找不到任何关于钩子的提及?

0 投票
1 回答
1076 浏览

mercurial - Mercurial 传出 Hook

当我推送到本地存储库时,我正在寻找创建一个推送到备份远程存储库的 Mercurial 挂钩。我以为我可以钩住“传出”钩子,但这会产生一个不漂亮的无限循环。那么是否有类似推送后的钩子,或者最好让我正在推送的存储库有一个“传入”钩子来推送到远程备份?

0 投票
2 回答
3089 浏览

mercurial - 禁止提交大型二进制文件的 Mercurial 钩子

我想要一个 Mercurial 钩子,它会在提交事务之前运行,如果提交的二进制文件大于 1 兆字节,它将中止事务。我发现以下代码可以正常工作,除了一个问题。如果我的变更集涉及删除文件,则此挂钩将引发异常。

钩子(我正在使用pretxncommit = python:checksize.newbinsize):

例外:

我不熟悉编写 Mercurial 钩子,所以我对发生的事情感到很困惑。如果 hg 已经知道文件被删除,为什么钩子会关心它?有没有办法修复这个钩子,让它一直工作?

更新(已解决): 我修改了钩子以过滤掉在变更集中删除的文件。

0 投票
1 回答
660 浏览

ssh - 根据提交者名称拒绝推送

我最近建立了一个善变的存储库。所有的 pusing 都是通过 ssh 完成的。目前只有具有 LDAP 帐户的用户才能将更改推送到存储库。但是,鉴于在提交到本地存储库时,可以使用 --user 使用任何提交者名称。可能会出现提交者名称与 LDAP 帐户名称不匹配的情况。我想避免这种情况。

确保不会发生这种情况的最佳方法是什么?钩子是解决这个问题的最好方法吗?我不希望这是一个本地挂钩,而是与存储库位于同一台机器上的挂钩。它需要在推送事件中检查提交者名称是否与 LDAP 帐户匹配,以及它是否没有发回适当的错误消息。

这似乎是一种明智的继续方式,还是我以错误的方式解决问题?

0 投票
1 回答
2982 浏览

windows - 让 Mercurial 进程内挂钩在 Windows 上运行

我正在尝试让 Mercurial 进程内挂钩在 Windows 上运行。
问题不在于如何编写钩子(我想使用现有的钩子,在这种情况下是 BugTracker.Net的用于 Mercurial 集成的钩子 - 我没有找到指向该文件的直接链接,但如果你可以看到它在此处下载 BT.net ,它位于“mercurial”子文件夹中)。
问题是如何告诉 Mercurial 运行它。

我花了很多时间阅读文档,但我现在卡住了。
(具有一定的 Python 知识可能会更容易 - 我没有)

我知道我必须在 hgrc 文件中插入一行(在我的存储库的 .hg 文件夹中)。

HG Book中有一个示例,如下所示:

Mercurial 网站上还有另一个示例,如下所示:

现在我想要一个“传入”钩子,所以至少我知道我必须这样做:

问题是要找出“X”。
文件名是hg_hook_for_btnet.py,在文件中,有一行如下所示:

我想这就是“函数”本身的名称。
所以我的线需要看起来像这样:

但这给了我一条错误消息[Errno 2]当我推送时没有这样的文件或目录。
我已经尝试了很多不同的变化,但它不起作用,我不知道我做错了什么。

  • 我是否需要python:在开始或不需要?
  • 我需要指定文件扩展名.py吗?
  • 我是否需要/path/to/...如 Mercurial 网站的示例所示(见上文)?
  • 如果是,该路径的正确语法是什么?(只是c:\MyRepo\不起作用 - Python 中的语法必须不同)

另外,我是否将挂钩文件放入正确的文件夹中?
现在,它位于我的存储库的主文件夹中(与 .hg 文件夹处于同一级别)。


编辑:

马丁,我把它改成这样:

现在我收到一条不同的消息:[Errno 22] Invalid argument
我想这是因为你提到的repoand参数。ui

那么,这是否意味着钩子脚本被破坏了?
(正如我所说 - 我对 Python 一无所知,这是来自开源 bugtracker的现有钩子脚本)


编辑2:

对不起,关于进程内和单独进程的混淆 - 我知道有区别,但我认为如果钩子是用 Python 编写的,它必须自动在进程中(结果我错了:-)

好的,使用您编辑的答案中的语法,脚本至少可以运行。
我已经安装了 Python 2.7(在我在这里提出问题之前已经这样做了)并将脚本中的第一行更改为#!C:\Python27\python.exe.
现在我明白了:

所以脚本运行,但仍然有一些错误。
这似乎是与 Bugtracker.NET 相关的问题,因此我将在 BT.NET 邮件列表中询问进一步的建议。
谢谢你的帮助,如果没有你,我可能不会走这么远!

0 投票
3 回答
2715 浏览

python - 获取变更组中的变更集列表(mercurial python hook)

我想要一个 mercurial 钩子,它将在所有修改的文件上运行 JSLint/PyChecker/etc。但是,我无法控制所有 hg 客户端,并且希望它在推送到主存储库(我可以控制)时运行,因此在主存储库上使用 pretxnchangegroup 挂钩似乎是最好的。

如何获取将要提交的变更组中的所有变更集的列表?

我似乎有其他使用预提交钩子的解决方案,但这些对我不起作用,因为客户端可能已经有一个失败的 JSLint 提交。在这种情况下,他们应该能够修复新提交中的错误,并能够成功推送(错误提交和新提交)到服务器。服务器只需要检查每个分支上的最新变更集,以及在变更组中修改的每个文件。