问题标签 [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.
mercurial - 从 python 钩子调用一个 mercurial 命令(“hg update”)
我在 Windows 2008 64 位和 IIS 上设置了 Mercurial hgweb。存储库的位置是网络共享。
我想在存储库上创建一个挂钩,以在 changeroup 上发出“hg update”命令。我不能使用外部挂钩,因为这会以网络共享作为工作目录启动 cmd.exe(并且 cmd.exe 不支持网络共享)。
因此,我正在寻找一个调用 mercurial 命令的 python 钩子示例。我注意到有一个 mercurial.commands 模块,但我在网上找不到任何示例,而且我对 Python 的经验也不是很丰富。
有没有使用 Python 钩子调用 mercurial 命令的示例 - 是否可以在 hgrc 中完成所有这些操作,或者我是否需要一个外部 .py 文件?
mercurial - Mercurial pre-push hook 扫描工作副本
我需要在人们可以推送的存储库上设置一个挂钩,这将运行一些验证(目标是在验证失败时拒绝推送)。我已经设置了一些钩子,可以在成功推送后自动更新,并防止出现多头。
我编写验证脚本(例如运行单元测试的 shell 脚本)没有问题,但它需要在完整的工作副本上运行。
我的问题是,如果我只是将它放在 pretxnchangegroup 挂钩中,它不会对更新的文件进行操作。如果我尝试在钩子中进行 hg update ,那么每当验证失败并且推送被回滚时,这都会导致存储库损坏。
我当前的解决方案是将存储库克隆到某个临时文件夹并在那里运行实际验证。但我觉得这有点难看,而且只进行更新的就地验证效率较低。这种钩子可以设置吗?
python - 我可以像在 hgrc 文件中配置的某些扩展一样配置 mercurial 挂钩吗?
我知道如何指定何时运行哪些钩子。我想知道的是是否可以通过hgrc
文件将配置传递给钩子。扩展可以做到这一点,例如
我希望能够为钩子做类似的事情,例如
这样的事情可能吗?寻找一种方法来做到这一点并没有发现任何有用的东西......如果可能的话,我该如何在我的(Python in-process)钩子处理程序中读取配置?
python - 测试新的 mercurial 钩子的简单、无痛的方法(正在进行中)
我正在编写一个变化无常的变更组挂钩。我还没有把所有的事情都弄清楚,但是我必须不断地承诺和推动只是为了测试我正在进行的工作,这让试错的过程变得更加痛苦。
有没有办法“伪造”一个触发器来执行我的变更组挂钩,并使用存储库的当前状态用于它的参数?
任何有助于简化此过程的帮助将不胜感激。谢谢尼克
mercurial - Mercurial 钩子——在钩子之间传递信息?
我目前pre-commit
在我的 mercurial 项目中有一个钩子,它让用户可以选择更新项目的版本号,如果他们愿意的话(例如1.0
to 1.0.1
or 1.1
or 2.0
)。他们选择其中一个选项,钩子会在提交之前更新项目文件之一中的版本号。
当我运行时hg commit
,这个钩子运行并使用新版本号更新相关文件,然后执行提交。
我想添加到钩子中,以便它也可以调用hg tag <new_verson_number>
。
但是,我不能将它添加到pre-commit
钩子中,因为这样标签将在调用提交之前添加,导致标签是一个过时的修订版。
我想将hg tag
命令添加到commit
钩子(在提交后运行),以便事件序列如下所示:
hg commit -m "my commit message"
- 用户说是,我想更改版本号
- 版本号在相关文件中更新
- 提交发生[这里一切都很好]
- 如果用户更改了版本号,请运行提交挂钩:
hg tag <new_version_number>
。
现在,我可以添加一个提交挂钩,从它存储的文件中读取新版本号并运行hg tag <new_version_number>
,但是如果用户决定不更改版本号怎么办?在这种情况下,我不想添加标签,如果我盲目地运行,hg tag <new_version_number>
我最终会得到我不想要的标签。
那么 - 有什么方法可以告诉pre-commit
钩子为钩子留下一些信息commit
(是否添加标签的是/否),并且commit
钩子可以使用它来确定是否添加标签?
干杯。
python - 使用来自 mercurial python 钩子的 Django 模型
我正在尝试在更改组挂钩期间将一些构建请求排队在数据库中。DB 表由 Django 应用程序管理。所以,在钩子中,我想使用 Django 模型来提交构建请求。但是,我无法正确设置以成功导入模型。
基于此(https://docs.djangoproject.com/en/1.3/ref/django-admin/)信息,我需要做的就是将我的 django 站点添加到 sys 路径,并设置 DJANGO_SETTINGS_MODULE。django 站点位于 /opt/mysite 中,因此 - 从 python 控制台尝试:
第二次尝试:
基于此(http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/)我可以使用setup_environ(),当我在python shell中尝试这个时,它可以工作:
但是,当我在 Mercurial 钩子中尝试此操作时,在尝试导入构建模型的那一刻,我就被错误所困扰:
当它到达'from mysite.myapp.models import Build'行时,我得到以下错误输出:
关于可能导致此问题的任何想法?
node.js - 如何在推送后使用 Mercurial 更新和重新启动 Node 应用程序?(相当于 git post-receive in hg)
我以前曾与 Git 合作过完成此任务,但另一个项目需要 Mercurial。我的 Git 配方包括post-receive hook
如下所示:
每次我推送到服务器上的远程仓库时,它都会刷新我的工作应用程序目录。然后,我将使用node-supervisor :运行我的应用程序supervisor server.js
,它将监视文件更改并在 git push / 文件更改后重新启动 Node。
我的问题是使用 Mercurial 完成此任务的最佳方法是什么。我已经将changegroup
钩子视为类似的替代方案,但我找不到任何示例钩子。谢谢!
更新:我的实现
根据下面的回答和评论,我选择了changegroup
钩子。具体来说,在myrepo/.hg/hgrc
我使用:
对于这个项目,我使用了一个基本的 shell 脚本来重新启动 Node 与安装 node-supervisor。它看起来像这样:
我只有一个 Node 进程在运行,所以 pkill (all) 对我有用。我还直接从我的 repo 目录中运行 server.js。
mercurial - Mercurial 变更组挂钩:存储库 URL
在 Mercurial 存储库服务器上,我如何才能找出当前存储库 URL 或至少名称(子路径)在一个changegroup
- 或类似的 - 钩子中?我在 IIS 上运行 HgWeb。
$HG_URL
返回push
ers URL,而不是接收存储库的。$HG_SOURCE
只返回serve
。
上下文:我正在尝试changegroup
为 Jenkins 编写一个钩子,使用/mercurial/notifyCommit?url=<url>
它告诉 Jenkins 执行 SCM 轮询,如果我不能让它工作,我必须进行大约 50 次 cURL 调用(服务器上的每个存储库一次)在每个changegroup
触发器上,然后记住hgweb.config
永远维护这个列表。
python - 带有 Python 主要功能的 Mercurial Commit Hook
我正在尝试在 python 中创建一个复杂的 mercurial 提交挂钩。我还希望被允许使用 OptionParser 传递参数。这是我到目前为止的要点:
.hg/hgrc 配置:
python文件.py:
当我运行时hg commit -m 'message'
出现错误:“用法:hg [选项] hg:错误:没有这样的选项:-m”。当我尝试时,hg commit --test-dir '/somedir'
我得到一个错误:“hg commit: option --test-dir notrecognized”。
最后,我尝试commit = python:/mydir/pythonFile.py:main --test-dir '/somedir'
在 hgrc 配置中指定,但出现此错误:“AttributeError: 'module' object has no attribute 'main --test-dir '/somedir''”
谢谢您的帮助。
mercurial - 用于更改文件的 Mercurial 预提交脚本
尽管 Mercurial 具有去中心化的性质,但我们有一个集中的服务器,我们都推送到它,它会在夜间进行构建、打包等......
这是我们想要实现的目标:源代码控制的文件之一包含主要+次要版本号,理想情况下,每次提交都必须增加这些版本号。由于在开发人员的机器上不可能进行集中编号,因此我们正在考虑在主服务器上使用一个预提交脚本,该脚本将为每个推送的提交写入一个新的次要版本号到该文件。问题是/是:
- 因为它是预先提交的,所以这个文件更改可以是同一个提交的一部分吗?
- 如果不是,预提交是否会导致另一个提交,你如何防止它级联/递归?
- 如何做到这一点?
- 有更好的解决方案吗?