标签: mercurial-hook

让Jenkins从Mercurial提交中构建项目

有没有办法在单个存储库中指定一个钩子?

现在我们已经在"/ etc/mercurial/hgrc"文件中指定了钩子,但每次构建两次时,它都会为每个存储库中的每个提交构建.

所以我们想要为每个存储库指定一个构建.

这就是我们实现钩子的方式:

[hooks]
changegroup = curl --silent http://jenkins:8080/job/ourProject/build
Run Code Online (Sandbox Code Playgroud)

它在Ubuntu服务器上.

mercurial-hook jenkins mercurial-commit

6
推荐指数
2
解决办法
5462
查看次数

Pylint无法在Mercurial预提交钩子上加载插件

我试图创建一个在预提交上运行的Mercurial预提交钩子pylint。我的项目使用虚拟环境。

我已经设置了挂钩来调用pylint更改的文件,但出现错误:

Traceback (most recent call last):
    File "/home/barmstrong/.virtualenvs/amp/bin/pylint", line 10, in <module>
        sys.exit(run_pylint())
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/pylint/__init__.py", line 20, in run_pylint
        Run(sys.argv[1:])
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/pylint/lint.py", line 1583, in __init__
        linter.load_plugin_modules(plugins)
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/pylint/lint.py", line 636, in load_plugin_modules
        module = modutils.load_module_from_name(modname)
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/astroid/modutils.py", line 202, in load_module_from_name
        return load_module_from_modpath(dotted_name.split("."), path, use_sys)
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/astroid/modutils.py", line 244, in load_module_from_modpath
        mp_file, mp_filename, mp_desc = imp.find_module(part, path)
      File "/usr/lib/python3.6/imp.py", line 297, in find_module
        raise ImportError(_ERR_MSG.format(name), name=name)
    ImportError: No module named 'common'
Run Code Online (Sandbox Code Playgroud)

我相信这是由于.pylintrc尝试从我的项目目录中加载的文件中的自定义插件所致: …

python mercurial pylint mercurial-hook

6
推荐指数
1
解决办法
70
查看次数

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

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

我想要的是在我的存储库中的某个地方有一个数据库转储文件,当数据库发生更改时会被当前转储覆盖,并在我想要回滚到另一个版本时导入到数据库中.

我是手动完成的,但它确实有效.但我真正喜欢的是在每次提交/更新时自动执行转储/加载的事情.我真的更喜欢它会挂钩到Mercurial而不是外部像makefile那样首先转储数据库然后提交,因为我喜欢使用TortoiseHg的工具,而且我不想让另一个脚本运行.

现在,似乎mysql .... < dumpfile.sqlupdate钩子上的东西将是每次更新后加载数据库转储的简单方法.但是自动倾销怎么样?

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

编辑:

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

version-control mercurial mercurial-hook

5
推荐指数
1
解决办法
1221
查看次数

忽略 mercurial 钩子中的某些 mercurial 命令

我有一个像这样的 mercurial 钩子:

[hooks]
pretxncommit.myhook = python:path/to/file:myhook
Run Code Online (Sandbox Code Playgroud)

代码如下所示:

def myhook(ui, repo, **kwargs):
    #do some stuff
Run Code Online (Sandbox Code Playgroud)

但是这个钩子在使用提交逻辑做其他事情的命令上运行,在我的例子中hg shelve。有没有办法获取用户输入的命令以避免在该命令上运行挂钩?

也许是这样的:

def myhook(ui, repo, command, **kwargs):
      if command is "hg shelve"
           return 0
      #do some stuff
Run Code Online (Sandbox Code Playgroud)

python mercurial hook mercurial-hook

5
推荐指数
0
解决办法
171
查看次数

Mercurial - 如何禁用推送

我正在尝试寻找是否有一种简单的方法可以使 Mercurial 存储库变为只读。用户应该能够克隆,但不允许推送。我需要对超过 100 个的所有存储库执行此操作。

mercurial mercurial-hook mercurial-subrepos

5
推荐指数
1
解决办法
2003
查看次数

获取Mercurial进程内挂钩以在Windows上运行

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

我花了很长时间阅读文档,但我现在卡住了.
(使用Python的某些知识可能会更容易 - 我没有)

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

HG Book中有一个例子如下:

[hooks]
commit.example = python:mymodule.submodule.myhook
Run Code Online (Sandbox Code Playgroud)

还有Mercurial网站上的另一个例子,它看起来像这样:

[hooks]
changegroup = /path/to/changegrouphook
Run Code Online (Sandbox Code Playgroud)

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

[hooks]   
incoming.btnet = X
Run Code Online (Sandbox Code Playgroud)

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

def debug_out(s):
Run Code Online (Sandbox Code Playgroud)

我想这就是"功能"本身的名称.
所以我的行需要看起来像这样:

[hooks]   
incoming.btnet = python:hg_hook_for_btnet.debug_out
Run Code Online (Sandbox Code Playgroud)

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

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

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


编辑:

马丁,我改成了这个:

[hooks]
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out
Run Code Online (Sandbox Code Playgroud)

现在我得到一个不同的消息: …

windows mercurial hook mercurial-hook

4
推荐指数
1
解决办法
2880
查看次数

如何在HG/Mercurial中设置一个由存储库决定的钩子?

我需要在更新后运行一个钩子(这将构建他们已经更新的解决方案)并且我不想为每个克隆我的中央存储库的人手动添加该钩子.

当有人第一次克隆我的中央存储库时,是否可以在该克隆中包含挂钩?似乎.hgrc文件不会自动克隆.

我确实阅读过有关站点范围内的钩子,但据我所知,它们可以在每个创建的存储库上工作,我只想在某些存储库中使用钩子.

mercurial hgrc mercurial-hook

4
推荐指数
1
解决办法
3077
查看次数

如何限制对 Mercurial 中特定分支的提交?

我本质上是在寻找一种管理特定分支的写入权限的方法。

这可以在提交之前(本地),也可以在提交之后但推送之前(远程)。

我需要保护某些分支不被写入,以便强制执行发布分支只能由某些人编辑的工作流程。

mercurial mercurial-hook perfarce

4
推荐指数
1
解决办法
1149
查看次数

阻止用户在mercurial中推送稳定分支

我刚开始使用Mercurial作为源控制系统.我正在考虑使用类似于此处概述的工作流程:http://stevelosh.com/blog/2010/05/mercurial-workflows-stable-default/.基本上,有两个分支,一个是"稳定",一个是"发展".所有开发都将在"开发"分支上完成,并且只有在经过测试并准备发布时才会合并到"稳定"分支中.

o | v2.0
|\|
| o added new feature
o | V1.0
|\|
| o added new feature
| |
| o fixed bug
o |
Run Code Online (Sandbox Code Playgroud)

我想阻止开发人员意外地将更改推送到稳定分支.我怎样才能做到这一点?我知道有一些方法可以勾勒出某些Mercurial事件,但如果它改变了稳定分支,哪一个可以拒绝推动?如何检测钩子内某些分支的变化?

顺便说一句,我正在运行Windows 7.

UPDATE

感谢criswel的回答 - 它指出了我正确的方向.原来ACL扩展(mercurial附带)解决了这个问题.我在主repo的'.hg'文件夹中编辑了'hgrc'文件,如下所示:

[extensions]
acl = 

[hooks]
pretxnchangegroup.acl = python:hgext.acl.hook

[acl]
sources = push

[acl.deny.branches]
stable = *
Run Code Online (Sandbox Code Playgroud)

这会阻止任何人对稳定分支进行更改并将其推送到主仓库.

mercurial mercurial-hook

4
推荐指数
1
解决办法
994
查看次数

如何在Mercurial中创建预推钩

有没有办法在执行推送之前先勾上钩子。例如,当我键入代码时,我想在代码库上运行JSHint;hg push发现任何错误时,我将中止推送。

我首先尝试使用pre-commit钩子。那行得通,但是在每次提交之前等待几秒钟是很麻烦的。此外,我有时会用可能损坏的代码进行中间提交。

阅读我发现的hgrc文档preoutgoingpre-outgoing这似乎是我想要的东西。但是这些没有用。他们似乎唯一要做的就是在键入时运行钩子:

hg outgoing
Run Code Online (Sandbox Code Playgroud)

对我完全没有用。

mercurial mercurial-hook

3
推荐指数
1
解决办法
857
查看次数