�8�c@sVddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZe
ZejjZejjZejZejZejZeZejd�Zeje�d�Zd�Zd�Zd�Zd�Zd �Zd
�Zdd�Z!d�Z"d
�Z#d�Z$d�Z%d�Z&d�Z'd�Z(d�Z)d�Z*ej+dkr�ddl,Z,d�Z*d�Z-n'ej.d@kr�d�Z-nejj-Z-ej+dkr*e/dddgd e0�Z1d!�Z*d"�Z"d#�Z#nd$�Z2d%�Z3d&d'�Z4d(�Z5d)�Z6d*�Z7d+�Z8d,�Z9e:ej;ej<g�Z=d-�Z>d.�Z?dd/�Z@dd0�ZAd1�ZBd2�ZCd3�ZDd4�ZEd5�ZFed6�ZGddd7�ZHd8�ZId9eJfd:��YZKd;�ZLd<e
j
fd=��YZMd>�ZNd?�ZOdS(Ai�(t_NicCsk|jdd�}t|�dkr.d|fS|djd�}|rU||dfS|dd|dfS(s�Same as posixpath.split, but faster
>>> import posixpath
>>> for f in ['/absolute/path/to/file',
... 'relative/path/to/file',
... 'file_alone',
... 'path/to/directory/',
... '/multiple/path//separators',
... '/file_at_root',
... '///multiple_leading_separators_at_root',
... '']:
... assert split(f) == posixpath.split(f), f
t/iti(trsplittlentrstrip(tpthttnh((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytsplits
cCstS(s@return true if it is safe to hold open file handles to hardlinks(tTrue(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
openhardlinks-scCstj|�jS(s-return number of hardlinks for the given file(tostlstattst_nlink(tname((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytnlinks1scCs}|d}tjjdkr?|ddkry|dd!}qyn:|jd�ry|jd�ryd|kry|dd!}n|S( s<parses the output produced by patch and returns the filenameitOpenVMSit`ii�t't (Rtsystplatformt
startswithtendswith(toutput_linetpf((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytparsepatchoutput5s
*cCs6|rd||fp|}|r2d||fp5|S(sBuild argument list for sshs%s@%ss%s -p %s((tsshcmdthosttusertporttargs((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytsshargs@scCstj|�jd@dkS(s"check whether a file is executablei@i(RR
tst_mode(tf((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytisexecEscCsmtj|�j}|r�tj|�s�t|�}|j�}|j�tj|�ytj ||�Wq�t
k
r�t|d�}|j|�|j�q�XndStj|�r
tj|�}tj|�t|d�}|j|�|j�dt
@}n|d@}|rE|rEtj|||d@d?t
@B�n$|ri|ritj||d@�ndS(Ntwi�i@i$i(RR
R"tstattS_ISLNKtopentreadtclosetunlinktsymlinktOSErrortwritetreadlinktumasktchmod(R#tltxtstfptdatatsx((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytsetflagsIs4
$
cCs�ytj|�jd@}WnQtk
rm}|jtjkrD�n|}|dkr`t}n|dM}nXtj||�dS(s�Copy the file mode from the file at path src to dst.
If src doesn't exist, we're using mode instead. If mode is None, we're
using umask.i�i�N( RR
R"R-terrnotENOENTtNoneR0R1(tsrctdsttmodeR"tinst((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytcopymodems
cCs�y�tjtjBtjB}tjd|dd�\}}zatj|�tj|�jd@}||@}tj |||A�tj|�jd@|k}Wdtj
|�XWnttfk
r�t
SX|p�|S(s}
Check whether the given path is on a filesystem with UNIX-like exec flags
Requires a directory (like /foo/.hg)
tdirtprefixs
hg-checkexec-i�N(R&tS_IXUSRtS_IXGRPtS_IXOTHttempfiletmkstempRR*R"R1R+tIOErrorR-tFalse(tpatht EXECFLAGStfhtfntmtnew_file_has_exectexec_flags_cannot_flip((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt checkexec|s
cCs\tjd|dd�}y%tjd|�tj|�tSWnttfk
rWtSXdS(s?check whether the given path is on a symlink-capable filesystemRARBs
hg-checklink-t.N( RFtmktempRR,R+R
R-tAttributeErrorRI(RJR((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt checklink�s
cCsdS(s�Check that the base-relative path is a valid filename on this platform.
Returns None if the path is ok, or a UI string describing the problem.N((RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytcheckosfilename�scCsdS(N((tfd((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt setbinary�scCs|S(N((RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytpconvert�scCs|S(N((RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt localpath�scCstjj||�S(swReturns whether path1 and path2 refer to the same file. This is only
guaranteed to work for files, not directories.(RRJtsamefile(tfpath1tfpath2((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR[�scCs.tj|�}tj|�}|j|jkS(syReturns whether fpath1 and fpath2 are on the same device. This is only
guaranteed to work for files, not directories.(RR
tst_dev(R\R]tst1tst2((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
samedevice�scCs
|j�S(N(tlower(RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytnormcase�stdarwincCs,y|jd�|j�SWntk
r.nXy|jd�}Wn�tk
rd}d}d}xc|D][}t|�}|r�|dks�|dkr�|djg|D]}dt|�^q��7}d}d}n|dkr�dkr�|7}qk|dkr`d|ko"d knr`|d
kr<d}n|dkrQd
}nd}|}qk|dkr�d|ko�dknr�||7}|d8}|s�||7}d}q�qk|d|7}qkW|djg|D]}dt|�^q��7}|jd�}nXtjd|�j�jd�S(s�
Normalize a filename for OS X-compatible comparison:
- escape-encode invalid characters
- decompose to NFD
- lowercase
>>> normcase('UPPER')
'upper'
>>> normcase('Café')
'cafe\xcc\x81'
>>> normcase('É')
'e\xcc\x81'
>>> normcase('���.JPG') # issue3918
'%b8%ca%c3\xca\xbe%c8.jpg'
tasciisutf-8Rii�i�s%%%02Xi�i�i�ii�iitNFD(tdecodeRbtUnicodeDecodeErrortordtjointunicodedatat normalizetencode(RJtuR4tgR2tctoR3((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyRc�sH
0
( (
0cCs�d}d}ytj||�}Wn,tk
rP}|jtjkrJ|S�nXz$tj||dd�jd�SWdtj|�XdS(sL
Returns the true, canonical file system path equivalent to the given
path.
Equivalent means, in this case, resulting in the same, unique
file system link to the path. Every file system entry, whether a file,
directory, hard link or symbolic link or special, will have a single
path preferred by the system, but may allow multiple, differing path
lookups to point to it.
Most regular UNIX file systems only allow a file system entry to be
looked up by its distinct path. Obviously, this does not apply to case
insensitive file systems, whether case preserving or not. The most
complex issue to deal with is file systems transparently reencoding the
path, such as the non-standard Unicode normalisation required for HFS+
and HFSX.
i2i tiN(RR(R-R9R:tfcntlRR*(RJt F_GETPATHt O_SYMLINKRWterr((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytrealpaths$iitfinalcCs:tjj|�r"tjj|�Stjjd|�SdS(Ns./(RRJtisabsRw(RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyRw*stcygwins/usr/bins/usr/libs /cygdrivetreversecCs�t|�}|dks+|dtjkr8tj|�SxgtD]_}|j|�sZq?nt|�}||krv|S||tjkr?|tj||�Sq?Wtj|�S(Ni(RRtseptencodingtuppertcygwinmountpointsR(RJtpathlentmptmplen((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyRc@s
cCstS(N(RI(RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyRQWscCstS(N(RI(RJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyRU]scCs2tjjdkrd|Sd|jdd�SdS(NRs"%s"s'%s'Rs'\''(RRRtreplace(R4((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
shellquote`scCs|S(N((tcmd((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytquotecommandfstrcCstj||�S(N(Rtpopen(tcommandR>((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR�iscCsUtjjdkrtSytj|d�tSWn tk
rP}|jtjkSXdS(s5return False if pid dead, True if running or not sureRiN(RRRR
tkillR-R9tESRCH(tpidR?((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyttestpidlscCs6|dkr td�||fStd�||fS(s}return a 2-tuple (desc, code) describing a subprocess status
(codes from kill are negative - not os.system/wait encoding)isexited with status %dskilled by signal %d(R(tcode((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytexplainexitvscCs|jtj�kS(s;Return True if the stat object st is from the current user.(tst_uidRtgetuid(tst((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytisowner}scCs�tjdkr|Sd�}tj|kr5||�Stjdkr]|tjjd|��SxTtjjdd�jtj �D]1}|tjj||��}|dk r|SqWdS(s�Find executable for command searching like which does.
If command is a basename then PATH is searched for command.
PATH isn't searched if command is an absolute or relative path.
If command isn't found None is returned.RcSs/tjj|�r+tj|tj�r+|SdS(s'Will return executable if existing fileN(RRJtisfiletaccesstX_OKR;(t
executable((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytfindexisting�s'tplan9s/bintPATHRN(RRRR|RJRjtenvirontgetR tpathsepR;(R�R�RJR�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytfindexe�s
(cCsdS(N((((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytsetsignalhandler�sccs�tj}tj}x~|D]v}y.||�}||j�tkrLd}nWn:tk
r�}|jtj tj
fkr��nd}nX|VqWdS(sqStat each file in files. Yield each stat, or None if a file does not
exist or has a type we don't care about.N(RR
R&tS_IFMTR"t_wantedkindsR;R-R9R:tENOTDIR(tfilesR
tgetkindtnfR�Rv((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt statfiles�s
cCs
tj�S(sreturn name of current user(tgetpasstgetuser(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR��scCsO|dkrtj�}nytj|�dSWntk
rJt|�SXdS(siReturn the name of the user with the given uid.
If uid is None, return the name of the current user.iN(R;RR�tpwdtgetpwuidtKeyErrortstr(tuid((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytusername�s
cCsO|dkrtj�}nytj|�dSWntk
rJt|�SXdS(skReturn the name of the group with the given gid.
If gid is None, return the name of the current group.iN(R;RtgetgidtgrptgetgrgidR�R�(tgid((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt groupname�s
cCsttj|�j�S(skReturn the list of members of the group with the given
name, KeyError if the group does not exist.
(tlistR�tgetgrnamtgr_mem(R((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytgroupmembers�scCs*tjtjttdd�B|d|�S(NtP_DETACHi(RtspawnvptP_NOWAITtgetattr(R ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
spawndetached�scCstjd S(Ni(Rtargv(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytgethgcmd�scCs8y ddl}ddl}ddl}x�jtjtjfD]�}y�y|j�}Wntk
row@nXt j
|�s�w@nyB|j||jd�}|jd|�d}|dkr�|SWntk
r�nXWq@t
k
r�q@tk
r}|dtjkrq�q@Xq@WWntk
r3nXdS( Ni�RrithiiiPt(ttermiostarrayRsRtstderrtstdouttstdintfilenoRTRtisattytioctlt
TIOCGWINSZt
ValueErrorRHR9tEINVALtImportError(R�R�RstdevRWtarritwidthte((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt termwidth�s4$
cCstj|�dS(N(Rtmkdir(RJt
notindexed((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytmakedir�scCszytj|�Wn1tk
rD}|o8|jtjksE�qEnXytjtjj|��Wntk
runXdS(s.unlink and remove the directory if it is emptyN(RR+R-R9R:t
removedirsRJtdirname(R#t
ignoremissingR�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
unlinkpath�s
cCsdS(N(R;(tkeyRtscope((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt lookupregscCsdS(s�Hide current shell window.
Used to hide the window opened when starting asynchronous
child process under Windows, unneeded on other systems.
N((((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
hidewindow st cachestatcBs5eZd�Zd�ZejZd�Zd�ZRS(cCstj|�|_dS(N(RR&(tselfRJ((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt__init__scCst|jj�S(N(tboolR&tst_ino(R�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt cacheablesc
Cs�y�|jj|jjko�|jj|jjko�|jj|jjko�|jj|jjko�|jj|jjko�|jj|jjko�|jj|jjko�|jj|jjko�|jj |jj kSWnt
k
r�tSXdS(N(R&R"R�R^RR�tst_gidtst_sizetst_mtimetst_ctimeRTRI(R�tother((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt__eq__s
cCs||kS(N((R�R�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt__ne__-s(t__name__t
__module__R�R�tobjectt__hash__R�R�(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR�s
cCsdS(N(R;(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pytexecutablepath0stunixdomainservercBseZd�Zd�ZRS(cCsgtt|�jtj�|d}||�|_|_tjj|j�r�tjj |j�r{tj
|j�|_q�tj|j�ny|j|j�Wn�tj
k
rU}|jddkrOtjdd|�}tjj||�|_y*|j|j�tj|j|j�WqRttj
fk
rK|j��qRXqV�nX|jd�dS(s2Create a unix domain socket with the given prefix.s.sockisAF_UNIX path too longRBshg-%s-iN(tsuperR�R�tsockettAF_UNIXRwRJRtislinktexistsR/R+tbindterrorR RFtmkdtempRjR,R-tcleanuptlisten(R�Rjt subsystemtsocknameRvttmpdir((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR�4s*
cCsgd�}|tj|j�|j|jkrc|tj|j�|tjtjj|j��ndS(NcSs@y||�Wn+tk
r;}|jtjkr<�q<nXdS(N(R-R9R:(R#RJRv((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
okayifmissingOs
(RR+RJRwtrmdirR�(R�R�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR�Ns
(R�R�R�R�(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyR�3s cCs|otj|j�S(s(check whether a stat result is a symlink(R&R'R"(R�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
statislink[scCs|o|jd@dkS(s1check whether a stat result is an executable filei@i(R"(R�((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt
statisexec_s(iiisfinal(Pti18nRR}RRR9R&R�R�R�R�RFRkR(t posixfileRJtnormpathtsamestattlinktoslinkR+trenameRItexpandglobsR0R RRRR!R$R8R;R@RQRURVRXRYRZR[RaRcRRsRwtversion_infotsortedR
RR�R�R�R�R�R�R�R�tsettS_IFREGtS_IFLNKR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R(((s3/sys/lib/python2.7/site-packages/mercurial/posix.pyt<module>s�x
$ B!
(
|