# $Hg: hgkw/pretxnkw.py,v$frommercurial.i18nimportgettextas_frommercurial.demandloadimportdemandloaddemandload(globals(),'hgkw:kwutil mercurial:util re')kwencodefilter='hgkwencode'defpretxnkw(ui=None,repo=None,hooktype='',**args):'''Important: returns False on success, True on failure.'''node=args['node'][0:12]ifnotuiornotrepoornotnodeorhooktype!='pretxncommit':# bail out with errorreturnTruemodified,added=repo.status()[:2]candidates=modified+addedfiles=[]forpat,cmdinrepo.ui.configitems('encode'):ifcmd.endswith(kwencodefilter):mf=util.matcher(repo.root,'',[pat],[],[])[1]forcandidateincandidates:ifmf(candidate):files.append(candidate)ifnotfiles:# nothing to doreturnFalsere_kw=kwutil.rekw()kword=kwutil.mkkw(repo,tip=True,node=node)re_kwcheck=re.compile(r'[$]Hg: (.*?),v.*?\$')forfinfiles:data=repo.wfile(f).read()# check for keywords with incorrect filename# eg. if you forgot to update filename manually after "hg mv"invalids=[mforminmap(str,re_kwcheck.findall(data))ifm!=f]ifinvalids:invalids=['%sHg: %s,v$'%('$',i)foriininvalids]ui.warn(_('%d invalid keyword filenames in file %s:\n''%s\nplease correct to %sHg: %s,v$\n'%(len(invalids),f,', '.join(invalids),'$',f)))returnTrue# substitute <Dollar>(Hg|Id): <basename>,v.*<Dollar>data,kwct=re_kw.subn(kword,data)ifkwct:# backup file and write with expanded keywordui.note(_('expanding keywords in %s\n'%f))absname=repo.wjoin(f)util.copyfile(absname,absname+'~')repo.wfile(f,'w').write(data)returnFalse