
    6h                       S SK Jr  S SKrS SKrS SKrS SKrSSKJrJ	r	  S r
SS jr\	R                  (       d  \rgS SKr\R                   R"                  r\R&                  r\R*                  =rr\R0                  r\" S5      R4                  rSrSrS	rSrS
r S	r!Sr"Sr#Sr$S r%Sr&Sr'Sr(Sr)\\\\R0                  \\\/\RT                  l+        \\RT                  l,        S r- " S S5      rg)    )annotationsN   )encodingpycompatc                `   [         R                  " U 5      (       a  [         R                  $ [         R                  " U 5      (       a  [         R                  $ [         R
                  " U 5      (       a  [         R                  $ [         R                  " U 5      (       a  [         R                  $ [         R                  " U 5      (       a  [         R                  $ [         R                  " U 5      (       a  [         R                  $ [         R                  " U 5      (       a  [         R                  $ U $ N)statmodS_ISREGS_IFREGS_ISDIRS_IFDIRS_ISLNKS_IFLNKS_ISBLKS_IFBLKS_ISCHRS_IFCHRS_ISFIFOS_IFIFOS_ISSOCKS_IFSOCK)modes    7/usr/lib/python3/dist-packages/mercurial/pure/osutil.py_mode_to_kindr      s    tttttK    c                   / nU nUR                  [        R                  5      (       d  U[        R                  -  n[        R                  " U 5      nUR                  5         U H  n[        R                  " XF-   5      nXb:X  a)  [        R                  " UR                  5      (       a  / s  $ U(       a)  UR                  U[        UR                  5      U45        My  UR                  U[        UR                  5      45        M     U$ )zlistdir(path, stat=False) -> list_of_tuples

Return a sorted list containing information about the entries
in the directory.

If stat is True, each element is a 3-tuple:

  (name, type, stat object)

Otherwise, each element is a 2-tuple:

  (name, type)
)endswithr   osseposlistdirsortlstatr	   r   st_modeappendr   )pathstatskipresultprefixnamesfnsts           r   r    r    '   s     FF??8>>**(.. JJtE	JJLXXfk":'//"**55IMM2}RZZ8"=>MM2}RZZ89:  Mr            l        i   @      i @  i   c                    [         R                  " 5       n[        UR                  [        R
                  " U 5      < SUR                  < 35      e)Nz: )ctypesWinErrorOSErrorerrnor   strfromlocalstrerror)nameerrs     r   _raiseioerrorr<   x   s8    ooII8#8#8#>M
 	
r   c                  @    \ rS rSrSrSS jrS rS rS rS r	S r
S	rg
)	posixfile~   a+  a file object aiming for POSIX-like semantics

CPython's open() returns a file that was opened *without* setting the
_FILE_SHARE_DELETE flag, which causes rename and unlink to abort.
This even happens if any hardlinked copy of the file is in open state.
We set _FILE_SHARE_DELETE here, so files opened with posixfile can be
renamed and deleted while they are held open.
Note that if a file opened with posixfile is unlinked, the file
remains but cannot be opened again or be recreated under the same name,
until all reading processes have closed the file.c           	        SU;   a  [         nO[        nUSS nUS:X  a  SU;  a  U[        -  n[        nOU[        -  n[        [
        -  nUS:X  a  [        nOEUS:X  a  [        nO8US:X  a  [        nU[        -  nO"[        S[        R                  " U5      -  5      e[        R                  UU[        [         -  ["        -  S U[$        S 5      nU[&        :X  a  [)        U5        [*        R,                  " X5      n	U	S	:X  a   [        R/                  U5        [)        U5        [0        R2                  " U	[        R                  " U5      U5      n
[4        R7                  U S
U5        [4        R7                  U SU
5        g )N   br   r.      r   +   w   azinvalid mode: %sr-   r:   _file)	_O_BINARY_O_TEXT	_O_RDONLY_GENERIC_READ_O_RDWR_GENERIC_WRITE_OPEN_EXISTING_CREATE_ALWAYS_OPEN_ALWAYS	_O_APPEND
ValueErrorr   sysstr	_kernel32CreateFileA_FILE_SHARE_READ_FILE_SHARE_WRITE_FILE_SHARE_DELETE_FILE_ATTRIBUTE_NORMAL_INVALID_HANDLE_VALUEr<   msvcrtopen_osfhandleCloseHandler   fdopenobject__setattr__)selfr:   r   bufsizeflagsm0accesscreationfhfdfs              r   __init__posixfile.__init__   sK   t|!aBTzd$."&  &7Tz)t)t'" !3hood6K!KLL&& #447II&B **d#&&r1BRx%%b)d#		"hood3W=A tVT2tWa0r   c                    U R                   $ r   )rF   r`   s    r   __iter__posixfile.__iter__   s    ::r   c                .    [        U R                  U5      $ r   )getattrrF   )r`   r:   s     r   __getattr__posixfile.__getattr__   s    4::t,,r   c                8    U R                   R                  X5      $ )zmimics the read-only attributes of Python file objects
by raising 'TypeError: readonly attribute' if someone tries:
  f = posixfile('foo.txt')
  f.name = 'bla'
)rF   r_   )r`   r:   values      r   r_   posixfile.__setattr__   s     ::))$66r   c                :    U R                   R                  5         U $ r   )rF   	__enter__rl   s    r   rw   posixfile.__enter__   s    JJ  "Kr   c                :    U R                   R                  XU5      $ r   )rF   __exit__)r`   exc_type	exc_valueexc_tbs       r   rz   posixfile.__exit__   s    ::&&xFCCr    N)rB   r-   )__name__
__module____qualname____firstlineno____doc__ri   rm   rq   r_   rw   rz   __static_attributes__r   r   r   r>   r>   ~   s'    		=0	1d		-	7		Dr   r>   )FN).
__future__r   r4   ctypes.utilr   r&   r	    r   r   r   r    	iswindowsopenr>   rZ   windllkernel32rS   c_ulong_DWORDc_char_p_LPCSTR_LPSTRc_void_p_HANDLErt   rY   rU   rV   rW   rN   rM   rO   rJ   rL   rX   rI   rK   rP   rH   rG   rT   argtypesrestyper<   r   r   r   <module>r      s   #   	 $> I &&I^^F&GfooG#BK-- ""#NNLMN! IGIGI
 	&I" %,I!
QD QDr   