Mercurial hook to set policy on tag names.
Idan Kamara
idankk86 at gmail.com
Wed Jul 20 12:23:47 UTC 2011
On Tue, Jul 19, 2011 at 4:01 PM, Oleksandr Gavenko <gavenkoa at gmail.com>
wrote:
>
> I write (in-process) hook to prevent add BAD tag name locally (which
> successfully work):
>
> .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
>
> How make this check for pretxnchangegroup hook (so prevent to adding
> bad named tags with push command on server side)?
>
> I try write this code:
>
> 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
>
> but when I push to repo with upper pretxnchangegroup hook enabled:
>
> $ hg tag gg
> $ hg push -f -r tip
> 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
>
> you can see that rev.tags() do not return gg tag! So it can not filter
The problem is the actual tag is (probably) not in the pushed csets.
If your server contains rev 0, and rev 1 is the result of `hg tag foo` and
is local,
that is rev 1 is tagging rev 0, then pushing rev 1 won't show 'foo' on any
of the incoming csets, because it already has the tagged cset, 0.
I'm not sure there's anything that can be done here on the server side,
short of inspecting the incoming csets, looking for .hgtags.
And this can get tricky, because if you have some rev is adding a bad tag,
then another
one is removing it, you wouldn't want to reject that.
Perhaps a saner approach would be to look at the incoming csets
that are also heads, and do the parsing of .hgtags on those.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial/attachments/20110720/f267c1fa/attachment-0002.html>
More information about the Mercurial
mailing list