【问题标题】:Current bookmark on Mercurial HookMercurial Hook 上的当前书签
【发布时间】:2017-05-30 05:17:28
【问题描述】:

我想确保当本地 repo 更改被推送到我们的主要远程 repo 时,人们正在使用书签推送更改。因此,要么是他们第一次使用他们在本地添加的书签(在他们的克隆仓库中)推送,要么他们正在远程推送到已经添加书签的行。

我已经在 .hgrc 内的 hgrc 文件中为 mercurial 设置了一个 python 钩子,就像这样...

[钩子] pretxnchangegroup.push = python:./hg/pushhook.py:bookmakrhook

当我推送时,我会收到回调并调用我的函数。如何获取从用户的本地存储库更改为每个人都从中克隆的主存储库的活动书签?

我的 python 挂钩文件中有这个签名:

def 书签钩子(ui, repo, **kwargs)

我似乎无法对 repo 实例做任何事情,除了使用

获取分支等

repo[无].branches()

这是一个开始,因为我至少可以确保他们正在推送到默认值,而不是创建另一个头(我只想要一个分支 - 默认值和许多书签)。

【问题讨论】:

  • 好的,所以当远程服务器上已经有书签时,我可以使用 repo._bookmarks 获取它,所以这对我来说可以检查我正在推送到书签,但第一次从本地到远程仓库的推送实际上是在远程仓库上创建书签,书签还没有在远程仓库上,所以不存在,所以检查 _bookmarks 将失败。所以我需要一种方法来查看是否是第一次创建书签,而不仅仅是获取远程仓库中已经存在的 _bookmarks。
  • 通过hg incoming检查远程书签不存在怎么样?

标签: python mercurial hook mercurial-hook


【解决方案1】:

书签在 pretxnclose 挂钩中可用。这对我有用(推送到“发布”分支时需要一个书签)。处理推送到现有书签和推送新书签。

def require_bookmark_on_release(ui, repo, **kwargs):
    if repo[None].branch() == 'release' and not repo.currenttransaction().changes['bookmarks']:
        ui.warn('A bookmark is required when committing to the release branch\n')
        return True
    else:
        return False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多