Mercurial hook 用于设置标签名称策略

2024-04-08

我编写(进程内)钩子以防止在本地添加错误标签名称:

.hg/hgrc:



pretag.badtagname = python:.hg/hgcheck.py:localbadtag
  

.hg/hgcheck.py:



goodtag_re = r'(ver-\d+\.\d+\.\d+|tip)$'
def localbadtag(ui, repo, hooktype, node, **kwargs):
    assert(hooktype == 'pretag')
    re_ = re.compile(goodtag_re)
    if not re_.match(tag):
        ui.warn('Invalid tag name "%s".\n' % tag)
        ui.warn('Use one of tip, ver-xx.xx.xx\n')
        return True
    return False
  

如何进行此检查预交换组 hook?

我尝试编写这段代码:



def pushbadtag(ui, repo, hooktype, node, **kwargs):
    assert(hooktype == 'pretxnchangegroup')
    re_ = re.compile(goodtag_re)
    for rev in xrange(repo[node].rev(), len(repo)):
        ui.warn('rev: %d\n' % rev)
        for tag in repo[rev].tags():
            ui.warn('tag: ' + tag + '\n')
            if not re_.match(tag):
                ui.warn('Invalid tag name "%s" for rev: "%s".\n' % (tag, rev))
                ui.warn('Use one of tip, ver-xx.xx.xx\n')
                return True
    return False
  

但是当我(用上层推送到仓库时预交换组启用钩子:



  $ hg tag gg
  $ hg push -f
pushing to /cygdrive/d/home/tmp/hg/good
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
rev: 35
tag: tip
  

你可以看到 rev.tags() 没有返回gg tag!


*解释问题:为什么不rev.tags()返回gg tag?

rev.tags()不返回gg标签,因为您推送的修订版上没有该标签。默认情况下hg tag将标记工作目录的父目录。新的变更集仅添加到.hgtags文件。该标签已添加到两个存储库已有的变更集中。尝试做出一些改变并承诺,then对其进行标记,以便您推送 2 个变更集,其中一个变更集带有错误标签。

此外,由于标记的工作方式,您实际上不会知道哪个版本上有该标记。新的变更集可能会在更早的变更集上添加标签。也许查看某人是否推送了错误标签的更好方法是检查新变更集所做的任何添加.hgtags.

如果您解析更改为.hgtags,您需要正确解析这些更改,这样您就不会从删除标签的条目中得到误报。您还需要收集不良标签的完整列表,而不是在第一次发现时就中断。您可能会找到添加标签的行gg更改集,但后来有两行将其删除,这也应该删除您的查找并允许钩子成功通过,因为这意味着用户在推送之前删除了错误标签。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mercurial hook 用于设置标签名称策略 的相关文章

  • CruiseControl.NET 中的 Mercurial 支持 - 如何清理和更新构建文件夹?

    我正在使用Mercurial 源代码控制块 http build nauck it de doc CCNET Mercurial 20Source 20Control 20Block html在 CruiseControl NET 中 我将
  • 如何删除头部?

    我错误地推送了一些文件 它在主存储库中显示了不同的头 我怎样才能删除那个头 您可以通过编辑您的文件来启用 mq 扩展 hgrc文件 确保存在以下行 extensions mq 之后 您可以 剥离 特定修订版 将其删除 这样您就只有一个头 h
  • Mercurial:保持两个分支同步但存在某些持久差异?

    我是一名使用 django 自己工作的 Web 开发人员 我正在尝试了解如何最好地使用 Mercurial 部署网站 我想要的是能够保留一个可用于生产和开发工作的存储库 生产 开发之间总会存在一些差异 例如 它们可能使用不同的数据库 开发总
  • 你已经从颠覆转向善变了吗?值得付出努力吗?

    我正在更好地了解 Mercurial 版本控制系统 并且正在考虑从 SVN 进行转换 有人已经转换了吗 对于您和您的团队来说 转变是否困难 您能否给出一些建议 是继续使用 SVN 还是选择 Mercurial 一旦开始 你就永远不想回去 优
  • “中止:没有名为选择器的模块!”将 Mercurial 存储库推送到 Git 存储库时

    我正在尝试将 Hg 存储库转换为 Git 存储库 两者都是私有存储库 我已按照以下步骤操作 参考 http arr gr blog 2011 10 bitbucket converting hg repositories to git 第
  • ssh-add,自动添加私钥

    我有一个公私 ssh 密钥对 由ssh keygen without密码 我将它与我的 bitbucket 帐户一起使用 特别是与 Mercurial 存储库一起使用 通常我在我的家庭工作电脑中手动添加私钥 使用ssh add ssh id
  • git、mercurial、bazaar 源代码库的可理解性

    我想阅读一种流行的版本控制工具的源代码 以了解版本控制的工作原理 我想读一本最具可读性的书 我不知道对此有什么客观 定量的衡量标准 所以本着WTF 分钟漫画 http www osnews com story 19266 WTFs m 想请
  • 有条件的 Mercurial 忽略文件

    我在 Mercurial 中有一个文件 我希望开发机器提取该文件 但我希望部署服务器不提取该文件 它具有开发机器没有的特殊模块 这是可能的 还是我应该有一个自定义的推送到服务器解决方案 而不是仅仅进行 hg pull 执行此操作的典型方法是
  • TortoiseHg无法提交--“系统找不到指定的文件”

    我刚刚选择了 TortoiseHg 用于 Windows 上的分布式源代码控制 并将其安装在我的 C 驱动器上 然后我创建了一个存储库 位于 D projects 中 当我尝试提交更改时 它给了我错误 abort None 系统找不到 指定
  • 对于二进制文件,我应该使用 bfiles 还是 bigfiles?

    有一些善变的扩展可用于处理大型二进制文件 Bfiles http mercurial selenic com wiki BfilesExtension BigFiles http mercurial selenic com wiki Big
  • Mercurial 工作流程是否可以通过未提交的更改进行更新?

    因此 我的网站从 CVS 切换到 Mercurial 我遇到的最大问题是 如果我正在处理一些我不想提交的文件 我只需保存它们 然后我还有其他文件想要推送到服务器 但是如果其他人已经制作了对存储库进行更改 然后我将它们拉下来 它要求我合并或变
  • 如何远程在BitBucket上创建存储库?

    我想在 Bitbucket 上使用 hg 命令从本地计算机创建存储库 而不是在 Bitbucket 上手动创建存储库 是否可以 我通过curl 命令使用REST API 执行了以下操作 gt curl k X POST user user
  • 更改 Mercurial“默认”父 URL

    假设我有一个 Mercurial 存储库 并且我从默认父 URL 我克隆它的源 中提取数据 现在我想更改默认的父 URL 主机名更改 或者将其复制到另一台计算机等 有没有办法做到这一点 或者我必须从新的 URL 重新克隆 您甚至可以在 hg
  • hg 存档到远程目录

    有没有办法通过 SSH 将 Mercurial 存储库存档到远程目录 例如 如果可以执行以下操作 那就太好了 hg archive ssh email protected cdn cgi l email protection path to
  • 如何将 N 个本地最顶层提交转换为 MQ 补丁?

    我想将我的最后一次提交安排为 MQ 补丁 所有提交都是本地的 从不推送到服务器 但并非所有本地提交都会被转换 假设我进行了 10 次提交 从未推送 现在我希望将最后 5 次提交转换为补丁 我该怎么做 简洁版本 hg qimport r 5
  • .hgignore 语法仅忽略文件,而不忽略目录?

    我有一个我似乎无法理解的问题 我在 Windows 上使用 TortoiseHg 版本 0 7 5 但在 Linux 上我遇到了同样的问题 这里是 My hgignore file syntax regexp 我想要实现的是将 hg 存储库
  • 将带有子存储库的 Mercurial 存储库迁移到 git 并保留历史记录的最佳方法?

    我正在尝试将 Mercurial 存储库迁移到 git 但问题是 Mercurial 存储库有子存储库 有些带有分支 以及大量合并和分支本身 我希望最终的 git 存储库能够保留所有这些历史记录 并且在检查存储库或其他分支的早期部分时保持正
  • Mercurial Eclipse 插件

    在哪里可以找到好的 Eclipse Mercurial 插件 MercurialEclipse https bitbucket org mercurialeclipse main 更新站点 https bitbucket org mercu
  • 使用 hg 存储库作为网站

    这与我的安全问题有些相关here https stackoverflow com questions 2361626 security deny access to hg via mod rewrite 对实时网站使用 hg Mercuri
  • 为 Mercurial 执行 hgweb.cgi 时,指定的 CGI 应用程序行为不当...

    我有 IIS 6 我将 Mercurial 安装在 c program files mercurial 中 我在 c program files python 中安装了 Python 2 6 I added extension handli

随机推荐