diff -r 5acf520f2115 -r 0617e7d497f6 hgkw/pretxnkw.py --- a/hgkw/pretxnkw.py Thu Dec 21 11:02:21 2006 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -from mercurial.i18n import _ -from mercurial import cmdutil, commands, util -import os.path, re, sys - -hgkeywords = 'Id|Header|Author|Date|Revision|RCSFile|Source' - -def pretxnkw(ui, repo, hooktype, **args): - '''Collects candidates for keyword expansion on commit - and expands keywords in working dir. - NOTE: for use in combination with hgext.keyword!''' - - if hooktype != 'pretxncommit': - # bail out with error - return True - - # reparse args, opts again as pretxncommit hook is silent about them - cmd, sysargs, globalopts, cmdopts = commands.parse(ui, sys.argv[1:])[1:] - # exclude tag and import - if repr(cmd).split()[1] in ('tag', 'import_'): - return False - files, match, anypats = cmdutil.matchpats(repo, sysargs, cmdopts) - - # validity checks should have been done already - modified, added = repo.status(files=files, match=match)[:2] - candidates = [f for f in modified + added if not f.startswith('.hg')] - - if not candidates: - return False - - # only check files that have hgkwencode assigned as encode filter - files = [] - # python2.4: files = set() - for pat, opt in repo.ui.configitems('keyword'): - if opt == 'expand': - mf = util.matcher(repo.root, '', [pat], [], [])[1] - for candidate in candidates: - if mf(candidate) and candidate not in files: - files.append(candidate) - # python2.4: - # if mf(candidate): files.add(candidate) - - if not files: # nothing to do - return False - - user, date = repo.changelog.read(repo.changelog.tip())[1:3] - strdate = util.datestr(date=date) - shortuser = util.shortuser(user) - shortdate = util.datestr(date=date, format=util.defaultdateformats[0]) - # %Y-%m-%d %H:%M:%S - - re_kw = re.compile(r'\$(%s)(: [^$]+? )?\$' % hgkeywords) - - for f in files: - data = repo.wfile(f).read() - if not util.binary(data): - - def kwexpand(matchobj): - RCSFile = os.path.basename(f)+',v' - Source = os.path.join(repo.root, f)+',v' - Revision = args['node'][:12] - Date = strdate - Author = user - revdateauth = '%s %s %s' % (Revision, shortdate, shortuser) - Header = '%s %s' % (Source, revdateauth) - Id = '%s %s' % (RCSFile, revdateauth) - return '$%s: %s $' % ( - matchobj.group(1), eval(matchobj.group(1))) - - data, kwct = re_kw.subn(kwexpand, data) - if kwct: - ui.note(_('expanding keywords in %s\n' % f)) - # backup file? - repo.wfile(f, 'w').write(data)