MINI MINI MANI MO
3
  \-                 @   s|   d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 dd ZG dd de
jZ
d	d
 Zd
ddZdS )    )with_statementprint_functionN   )refactorc          	   C   s(   | j  } |j  }tj| |||ddddS )Nz
(original)z(refactored) )Zlineterm)
splitlinesdifflibZunified_diff)abfilename r   $/usr/lib64/python3.6/lib2to3/main.py
diff_texts   s
    r   c                   s:   e Zd Zd
 fdd	Zdd Z fddZdd	 Z  ZS )StdoutRefactoringToolr   c	       	         sR   || _ || _|r(|jtj r(|tj7 }|| _|| _|| _tt	| j
||| d S )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   s*   | j j|||f | jj|f|| d S )N)errorsappendloggererror)r   msgargskwargsr   r   r
   	log_errorA   s    zStdoutRefactoringTool.log_errorc       
   !      s|  |}| j rH|j| jr6tjj| j |t| jd  }ntd|| jf | jrX|| j7 }||krtjj	|}tjj
| r|rtj| | jd|| | j
s4|d }tjj|rytj| W n. tk
r } z| jd| W Y d d }~X nX ytj|| W n2 tk
r2 } z| jd|| W Y d d }~X nX tt| j}	|	|||| | j
sbtj|| ||krxtj|| 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| | jrt|||}yX| jd k	rp| j& x|D ]}t| qJW tjj  W d Q R X nx|D ]}t| qvW W n" tk
r   t	d|f  d S X 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"