509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \…-  ã               @   s€   d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	Z	ddl
mZ dd„ ZG dd	„ d	ejƒZd
d„ Zddd„ZdS )z
Main program for 2to3.
é    )Úwith_statementÚprint_functionNé   )Úrefactorc          	   C   s(   | j ƒ } |j ƒ }tj| |||dddd�S )z%Return a unified diff of two strings.z
(original)z(refactored)Ú )Zlineterm)Ú
splitlinesÚdifflibZunified_diff)ÚaÚbÚfilename© r   ú$/usr/lib64/python3.6/lib2to3/main.pyÚ
diff_texts   s
    r   c                   s>   e Zd ZdZd‡ fdd„	Zdd„ Z‡ fdd„Zd	d
„ Z‡  ZS )ÚStdoutRefactoringToola2  
    A refactoring tool that can avoid overwriting its input files.
    Prints output to stdout.

    Output files can optionally be written to a different directory and or
    have an extra file suffix appended to their name for use in situations
    where you do not want to replace the input files.
    r   c	       	         sR   || _ || _|r(|jtjƒ r(|tj7 }|| _|| _|| _tt	| ƒj
|||ƒ dS )aF  
        Args:
            fixers: A list of fixers to import.
            options: A dict with RefactoringTool configuration.
            explicit: A list of fixers to run even if they are explicit.
            nobackups: If true no backup '.bak' files will be created for those
                files that are being refactored.
            show_diffs: Should diffs of the refactoring be printed to stdout?
            input_base_dir: The base directory for all input files.  This class
                will strip this path prefix off of filenames before substituting
                it with output_dir.  Only meaningful if output_dir is supplied.
                All files processed by refactor() must start with this path.
            output_dir: If supplied, all converted files will be written into
                this directory tree instead of input_base_dir.
            append_suffix: If supplied, all files output by this tool will have
                this appended to their filename.  Useful for changing .py to
                .py3 for example by passing append_suffix='3'.
        N)Ú	nobackupsÚ
show_diffsÚendswithÚosÚsepÚ_input_base_dirÚ_output_dirÚ_append_suffixÚsuperr   Ú__init__)	ÚselfZfixersÚoptionsÚexplicitr   r   Úinput_base_dirÚ
output_dirÚappend_suffix)Ú	__class__r   r   r   $   s    
zStdoutRefactoringTool.__init__c             O   s*   | j j|||fƒ | jj|f|ž|Ž d S )N)ÚerrorsÚappendÚloggerÚerror)r   ÚmsgÚargsÚkwargsr   r   r   Ú	log_errorA   s    zStdoutRefactoringTool.log_errorc       
   !      s|  |}| j rH|j| jƒr6tjj| j |t| jƒd … ƒ}ntd|| jf ƒ‚| jrX|| j7 }||kr–tjj	|ƒ}tjj
|ƒ rˆ|rˆtj|ƒ | jd||ƒ | j�s4|d }tjj|ƒrðytj|ƒ W n. tk
rî } z| jd|ƒ W Y d d }~X nX ytj||ƒ W n2 tk
�r2 } z| jd||ƒ W Y d d }~X nX tt| ƒj}	|	||||ƒ | j�sbtj||ƒ ||k�rxtj||ƒ d S )Nz5filename %s does not start with the input_base_dir %szWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)r   Ú
startswithr   r   ÚpathÚjoinÚlenÚ
ValueErrorr   ÚdirnameÚisdirÚmakedirsÚlog_messager   ÚlexistsÚremoveÚOSErrorÚrenamer   r   Ú
write_fileÚshutilZcopymode)
r   Znew_textr   Zold_textÚencodingZorig_filenamer   ZbackupÚerrÚwrite)r    r   r   r6   E   s@    


 
z StdoutRefactoringTool.write_filec             C   s°   |r| j d|ƒ nš| j d|ƒ | jr¬t|||ƒ}yX| jd k	rp| j�& x|D ]}t|ƒ qJW tjjƒ  W d Q R X nx|D ]}t|ƒ qvW W n" tk
rª   t	d|f ƒ d S X d S )NzNo changes to %szRefactored %sz+couldn't encode %s's diff for your terminal)
r1   r   r   Zoutput_lockÚprintÚsysÚstdoutÚflushÚUnicodeEncodeErrorÚwarn)r   ÚoldÚnewr   ZequalZ
diff_linesÚliner   r   r   Úprint_outputl   s"    



z"StdoutRefactoringTool.print_output)r   r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   r6   rD   Ú__classcell__r   r   )r    r   r      s
   'r   c             C   s   t d| f tjd� d S )NzWARNING: %s)Úfile)r;   r<   Ústderr)r%   r   r   r   r@   �   s    r@   c                s  t jdd�}|jddddd� |jdd	d
g dd� |jddddddd� |jddd
g dd� |jddddd� |jddddd� |jddddd� |jd dd!d� |jd"d#dd$d� |jd%d&dd'd(d� |jd)d*dd+d,d-d.� |jd/d0dd1d� |jd2dd+d,d3d.� d'}i }|j|ƒ\}}|j�r@d4|d5< |j�s:td6ƒ d4|_|j�r\|j �r\|j	d7ƒ |j
�rx|j �rx|j	d8ƒ |j �r’|j�r’td9ƒ |j �r®|j�r®|j	d:ƒ |j�rætd;ƒ xtjˆ ƒD ]}t|ƒ �qÊW |�sæd<S |�std=tjd>� td?tjd>� d@S dA|k�r4d4}|j�r4tdBtjd>� d@S |j�rDd4|dC< |j�rRtjntj}tjdD|dE� tjdFƒ}ttjˆ ƒƒ}	t‡ fdGdH„|jD ƒƒ}
tƒ }|j�ròd'}x2|jD ](}|dIk�rÄd4}n|jˆ dJ | ƒ �q°W |�rì|	j|ƒn|}n
|	j|ƒ}|j|
ƒ}t j!j"|ƒ}|�rD|j#t j$ƒ �rDt j!j%|ƒ �rDt j!j&|ƒ}|j�rh|j't j$ƒ}|j(dK|j|ƒ t)t*|ƒ|t*|ƒ|j|j ||j|j
dL�}|j+�s|�rª|j,ƒ  nRy|j||j|j-|j.ƒ W n6 tj/k
�rú   |j.dk�sèt0‚tdMtjd>� dS X |j1ƒ  t2t3|j+ƒƒS )NzþMain program.

    Args:
        fixer_pkg: the name of a package where the fixers are located.
        args: optional; a list of command line arguments. If omitted,
              sys.argv[1:] is used.

    Returns a suggested exit status (0, 1, 2).
    z2to3 [options] file|dir ...)Zusagez-dz--doctests_onlyÚ
store_truezFix up doctests only)ÚactionÚhelpz-fz--fixr"   z1Each FIX specifies a transformation; default: all)rM   ÚdefaultrN   z-jz--processesZstorer   ÚintzRun 2to3 concurrently)rM   rO   ÚtyperN   z-xz--nofixz'Prevent a transformation from being runz-lz--list-fixeszList available transformationsz-pz--print-functionz0Modify the grammar so that print() is a functionz-vz	--verbosezMore verbose loggingz
--no-diffsz#Don't show diffs of the refactoringz-wz--writezWrite back modified filesz-nz--nobackupsFz&Don't write backups for modified filesz-oz--output-dirÚstrr   zXPut output files in this directory instead of overwriting the input files.  Requires -n.)rM   rQ   rO   rN   z-Wz--write-unchanged-fileszYAlso write files even if no changes were required (useful with --output-dir); implies -w.z--add-suffixzuAppend this string to all output filenames. Requires -n if non-empty.  ex: --add-suffix='3' will generate .py3 files.TÚwrite_unchanged_filesz&--write-unchanged-files/-W implies -w.z%Can't use --output-dir/-o without -n.z"Can't use --add-suffix without -n.z@not writing files and not printing diffs; that's not very usefulzCan't use -n without -wz2Available transformations for the -f/--fix option:r   z1At least one file or directory argument required.)rJ   zUse --help to show usage.é   ú-zCan't write to stdin.r   z%(name)s: %(message)s)ÚformatÚlevelzlib2to3.mainc             3   s   | ]}ˆ d  | V  qdS )z.fix_Nr   )Ú.0Úfix)Ú	fixer_pkgr   r   ú	<genexpr>Ý   s    zmain.<locals>.<genexpr>Úallz.fix_z7Output in %r will mirror the input directory %r layout.)r   r   r   z+Sorry, -j isn't supported on this platform.)4ÚoptparseZOptionParserZ
add_optionÚ
parse_argsrS   r:   r@   r   r   r$   Z
add_suffixZno_diffsZ
list_fixesr;   r   Zget_all_fix_namesr<   rK   r   ÚverboseÚloggingÚDEBUGÚINFOZbasicConfigZ	getLoggerÚsetZget_fixers_from_packageZnofixrY   ÚaddÚunionÚ
differencer   r*   Úcommonprefixr   r   r/   r.   ÚrstripÚinfor   Úsortedr!   Úrefactor_stdinZdoctests_onlyZ	processesZMultiprocessingUnsupportedÚAssertionErrorZ	summarizerP   Úbool)rZ   r&   Úparserrk   Úflagsr   ZfixnamerW   r#   Zavail_fixesZunwanted_fixesr   Zall_presentrY   Z	requestedZfixer_namesr   Zrtr   )rZ   r   Úmain…   sÌ    




















rp   )N)rH   Z
__future__r   r   r<   r   r   r`   r7   r]   r   r   r   ZMultiprocessRefactoringToolr   r@   rp   r   r   r   r   Ú<module>   s   	g