File: //lib64/python3.6/lib2to3/__pycache__/main.cpython-36.opt-2.pyc
3
  \�-  �               @   s|   d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 dd� ZG dd� de
j�Z
d	d
� Zd
dd�ZdS )�    )�with_statement�print_functionN�   )�refactorc          	   C   s(   | j � } |j � }tj| |||dddd�S )Nz
(original)z(refactored)� )Zlineterm)�
splitlines�difflibZunified_diff)�a�b�filename� r   �$/usr/lib64/python3.6/lib2to3/main.py�
diff_texts   s
    r   c                   s:   e Zd Zd
� fdd�	Zdd� Z� fdd�Zdd	� Z�  ZS )�StdoutRefactoringToolr   c	       	         sR   || _ || _|r(|jtj� r(|tj7 }|| _|| _|| _tt	| �j
|||� d S )N)�	nobackups�
show_diffs�endswith�os�sep�_input_base_dir�_output_dir�_append_suffix�superr   �__init__)	�selfZfixers�options�explicitr   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)�errors�append�logger�error)r   �msg�args�kwargsr   r   r
   �	log_errorA   s    zStdoutRefactoringTool.log_errorc       
   !      s|  |}| j rH|j| j�r6tjj| j |t| j�d � �}ntd|| jf ��| jrX|| j7 }||kr�tjj	|�}tjj
|� r�|r�tj|� | jd||� | j
�s4|d }tjj|�r�ytj|� 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||� ||k�rxtj||� 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   �path�join�len�
ValueErrorr   �dirname�isdir�makedirs�log_messager   �lexists�remove�OSError�renamer   r   �
write_file�shutilZcopymode)
r   Znew_textr   Zold_text�encodingZ
orig_filenamer   Zbackup�err�write)r    r   r
   r6   E   s@    
 
z StdoutRefactoringTool.write_filec             C   s�   |r| j d|� n�| j d|� | jr�t|||�}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_lock�print�sys�stdout�flush�UnicodeEncodeError�warn)r   �old�newr   ZequalZ
diff_lines�liner   r   r
   �print_outputl   s"