��c@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZejZej
Z
ejZejZejZejZejZejZejZejZejjZejZejZejZdZddd�Zejje_defd��YZee j �e _!e _ d�Z"d �Z#d
�Z$d�Z%d�Z&dd
�Z(d�Z)d�Z*d�Z+d�Z,d�Z-d�Z.d�Z/d�Z0d�Z1da2d�Z3d�Z4dd�Z5d�Z6d�Z7d�Z8e9ej:ej;g�Z<d�Z=dd�Z>dd�Z?d �Z@eAd!�ZBd"�ZCd#�ZDd$�ZEd%�ZFd&efd'��YZGddd(�ZHeIZJd)�ZKd*�ZLdS(+i�(t_NitrcCsPytj|||�SWn2tk
rK}t|jd||jf��nXdS(Ns%s: %s(tosutilt posixfiletWindowsErrortIOErrorterrnotstrerror(tnametmodet bufferingterr((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyRst winstdoutcBs;eZdZd�Zd�Zd�Zd�Zd�ZRS(s3stdout on windows misbehaves if sent through a pipecCs
||_dS(N(tfp(tselfR
((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt__init__)scCst|j|�S(N(tgetattrR
(Rtkey((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt__getattr__,scCs)y|jj�Wntk
r$nXdS(N(R
tcloseR(R((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyR/s
cCs�y_d}t|�}d}d|_x7||kr]||}|jj|||!�|}q'WWnDtk
r�}|jdkr��n|j�ttjd��nXdS(Ni�isBroken pipe(tlent softspaceR
twriteRRRtEPIPE(Rtstlimittltstarttendtinst((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyR5s
cCs_y|jj�SWnGtk
rZ}|jtjkr;�n|j�ttjd��nXdS(NsBroken pipe(R
tflushRRtEINVALRR(RR((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyRGs
(t__name__t
__module__t__doc__RRRRR(((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyR&s cCsFytj�ddkSWn'tk
rAdtjjdd�kSXdS(s+return true if run on windows 95, 98 or me.iitcommandtcomspectN(tsystgetwindowsversiontAttributeErrortostenvirontget(((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt
_is_win_9xRs
cCst�S(N(R,(((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt
openhardlinksYscCs.|d}|ddkr*|dd!}n|S(s<parses the output produced by patch and returns the filenameiit`ii�((toutput_linetpf((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytparsepatchoutput\s
c CsWd|j�krdpd}|r4d||fp7|}|rSd|||fpV|S(s$Build argument list for ssh or Plinktplinks-Ps-ps%s@%ss%s %s %s(tlower(tsshcmdthosttusertporttpflagtargs((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytsshargscscCsdS(N((tfRtx((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytsetflagsiscCsdS(N((tsrctdstR ((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytcopymodelscCstS(N(tFalse(tpath((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt checkexecoscCstS(N(RA(RB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt checklinkrscCsJt|dd�}|dk rF|�dkrFtj|�tj�ndS(Ntfilenoi(RtNonetmsvcrttsetmodeR)tO_BINARY(tfdtfno((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt setbinaryuscCs|jtjd�S(Nt/(treplaceR)tsep(RB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytpconvert|scCs|jdd�S(NRMs\(RN(RB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt localpathscCsttjj|��S(N(RPR)RBtnormpath(RB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyRR�scCs
tj|�S(N(tencodingtupper(RB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytnormcase�scCs"tjjttjj|���S(sX
Returns the true, canonical file system path equivalent to the given
path.
(R)RBRRRUtrealpath(RB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyRV�scCstS(N(RA(ts1ts2((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytsamestat�scCs2tdkrtjd�andtjd|�S(Ns(\\*)("|\\$)s"%s"s\1\1\\\2(t_quotereRFtretcompiletsub(R((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt
shellquote�scCstjdkrd|dS|S(s4Build a command string suitable for os.popen* calls.iiit"(iii(R&tversion_info(tcmd((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytquotecommand�scCs'|dtj7}tjt|�|�S(Ns 2> %s(R)tdevnulltpopenRb(R#R ((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyRd�scCstd�||fS(Nsexited with status %d(R(tcode((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytexplainexit�scCstS(N(tTrue(tst((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytisowner�scstjjdd�}g|j�jtj�D]}|^q.�tjj|�dj��krndg�n�fd�}tj|kr�||�SxTtjjdd�jtj�D]1}|tjj ||��}|dk r�|Sq�W|tjjtjj|���S(s*Find executable for command searching like cmd.exe does.
If command is a basename then PATH is searched for command.
PATH isn't searched if command is an absolute or relative path.
An extension from PATHEXT is found and added if not present.
If command isn't found None is returned.tPATHEXTs.COM;.EXE;.BAT;.CMDiR%cs5x.�D]&}||}tjj|�r|SqWdS(s:Will append extension (if needed) and return existing fileN(R)RBtexistsRF(tpathcommandtextt
executable(tpathexts(s5/sys/lib/python2.7/site-packages/mercurial/windows.pytfindexisting�s
tPATHN(
R)R*R+R3tsplittpathsepRBtsplitextROtjoinRFt
expandusert
expandvars(R#tpathextRmRpRBRn((Ros5/sys/lib/python2.7/site-packages/mercurial/windows.pytfindexe�s+"
(ccs:i}tj}x$|D]}t|�}tjj|�\}}|sOd}n|j|d�}|dkr!yYtgt j
|t�D]6\}}} || j�t
kr�t|�| f^q��}
WnCtk
r}|jdtjtjtjfkr�ni}
nX|j||
�}n|j|d�VqWdS(s�Stat each file in files. Yield each stat, or None if a file
does not exist or has a type we don't care about.
Cluster and cache stat per directory to minimize number of OS stat calls.t.iN(tstattS_IFMTRUR)RBRrR+RFtdictRtlistdirRgtst_modet_wantedkindstOSErrorRtENOENTRtENOTDIRt
setdefault(tfilestdircachetgetkindtnftdirtbasetcachetntkRtdmapR((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt statfiles�s(
4
cCsdS(siReturn the name of the user with the given uid.
If uid is None, return the name of the current user.N(RF(tuid((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytusername�scCsdS(skReturn the name of the group with the given gid.
If gid is None, return the name of the current group.N(RF(tgid((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt groupname�scCs�tj|�rdStj|�tjj|�\}}|sYtjj|�\}}nxg|r�|r�y$tj|�r~dStj|�Wnttfk
r�PnXtjj|�\}}q\WdS(s�special version of os.removedirs that does not remove symlinked
directories or junction points if they actually contain filesN(RR~R)trmdirRBRrt
ValueErrorR�(Rtheadttail((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt_removedirss
cCstyt|�Wn1tk
rA}|o5|jtjksB�qBnXyttjj|��Wntk
ronXdS(s.unlink and remove the directory if it is emptyN(tunlinkR�RR�R�R)RBtdirname(R;t
ignoremissingte((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt
unlinkpaths
cCs`ytj||�WnEtk
r[}|jtjkr>�nt|�tj||�nXdS(s=atomically rename file src to dst, replacing dst if it existsN(R)trenameR�RtEEXISTR�(R>R?R�((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyR�#s
cCstjgtjd S(Ni(R&Rntargv(((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytgethgcmd-scCs
t�dS(N(tKeyError(R((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytgroupmembers0scCstS(N(RA(R;((s5/sys/lib/python2.7/site-packages/mercurial/windows.pytisexec4st cachestatcBseZd�Zd�ZRS(cCsdS(N((RRB((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyR8scCstS(N(RA(R((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt cacheable;s(R R!RR�(((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyR�7s cCs�|dkr!tjtjf}n!t|ttf�sB|f}nx^|D]V}y<tjtj||�|�d}t j
|jd��SWqItk
r�qIXqIWdS(s* Look up a key/value name in the Windows registry.
valname: value name. If unspecified, the default value for the key
is used.
scope: optionally specify scope for registry lookup, this can be
a sequence of scopes to look up in order. Default (CURRENT_USER,
LOCAL_MACHINE).
isUTF-8N(
RFt_winregtHKEY_CURRENT_USERtHKEY_LOCAL_MACHINEt
isinstancetlistttupletQueryValueExtOpenKeyRSttolocaltencodetEnvironmentError(RtvalnametscopeRtval((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt lookupreg>s
"
cCstS(s(check whether a stat result is a symlink(RA(Rh((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt
statislinkUscCstS(s1check whether a stat result is an executable file(RA(Rh((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt
statisexecYs(Mti18nRRRSRRGR)R[R{R&R�twin32texecutablepathtgetusert
hidewindowtmakedirtnlinkstoslinkt
samedevicetsamefiletsetsignalhandlert
spawndetachedRBRrt termwidthttestpidR�tumaskRR"tobjectRtstdoutt
__stdout__R,R-R1R:R=RFR@RCRDRLRPRQRRRURVRYRZR^RbRdRfRiRytsettS_IFREGtS_IFLNKR�R�R�R�R�RAR�R�R�R�R�R�R�RgtexpandglobsR�R�(((s5/sys/lib/python2.7/site-packages/mercurial/windows.pyt<module>svT *
|