# $Hg: pretxnkw.py,v$frommercurial.i18nimportgettextas_frommercurial.demandloadimportdemandloaddemandload(globals(),'hgkw:kwutil mercurial:util os.path 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()[1:3]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.*?\$')forfilenameinfiles:data=repo.wopener(filename,'rb').read()bn=os.path.basename(filename)# check for keywords with incorrect basename# eg. if you forgot to update basename manually after "hg mv"failures=[mforminmap(str,re_kwcheck.findall(data))ifm!=bn]iffailures:failures=['%sHg: %s,v$'%('$',nobn)fornobninfailures]ui.warn(_('%d incorrect basenames in file %s:\n''%s\nplease correct to %sHg: %s,v$\n'%(len(failures),filename,', '.join(failures),'$',bn)))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'%filename))util.copyfile(filename,filename+'~')repo.wopener(filename,'wb').write(data)returnFalse