o ]Lb.@sddlmZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZmZmZddlmZmZmZdd Zd d ZeZd d ZdddZdaddZddZdddZejddZdddZ dS))absolute_importN)_)getattr) demandimportencodingerror extensionspycompatutil)procutil resourceutil stringutilc Cspt|r|}t|jd|j}n|d}|dkr&ttd||f|d|} t j } t rLt j | \} } | rL| rLt j dd| gt _ | } toz tt| }Wn]ttfyt } z tdt| }WnBttfyt }|jr|td|| |jr|td|||jstd }nd}tjtd || f|d wYnwWdn1swY| t _ z|dd dD]}t||}qWntyttd ||fwt|sttd||f|td||ft}z}z|d|||dt|}Wn[tyz}zNt |tj!r>|td||j"dfn|td|t#$|f|rP|js[|td|WYd}~Wt|}|%dd|||dSd}~wwWt|}|%dd|||nt|}|%dd|||w|r|rt&td||td||dfS)acall python hook. hook is callable object, looked up as name in python module. if callable returns "true", hook fails, else passes. if hook raises exception, treated as hook failure. exception propagates if throw is "true". reason for "true" meaning "hook failed" is so that unmodified commands (e.g. mercurial.commands.update) can be run as hooks without wrappers to convert return values...s(%s hook is invalid: "%s" not in a moduleNzhgext_%ss,exception from first failed import attempt: s-exception from second failed import attempt: s$run with --traceback for stack traces)%s hook is invalid: import of "%s" failedhintrs'%s hook is invalid: "%s" is not defineds(%s hook is invalid: "%s" is not callablescalling hook %s: %s )uirepohooktypeserror: %s hook failed: %s rs'error: %s hook raised an exception: %s s'(run with --traceback for stack trace) s pythonhooks,pythonhook-%s: %s finished in %0.2f seconds )TTs%s hook failedswarning: %s hook failed F)'callabler sysbytes __module____name__rfindr HookLoadErrorrsyspathr mainfrozenossplitr deactivated __import__sysstr ImportError SyntaxErrorexc_info tracebackflagwarn tracebackrAttributeErrornoter timer strkwargs Exception isinstanceAbortargsr forcebytestrlog HookAbort)rrhtypehnamefuncnamer3throwobjdmodnameoldpathsmodpathmodfilee1e2 tracebackhintp starttimerexcdurationrr0/usr/lib/python3/dist-packages/mercurial/hook.py pythonhook s      &        rJcCst}i}|dur|} |j| | r| r|j|d<||d<||d<|dd|dkr6|} n| dd|} | rEd|d<nd |d<t |D]$\} } | d krWqNt | r^| } t | ttfrjt| } | |d | <qN| dd |d r|} t||}|| kr|td||td||f|r|j}nt}|j|||d|fd}t|}|dd||||rt|}|rttd||f|td||f|S)Ns HG_PENDINGs HG_HOOKTYPEs HG_HOOKNAMEhookss%s:run-with-plainsauto1sHGPLAINschangessHG_s tonative.%sFsconverting hook "%s" to native srunning hook %s: %s s exthook-%s)environcwd blockedtagsexthooks)exthook-%s: %s finished in %0.2f seconds s %s hook %sswarning: %s hook %s )r r.currenttransactiondirstatewrite writependingrootconfigplain configboolr iteritemsrr1dictlistrpprintupperr shelltonativer-rrgetcwdsystemr5 explainexitrr6r*)rrr7namecmdr3r:rEenvtrrWkvoldcmdrOrFrHdescrrrI_exthooks^         rjc Cstt|}t|dd}|D] \}}||dd|tf}||kr.|\}}}} |||tf||<qddt|DS)z8return a list of (hook-id, cmd) pairs sorted by priorityT) _untrustedrcSsg|] \}}}}||fqSrr).0rDorfrgrrrI sz_allhooks..) _hookitemsitemsget_fromuntrustedsortedvalues) rhooksuntrustedhooksrbvalue trustedvaluelplolklvrrrI _allhookss  r}FcCsji}|jd|dD])\}}|ds|dsd|vrq |dd|d}| ft|f||f||<q |S)z)return all hooks items ready to be sortedrK) untrusteds priority.s tonative.:s priority.%sr) configitems startswith configintlen)rrkrurbrcpriorityrrrIrosrocCs|adS)N) _redirect)staterrrIredirectsrcCs<|jsdSt|D]\}}|dd|kr|rdSq dS)z/return True if a hook is configured for 'htype'FrrT) callhooksr}r")rr7r8rcrrrIhashooksrc Ks|jsdSg}t|D]\}}|dd|kr!|r!|||fq t||||fd|i|}d} |D] \}}||dp>| } q3| S)NFrrr:)rr}r"appendrunhooks) rrr7r:r3rur8rcresrFrrrIhook s rccs d}ztr6z$tj}tj}|dkr)|dkr)tjt|}t||Wn t t fy5YnwdVWztjWn"t yc}z|j t j t jt jfvrYt|WYd}~nd}~wwtr|dkrztjWn"t y}z|j t j t jt jfvrt|WYd}~nd}~wwt||t|dSdSdSztjWn"t y}z|j t j t jt jfvrt|WYd}~nd}~wwtr|dkrztjWn#t y}z|j t j t jt jfvrt|WYd}~nd}~wwt||t|www)z(Redirects stdout to stderr, if possible.rrN)rr stdoutfilenostderrflushr!dupdup2OSErrorr,IOErrorerrnoEPIPEEIOEBADFr StdioErrorclose) oldstdoutstdoutnostderrnoerrrrrIredirect_stdiosp                 rc Kst|}i}t|D]\}}|tur2|r$tjtd|tdd|td|d} d} n{t|rCt |||||||\} } nj| dr| dd kr|d d dd\} }t | } |rjtj|j| } z t| d |} Wnty|td |wt| |} n|d d} t ||||| ||\} } n t|||||||} d} | | f||<q Wd|S1swY|S) Nsuntrusted hook %s not executedssee 'hg help config.trusted'rs(warning: untrusted hook %s not executed rFspython:rs hghook.%ssloading %s hook failed: )r byteskwargsrrrrr6rr*rrJrcountrsplitr expandpathr!rjoinrUr loadpathr0rSrstriprj)rrr7rur:r3rr8rcrFraisedrmodhookfnrrrIrBsP         $$r)F)! __future__r contextlibrr!ri18nrr rrrrr r utilsr r rrJrjobjectrrr}rorrrrcontextmanagerrrrrrrIs*    t@   (