# HG changeset patch # User Christian Ebert # Date 1280106093 18000 # Node ID f5aa20e177c0b2a206e2a40c25ad111e2573dd09 # Parent 8f8a7976f4bc640e08f1ead6885dbfba4731151d keyword: move collecting of [keyword] patterns to reposetup (issue2303) When cloning, prevent [keyword] filename patterns configured locally in the source directory to persist during the update in the destination. a) move [keyword] retrieval (back) to reposetup b) remove the corresponding global kwtools attributes Add test cases. diff -r 8f8a7976f4bc -r f5aa20e177c0 hgext/keyword.py --- a/hgext/keyword.py Wed Jul 21 22:22:28 2010 +0200 +++ b/hgext/keyword.py Sun Jul 25 20:01:33 2010 -0500 @@ -108,7 +108,7 @@ svnutcdate = lambda x: util.datestr((x[0], 0), '%Y-%m-%d %H:%M:%SZ') # make keyword tools accessible -kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']} +kwtools = {'templater': None, 'hgcmd': ''} def _defaultkwmaps(ui): @@ -141,11 +141,10 @@ provides keyword substitution functions. ''' - def __init__(self, ui, repo): + def __init__(self, ui, repo, inc, exc): self.ui = ui self.repo = repo - self.match = match.match(repo.root, '', [], - kwtools['inc'], kwtools['exc']) + self.match = match.match(repo.root, '', [], inc, exc) self.restrict = kwtools['hgcmd'] in restricted.split() self.record = kwtools['hgcmd'] in recordcommands.split() @@ -438,23 +437,15 @@ def uisetup(ui): - '''Collects [keyword] config in kwtools. - Monkeypatches dispatch._parse if needed.''' - - for pat, opt in ui.configitems('keyword'): - if opt != 'ignore': - kwtools['inc'].append(pat) - else: - kwtools['exc'].append(pat) + ''' Monkeypatches dispatch._parse to retrieve user command.''' - if kwtools['inc']: - def kwdispatch_parse(orig, ui, args): - '''Monkeypatch dispatch._parse to obtain running hg command.''' - cmd, func, args, options, cmdoptions = orig(ui, args) - kwtools['hgcmd'] = cmd - return cmd, func, args, options, cmdoptions + def kwdispatch_parse(orig, ui, args): + '''Monkeypatch dispatch._parse to obtain running hg command.''' + cmd, func, args, options, cmdoptions = orig(ui, args) + kwtools['hgcmd'] = cmd + return cmd, func, args, options, cmdoptions - extensions.wrapfunction(dispatch, '_parse', kwdispatch_parse) + extensions.wrapfunction(dispatch, '_parse', kwdispatch_parse) def reposetup(ui, repo): '''Sets up repo as kwrepo for keyword substitution. @@ -465,15 +456,23 @@ Monkeypatches patch and webcommands.''' try: - if (not repo.local() or not kwtools['inc'] - or kwtools['hgcmd'] in nokwcommands.split() + if (not repo.local() or kwtools['hgcmd'] in nokwcommands.split() or '.hg' in util.splitpath(repo.root) or repo._url.startswith('bundle:')): return except AttributeError: pass - kwtools['templater'] = kwt = kwtemplater(ui, repo) + inc, exc = [], ['.hg*'] + for pat, opt in ui.configitems('keyword'): + if opt != 'ignore': + inc.append(pat) + else: + exc.append(pat) + if not inc: + return + + kwtools['templater'] = kwt = kwtemplater(ui, repo, inc, exc) class kwrepo(repo.__class__): def file(self, f): diff -r 8f8a7976f4bc -r f5aa20e177c0 tests/test-keyword --- a/tests/test-keyword Wed Jul 21 22:22:28 2010 +0200 +++ b/tests/test-keyword Sun Jul 25 20:01:33 2010 -0500 @@ -283,8 +283,17 @@ echo % cat a cat a +echo % clone +cd .. + +echo % expansion in dest +hg --quiet clone Test globalconf +cat globalconf/a +echo % no expansion in dest +hg --quiet --config 'keyword.**=ignore' clone Test localconf +cat localconf/a + echo % clone to test incoming -cd .. hg clone -r1 Test Test-a cd Test-a cat <> .hg/hgrc diff -r 8f8a7976f4bc -r f5aa20e177c0 tests/test-keyword.out --- a/tests/test-keyword.out Wed Jul 21 22:22:28 2010 +0200 +++ b/tests/test-keyword.out Sun Jul 25 20:01:33 2010 -0500 @@ -333,6 +333,17 @@ do not process $Id: xxx $ $Xinfo: User Name : firstline $ +% clone +% expansion in dest +expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ +do not process $Id: +xxx $ +$Xinfo: User Name : firstline $ +% no expansion in dest +expand $Id$ +do not process $Id: +xxx $ +$Xinfo$ % clone to test incoming requesting all changes adding changesets