# HG changeset patch # User Christian Ebert # Date 1185003673 -7200 # Node ID affc18a621f5e234028c86480b299aafd5e7da35 # Parent 8d16b70359da0d0f548034e7fcad0dcfd2d9b615 Make more args mandatory; flag keywordmatcher as helper diff -r 8d16b70359da -r affc18a621f5 hgkw/keyword.py --- a/hgkw/keyword.py Fri Jul 20 15:20:16 2007 +0200 +++ b/hgkw/keyword.py Sat Jul 21 09:41:13 2007 +0200 @@ -98,20 +98,6 @@ '''Returns hgdate in cvs-like UTC format.''' return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) -def keywordmatcher(ui, repo): - '''Collects include/exclude filename patterns for expansion - candidates of current configuration. Returns filename matching - function if include patterns exist, None otherwise.''' - inc, exc = [], ['.hg*'] - for pat, opt in ui.configitems('keyword'): - if opt != 'ignore': - inc.append(pat) - else: - exc.append(pat) - if not inc: - return None - return util.matcher(repo.root, inc=inc, exc=exc)[1] - class kwtemplater(object): ''' Sets up keyword templates, corresponding keyword regex, and @@ -127,12 +113,12 @@ 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', } - def __init__(self, ui, repo, path='', node=None, expand=True): + def __init__(self, ui, repo, expand, path='', node=None): self.ui = ui self.repo = repo + self.t = expand or None self.path = path self.node = node - self.t = expand or None templates = dict(ui.configitems('keywordmaps')) if templates: @@ -192,7 +178,7 @@ return text return self.re_kw.sub(r'$\1$', text) - def overwrite(self, candidates, man, commit=True): + def overwrite(self, candidates, man, commit): '''Overwrites files in working directory if keywords are detected. Keywords are expanded if keyword templater is initialized, otherwise their substitution is removed.''' @@ -201,9 +187,9 @@ notify = (self.ui.note, self.ui.debug)[commit] files = [] for f in candidates: - fp = self.repo.file(f, kwcnt=True, kwexp=expand) - data, cnt = fp.read(man[f]) - if cnt: + fp = self.repo.file(f, kwexp=expand, kwcnt=True) + data, kwfound = fp.read(man[f]) + if kwfound: notify(_('overwriting %s %s keywords\n') % (f, action)) try: self.repo.wwrite(f, data, man.flags(f)) @@ -247,7 +233,21 @@ return t2 != text return super(kwfilelog, self).cmp(node, text) -def _overwrite(ui, repo, files=None, expand=True): +def _keywordmatcher(ui, repo): + '''Collects include/exclude filename patterns for expansion + candidates of current configuration. Returns filename matching + function if include patterns exist, None otherwise.''' + inc, exc = [], ['.hg*'] + for pat, opt in ui.configitems('keyword'): + if opt != 'ignore': + inc.append(pat) + else: + exc.append(pat) + if inc: + return util.matcher(repo.root, inc=inc, exc=exc)[1] + return None + +def _overwrite(ui, repo, files, expand): '''Expands/shrinks keywords in working directory.''' wlock = None try: @@ -256,7 +256,7 @@ ctx = repo.changectx() if not ctx: raise hg.RepoError(_('no revision checked out')) - kwfmatcher = keywordmatcher(ui, repo) + kwfmatcher = _keywordmatcher(ui, repo) if kwfmatcher is None: ui.warn(_('no files configured for keyword expansion\n')) return @@ -269,8 +269,9 @@ if not files: ui.warn(_('files not configured for expansion or untracked\n')) return - kwt = kwtemplater(ui, repo, node=ctx.node(), expand=expand) - kwt.overwrite(files, m, commit=False) + commit = False + kwt = kwtemplater(ui, repo, expand, node=ctx.node()) + kwt.overwrite(files, m, commit) wlock = None finally: del wlock @@ -284,14 +285,16 @@ changing keyword expansion configuration or if you experience problems with "hg import" ''' - _overwrite(ui, repo, files=args, expand=False) + expand = False + _overwrite(ui, repo, args, expand) def expand(ui, repo, *args): '''expand keywords in working directory run after (re)enabling keyword expansion ''' - _overwrite(ui, repo, files=args) + expand = True + _overwrite(ui, repo, args, expand) def demo(ui, repo, *args, **opts): '''print [keywordmaps] configuration and an expansion example @@ -369,16 +372,16 @@ if not repo.local() or _getcmd() in nokwcommands: return - kwfmatcher = keywordmatcher(ui, repo) + kwfmatcher = _keywordmatcher(ui, repo) if kwfmatcher is None: return class kwrepo(repo.__class__): - def file(self, f, kwcnt=False, kwexp=True): + def file(self, f, kwexp=True, kwcnt=False): if f[0] == '/': f = f[1:] if kwfmatcher(f): - kwt = kwtemplater(ui, self, path=f, expand=kwexp) + kwt = kwtemplater(ui, self, kwexp, path=f) return kwfilelog(self.sopener, f, kwt, kwcnt) return filelog.filelog(self.sopener, f) @@ -404,8 +407,9 @@ and not os.path.islink(self.wjoin(f))] if candidates: m = self.manifest.read(cl[0]) - kwt = kwtemplater(ui, self, node=node) - kwt.overwrite(candidates, m) + expand = commit = True + kwt = kwtemplater(ui, self, expand, node=node) + kwt.overwrite(candidates, m, commit) wlock = None return node finally: