add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
a

Z��^�Nc	@s�dZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZgd�Zddd�Z
dddddd�dd
�Zdddddd�dd�Zddd�Zdd�Zedkr�ee��Ze�e�dS)a�Module/script to byte-compile all .py files to .pyc files.

When called as a script with arguments, this compiles the directories
given as arguments recursively; the -l option prevents it from
recursing into directories.

Without arguments, if compiles all modules on sys.path, without
recursing into subdirectories.  (Even though it should do so for
packages -- for now, you'll have to deal with packages separately.)

See module py_compile for details of the actual byte-compilation.
�N)�partial)�Path)�compile_dir�compile_file�compile_pathccs�|dkrt|tj�rt�|�}|s0td�|��zt�|�}Wn,tyj|dkrbtd�|��g}Yn0|��|D]|}|dkr�qxtj	�
||�}tj	�|�s�|Vqx|dkrx|tjkrx|tj
krxtj	�|�rxtj	�|�sxt||d|d�EdHqxdS)N�zListing {!r}...zCan't list {!r}Z__pycache__r�)�	maxlevels�quiet)�
isinstance�os�PathLike�fspath�print�formatZlistdir�OSErrorZsort�path�joinZisdir�curdirZpardir�islink�	_walk_dir)�dirrr	Znames�name�fullname�r�"/usr/lib64/python3.9/compileall.pyrs2


�
�
�rF�����r��stripdir�
prependdir�
limit_sl_dest�hardlink_dupesc
CsNd}|dur$|
dus|dur$td��|dur8|}
|}d}|dkrHtd��|dkrxzddlm}Wntyvd}Yn0|dur�t��}t|||d�}d}|dk�r|du�r|p�d}||d	��D}|�tt	|||||||	|
|||
d
�|�}t
|dd�}Wd�n1�s0Yn2|D],}t	||||||||	|
|||
d��sd
}�q|S)a�Byte-compile all modules in the given directory tree.

    Arguments (only dir is required):

    dir:       the directory to byte-compile
    maxlevels: maximum recursion level (default `sys.getrecursionlimit()`)
    ddir:      the directory that will be prepended to the path to the
               file as it is compiled into each byte-code file.
    force:     if True, force compilation, even if timestamps are up-to-date
    quiet:     full output with False or 0, errors only with 1,
               no output with 2
    legacy:    if True, produce legacy pyc paths instead of PEP 3147 paths
    optimize:  int or list of optimization levels or -1 for level of
               the interpreter. Multiple levels leads to multiple compiled
               files each with one optimization level.
    workers:   maximum number of parallel workers
    invalidation_mode: how the up-to-dateness of the pyc will be checked
    stripdir:  part of path to left-strip from source file path
    prependdir: path to prepend to beginning of original file path, applied
               after stripdir
    limit_sl_dest: ignore symlinks if they are pointing outside of
                   the defined path
    hardlink_dupes: hardlink duplicated pyc files
    N�PDestination dir (ddir) cannot be used in combination with stripdir or prependdirrz%workers must be greater or equal to 0r)�ProcessPoolExecutor)r	rT)Zmax_workers)�ddir�force�rxr	�legacy�optimize�invalidation_moderrrr )�defaultrF)�
ValueErrorZconcurrent.futuresr"ZImportError�sysZgetrecursionlimitrZmaprrZmin)rrr#r$r%r	r&r'�workersr(rrrr r"Zfiles�successZexecutorZresultsZfilerrrr0sX
�
�.�rc%
Csz|dur |dus|	dur td��d}|dkrBt|tj�rBt�|�}tj�|�}
d}|durhtj�||
�}|dur�|�tjj	�}|�tjj	�}t
|�}t||�D]\}}||kr�|�|�q�tjj|�}|	dur�|dur�tj�|	|�}ntj�|	|�}t|t
��r|g}tt|��}|�r.t|�dk�r.td��|du�rL|�|�}|�rL|S|
du�r�tj�|��r�t|
���t|���jv�r�|Si}tj�|��rv|D]d}|�r�|d||<nJ|dk�r�|dk�r�|nd	}tjj||d
�}|||<ntj�|�}|||<�q�|
dd�|
dd�}}|dk�rv|�s�z�t
t�|�j�}t�d
tjjd|�}|��D]L}t |d��}|�!d�}Wd�n1�s�0Y||k�rX�q��qX|WSWnt"�y�Yn0|�s�t#d�$|��z�t%|�D]p\}}||}t&j'|||d||d�} |dk�r�|�r�|||d}!t(j)||!dd��r�t�*|�t�+|!|��q�W�nt&j,�y�}"zvd}|dk�r�|WYd}"~"S|�r�t#d�$|��nt#dd	d�|"j-j.t/j0j1dd�}#|#�2t/j0j1�}#t#|#�WYd}"~"n�d}"~"0t3t4t"f�yf}$z^d}|dk�r|WYd}$~$S|�r4t#d�$|��nt#dd	d�t#|$j5j6d|$�WYd}$~$nd}$~$00| dk�rvd}|S)aByte-compile one file.

    Arguments (only fullname is required):

    fullname:  the file to byte-compile
    ddir:      if given, the directory name compiled in to the
               byte-code file.
    force:     if True, force compilation, even if timestamps are up-to-date
    quiet:     full output with False or 0, errors only with 1,
               no output with 2
    legacy:    if True, produce legacy pyc paths instead of PEP 3147 paths
    optimize:  int or list of optimization levels or -1 for level of
               the interpreter. Multiple levels leads to multiple compiled
               files each with one optimization level.
    invalidation_mode: how the up-to-dateness of the pyc will be checked
    stripdir:  part of path to left-strip from source file path
    prependdir: path to prepend to beginning of original file path, applied
               after stripdir
    limit_sl_dest: ignore symlinks if they are pointing outside of
                   the defined path.
    hardlink_dupes: hardlink duplicated pyc files
    Nr!TrzXHardlinking of duplicated bytecode makes sense only for more than one optimization levelZcrr�)Zoptimizationi����z.pyz<4sllZrbizCompiling {!r}...)r'r(F)Zshallowz*** Error compiling {!r}...z*** )ZendZbackslashreplace)Zerrorsz:)7r*r
rrr
rZbasenamerZsplitZsepZlistZzipZremove�int�sortedZset�lenZsearchrrZresolveZparents�isfile�	importlibZutilZcache_from_sourceZstatZst_mtime�structZpackZMAGIC_NUMBERZvalues�openZreadrrrZ	enumerate�
py_compile�compile�filecmpZcmpZunlinkZlinkZPyCompileError�msgZencoder+ZstdoutZencodingZdecodeZSyntaxErrorZUnicodeErrorZ	__class__�__name__)%rr#r$r%r	r&r'r(rrrr r-rZdfileZfullname_partsZstripdir_partsZ
ddir_partsZspartZopartZmoZ
opt_cfilesZ	opt_levelZoptZcfileZheadZtailZmtimeZexpectZchandleZactualZindexZokZprevious_cfileZerrr9Zerrrr{s�



�

�*


�

�
(
rc	CsTd}tjD]D}|r|tjkr2|r2|dkrNtd�q
|oLt||d|||||d�}q
|S)a�Byte-compile all module on sys.path.

    Arguments (all optional):

    skip_curdir: if true, skip current directory (default True)
    maxlevels:   max recursion level (default 0)
    force: as for compile_dir() (default False)
    quiet: as for compile_dir() (default 0)
    legacy: as for compile_dir() (default False)
    optimize: as for compile_dir() (default -1)
    invalidation_mode: as for compiler_dir()
    TrzSkipping current directoryN)r	r&r'r()r+rrrrr)	Zskip_curdirrr$r	r&r'r(r-rrrrrs 

�
rc
Cs�ddl}|jdd�}|jddddddd	�|jd
tddd
�|jddddd�|jdddddd�|jddddd�|jdddddd�|jd d!d"dd#d�|jd$d%d&dd'd�|jd(d)d*dd+d�|jd,d-d.d/d0�|jd1d2d3d4d5�|jd6d7d8td9d:�d;d<�tjD�}|jd=t|�d>d?�|jd@dAtdBdCdD�|jdEdFdGdHd0�|jdIddJdKd�|��}|j}|j	�r�ddl
}|�|j	�|_	|jdLk�r�d|_|j
du�r�|j
}n|j}|jdu�r�dMg|_t|j�d8k�r�|j�r�|�dN�|jdu�r|jdu�s
|jdu�r|�dO�|j�r�z\|jdPk�r0tjnt|j��*}|D]}|�|����q@Wd�n1�sl0YWn2t�y�|jdQk�r�tdR�|j��YdSS0|j �r�|j �!dPdT��"�}	tj|	}
nd}
dU}z�|�r~|D]�}t#j$�%|��r4t&||j|j'|j	|j|j(|
|j|j|j|j|jdV��stdS}n@t)|||j|j'|j	|j|j(|j*|
|j|j|j|j|jdW��s�dS}�q�|WSt+|j(|j'|j|
dX�WSWn*t,�y�|jdQk�r�tdY�YdSS0dUS)ZzScript main program.rNz1Utilities to support installing Python libraries.)Zdescriptionz-lZstore_constrz!don't recurse into subdirectories)�actionZconstr)�dest�helpz-r�	recursionzhcontrol the maximum recursion level. if `-l` and `-r` options are specified, then `-r` takes precedence.)�typer<r=z-fZ
store_truer$z/force rebuild even if timestamps are up to date)r;r<r=z-qZcountr	zIoutput only error messages; -qq will suppress the error messages as well.)r;r<r)r=z-br&z0use legacy (pre-PEP3147) compiled file locationsz-dZDESTDIRr#z�directory to prepend to file paths for use in compile-time tracebacks and in runtime tracebacks in cases where the source file is unavailable)�metavarr<r)r=z-sZSTRIPDIRrz�part of path to left-strip from path to source file - for example buildroot. `-d` and `-s` options cannot be specified together.z-pZ
PREPENDDIRrz�path to add as prefix to path to source file - for example / to make it absolute when some part is removed by `-s` option. `-d` and `-p` options cannot be specified together.z-xZREGEXPr%zskip files matching the regular expression; the regexp is searched for in the full path of each file considered for compilationz-iZFILE�flistzzadd all the files and directories listed in FILE to the list considered for compilation; if "-", names are read from stdin)r@r<r=�compile_destzFILE|DIRZ*zrzero or more file and directory names to compile; if no arguments given, defaults to the equivalent of -l sys.path)r@Znargsr=z-jz	--workersrzRun compileall concurrently)r)r?r=cSsg|]}|j���dd��qS)�_�-)rZlower�replace)Z.0ZmoderrrZ
<listcomp>hs�zmain.<locals>.<listcomp>z--invalidation-modez�set .pyc invalidation mode; defaults to "checked-hash" if the SOURCE_DATE_EPOCH environment variable is set, and "timestamp" otherwise.)Zchoicesr=z-o�append�
opt_levelsz�Optimization levels to run compilation with.Default is -1 which uses optimization level ofPython interpreter itself (specified by -O).)r;r?r<r=z-eZDIRrz+Ignore symlinks pointing outsite of the DIRz--hardlink-dupesr zHardlink duplicated pyc filesr.rzYHardlinking of duplicated bytecode makes sense only for more than one optimization level.z.-d cannot be used in combination with -s or -prDrzError reading file list {}FrCT)r(rrr'rr )r,r(rrr'rr )r&r$r	r(z
[interrupted])-�argparseZArgumentParserZadd_argumentr/r6ZPycInvalidationModer0Z
parse_argsrBr%�rer7rr>rrGr1r Zerrorr#rrrAr+Zstdinr5rFZstriprr	rrr(rEZupperrrr2rr$r&rr,rZKeyboardInterrupt)
rHZparserZinvalidation_modesZargsZ
compile_destsrIrZfZlineZivl_moder(r-r<rrr�main3s�
�
�
��
��
�
��
�
�
����
��
��
6�
�	
�rJZ__main__)r)	NNFNrFrrN)NFNrFrN)rrFrFrN)Z__doc__rr+Zimportlib.utilr3r6r4r8Z	functoolsrZpathlibrZ__all__rrrrrJr:r/Zexit_statusZexitrrrrZ<module>sD
��K���
"