i f- @ 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 Gd d d e j Z d d Z d d d Z d S)z Main program for 2to3. )with_statementprint_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)Zlineterm ) splitlinesdifflibZunified_diff)abfilename r 1/opt/alt/python34/lib64/python3.4/lib2to3/main.py diff_texts s r c s[ e Z d Z d Z d d d f d d Z d d Z f d d Z d d 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 sv | | _ | | _ | r; | j t j r; | t j 7} n | | _ | | _ | | _ 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_diffsendswithossep_input_base_dir_output_dir_append_suffixsuperr __init__) selfZfixersoptionsexplicitr r input_base_dir output_dir append_suffix) __class__r r r $ s zStdoutRefactoringTool.__init__c O s3 | j j | | | f | j j | | | d S)N)errorsappendloggererror)r msgargskwargsr r r log_errorA s zStdoutRefactoringTool.log_errorc ! s | } | j rk | j | j rO t j j | j | t | j d } qk t d | | j f n | j r | | j 7} n | | k r t j j | } t j j | s t j | n | j d | | n | j s| d } t j j | rKy t j | WqKt k rG} z | j d | WYd d } ~ XqKXn y t j | | Wqt k r} z | j d | | WYd d } ~ XqXn t t | j } | | | | | | j st j | | n | | k rt j | | n d S)Nz5filename %s does not start with the input_base_dir %szWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)r startswithr r pathjoinlen ValueErrorr dirnameisdirmakedirslog_messager lexistsremoveOSErrorrenamer r write_fileshutilZcopymode) r Znew_textr Zold_textencodingZ orig_filenamer Zbackuperrwrite)r r r r6 E s@ &) z StdoutRefactoringTool.write_filec C s | r | j d | n | j d | | j r t | | | } yi | j d k r | j - x | D] } t | qg Wt j j Wd QXn x | D] } t | q WWq t k r t d | f d SYq Xn d S)NzNo changes to %sz Refactored %sz+couldn't encode %s's diff for your terminal) r1 r r Zoutput_lockprintsysstdoutflushUnicodeEncodeErrorwarn)r oldnewr ZequalZ diff_linesliner r r print_outputl s" z"StdoutRefactoringTool.print_output)__name__ __module____qualname____doc__r r( r6 rD r r )r r r s 'r c C s t d | f d t j d S)NzWARNING: %sfile)r; r<