我编写(进程内)钩子以防止在本地添加错误标签名称:
.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!