问题标签 [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 - 如何在提交标签之前提交文件?
我想在使用hg tag XXX
.
我已经在我的 hgrc 中设置了一个 pretag 钩子(注意:为了清楚起见,我已经删除了确保它输出到 hg root 中的 VERSION 的东西):
当我创建一个新标签时:
我得到错误:
我可以改用标签挂钩,它成功了,但是 VERSION 号恰好比标签晚一个修订:这意味着更新到标记的修订,然后构建将导致产品的版本号(这取决于 VERSION文件)将是不正确的。
有没有更好的方法来处理这个?我看过SO question #2558531,但每次都更新版本号:我只想在标记存储库之前更新版本号。
mercurial - Mercurial:在“hg commit”之前强制执行“hg pull -u”
在某些情况下,我需要强制执行 Mercurial 用户在允许hg pull -u
任何人之前运行,即,这意味着传入队列是空的——此外,我还希望该人使用分支的头版本。hg commit
hg pull
我该如何设置这样的限制?
(我完全意识到这违背了 DVCS 设计核心的部分内容)
mercurial - tortoisehg 一步提交推送 - 如何以及日志文件在哪里
我正在使用带有 Tortoisehg 2.3 的 win xp。我使用 bit bucket 来备份我的个人源代码。(很少用于真正的版本控制,更多的是作为源备份存储)。现在我必须右键单击我的存储库,选择提交,然后输入提交消息(我选择只复制我上次使用的相同消息,有一个下拉菜单可以执行此操作),然后单击提交。然后我再次右键单击并选择同步并通过此选项最终推送。我可以使用工作台并做类似的事情。我想优化这个过程,所以我决定只写一个 dos bat 脚本来提交和推送。当我按下 Tortoisehg 时,会向窗口吐出 hg 命令,你可以看到它并从这里剪切和粘贴。对于提交,它并没有显示它实际上在做什么。当我很久以前使用 TortoiseSVN 时,我记得有一个日志文件,其中存储了所有执行的 svn 命令以进行调试。所以我开始搜索 TortoiseHg 日志文件。
有谁知道:
1) Tortoisehg 是否在某个地方有一个日志文件,它存储所有执行的 mercurial 命令以及所有命令行选项?
2)有没有更好的方法来进行一步提交推送(通过 Tortoisehg gui 或 bat 或一些插件/扩展等)?
问候
mercurial - mercurial update hook 给了我权限被拒绝的错误
我正在使用 SSH 推送到远程服务器上的中央 mercurial 存储库。
我挂了一个钩子,这样远程仓库就会更新:
当我尝试推送到远程仓库时,推送成功,但我得到了这个输出:
对我有什么想法吗??谢谢!
python - Mercurial Hook - 在提交前更改提交消息
编辑制作了这个基本钩子以防止分支名称和提交消息 bugID 不匹配。https://gist.github.com/2583189
所以基本上这个想法是,如果分支名称类似于 bug_123 或 feature_123,则挂钩应将“BugID:xyz”附加到提交消息的末尾。但是,我在找出如何执行此操作时遇到问题,因为大多数 pretxncommit 示例人们不想改变变更集描述。
这就是我到目前为止所拥有的。它使用正确的消息更新 .hg/commit.save,但此消息永远不会传输到提交。但是,它会显示在下一次提交的默认消息框 (tortoisehg) 中。也许 pretxncommit 不是正确的钩子?
我可以使用 precommit 钩子,读取 commit.save 和 repo['tip'].branch() 文件并更改它,如果可以,我从哪里获取分支名称?
在一个稍微不相关的注释中,如果 Fogbugz/Kiln 团队的任何人看到这个......请更新您的软件以读取分支名称,我不需要在每个该死的提交上放置 BugID:x。首先,它浪费了我的时间。其次,如果案例 ID 输入错误,它不会出现在错误上,而不会引起很多混乱。许多开发人员使用每个错误/功能系统的分支。这是我工作的公司政策。雾虫很烂。
version-control - 如何以易于部署的方式实现自定义规则以在 hg 或 git 上推送更改?
用例:当主干标记为红色时,您想阻止人们推到主干 - 在这种情况下,您想在接受之前要求他们确认。
问题是本地.hg/hgrc
挂钩是只有您才能获得它们,当您想为所有开发人员实现类似的东西时,这不是一种可接受的方法。
怎么可能以适合所有人的方式实施这样的事情。
mercurial - 从 Mercurial prechangegroup 钩子中读取命令行参数
如果某个条件成立,我试图禁止推送到 Mercurial 存储库。但是,重要的是,如果用户使用push --force
,则推送无论如何都会通过。
我知道在进行推送的机器上使用pre-push
钩子很容易做到这一点,钩子将命令行参数传递给钩子。然而,由于钩子没有被传播,我不得不以某种方式将钩子分发给存储库的每个用户,并依赖他们不会弄乱它。
因此,我认为要走的路是prechangegroup
在存储库服务器上有一个钩子,它检查条件并在必要时中止推送,但我无法找到一种方法来获取用户在推送时使用的命令行参数这个钩子。有没有办法仅通过在存储库服务器上使用挂钩来完成此操作?
我知道pretxnchangegroup
如果最新变更集的提交消息遵循某种模式,则可能的解决方法是使用钩子并允许推送。但是,--force
从存储库用户的角度来看,该选项似乎要容易得多,因为它不会强迫他们潜在地进行虚拟提交以获取正确的消息。
web-services - 从 web 服务调用批处理文件以写入文本文件
这可能看起来有点疯狂,但如果你能告诉我更好的方法,请这样做。我需要一个 web 服务来显示当前版本的 mercurial 修订号。
我有一个非常简单的批处理文件,可以将此数字写入文本文件
和一个应该调用批处理文件的方法,然后读取文件的内容,现在,写入屏幕(我在网页中执行此操作,但稍后将迁移到一个简单的服务)
我已授予每个人对服务目录的写入权限,并明确授予 version.txt,但是当我点击页面时,version.txt 文件始终为空。如果我在记事本++中打开了文件,那么我会收到一条消息,说文件已被另一个程序修改,我想重新加载它吗?当我这样做时,它是空的。如果我在文件中设置一些文本并保存,然后再次访问网页,我的文本文件的内容就会被清除。
我在 try/catch 块中有这个,但没有抛出异常,所以我删除了它(为了清楚起见)。
最终,我只需要获取
hg identify --num的结果,
以在网页/服务上显示为字符串,该字符串将由单独的 SharePoint 站点调用
mercurial - 在传出挂钩中确定目标存储库
我正在尝试编写一个在特定条件下阻止推送的 Mercurial 挂钩,但要确定是否阻止推送,它需要知道推送将要发送到的存储库。我知道理想情况下,这将在prechangegroup
远程存储库端的挂钩中完成,但在我的情况下这是不可能的 - 请参阅我之前的问题了解原因。(我喜欢 Ry4an 的建议,但我必须为一大堆存储库执行此操作,因此为每个存储库创建一个副本似乎不是可行的方法。)
无论如何,我最初是在pre-push
挂钩中执行此操作的,但这仅在非常特定的情况下才调用;特别是,如果用户为 定义了别名push
,那么我的钩子将不会被调用,这意味着它可能会被无意中绕过。我的下一个想法是钩子,它绝对更简单——它可以在推送以外的情况下被调用,但使用传递的参数preoutgoing
很容易过滤掉。source
但是,该preoutgoing
钩子没有可用的目标存储库;甚至为此提交了一个错误,但它现在对我没有多大好处。目前,我正在通过两个钩子来解决这个问题;一个pre-push
决定目的地,然后是preoutgoing
实际行动的那个。当然,pre-push
钩子可能没有运行,但在这种情况下,我只是警告用户他们的推送可能不安全,并让他们选择放弃它。
我有两个问题。首先,有没有更好的方法来实现这一点?其次,如果没有,是否可以安全地假设repo
传递给我的两个钩子(它们都是在进程中)的对象是相同的?换句话说,如果我做类似的事情
在我的pre-push
钩子中,是否保证preoutgoing
随后调用的钩子将接收相同的repo
对象,因此可以通过它访问我的自定义属性?我知道我可以通过环境变量或临时文件来做到这一点,但这似乎更好,我不必担心之后清理。我也看到了这个问题,但它并没有太大帮助。