mò óRÅDc@sTdkTdklZdkTeeƒdƒdefd„ƒYZddd„Z dS((t*(sgettextsgetpass mercurial:utiltcheckercBs;tZdZd„Zd„Zd„Zd„Zd„ZRS(s acl checker.cCsñ|ii|ƒp(|iitdƒ|ƒdtfSn|iƒ}g}|ii |ƒD]$\}}||jo ||q^q^~}|iitdƒ|t|ƒ|fƒ|o#ti|iid|ƒd}n ti}|tfS(s/return tuple of (match function, list enabled).sacl: %s not enabled s(acl: %s enabled, %d entries for user %s tnamesiN(tselftuit has_configtkeytdebugt_tNonetFalsetgetusertthisusert_[1]t configitemstpattusertpatstlentutiltmatchertrepotroottmatchtnevertTrue(RRRR R RRR((t-/usr/lib/python2.4/site-packages/hgext/acl.pyt buildmatch8s D)# cCs|iS(s"return name of authenticated user.N(RR(R((RR IscCs‹||_||_tiƒ|_|iiddƒ}|o|ii|ƒn|i dƒ\|_ |_ |i dƒ\|_ |_ dS(Ntacltconfigs acl.allowsacl.deny(RRRtgetpassR RRtcfgt readconfigRtallowt allowabletdenytdeniable(RRRR((Rt__init__Ms  cCs(|iidddƒiƒ}||jS(s<true if incoming changes from this source should be skipped.RtsourcestserveN(RRRtsplitt ok_sourcestsource(RR*R)((Rt skipsourceWscCs-|iii|ƒd}|ionxk|D]_}|i|ƒoI|i i t dƒ|i ƒ|fƒt it dƒt|ƒƒ‚q*q*Wn|ionxk|D]_}|i|ƒpI|i i t dƒ|i ƒ|fƒt it dƒt|ƒƒ‚q¢q¢Wn|i i t dƒt|ƒƒdS(s1return if access allowed, raise exception if not.isacl: user %s denied on %s s#acl: access denied for changeset %ssacl: user %s not allowed on %s sacl: allowing changeset %s N(RRt changelogtreadtnodetfilesR$tfR#RRRR RtAborttshortR"R!(RR.R/R0((Rtcheck\s &+ &+(t__name__t __module__t__doc__RR R%R+R3(((RR5s    c KsÆ|djotitdƒ|ƒ‚nt||ƒ}|i|ƒo|i tdƒ|ƒdSn|i i t |ƒƒ}|i iƒ}x0t||ƒD]} |i|i i| ƒƒqŸWdS(Ntpretxnchangegroups=config error - hook type "%s" cannot stop incoming changesetss)acl: changes have source "%s" - skipping (thooktypeRR1RRRRtcR+R*RR,trevtbinR.tstarttcounttendtxrangeR3( RRR8R.R*tkwargsR9R>R<R:((Rthookos N( tmercurial.demandloadtmercurial.i18ntgettextRtmercurial.nodet demandloadtglobalstobjectRR RA(RARR((Rt?0s  :