ó v®¸Qc@€s©dZddlmZddlZddlZddlZddlZddlZddlZddl m Z d„Z de j fd„ƒYZ d „Zdd „ZdS( s Main program for 2to3. iÿÿÿÿ(twith_statementNi(trefactorc C€s:|jƒ}|jƒ}tj||||ddddƒS(s%Return a unified diff of two strings.s (original)s (refactored)tlinetermt(t splitlinestdifflibt unified_diff(tatbtfilename((s"/sys/lib/python2.7/lib2to3/main.pyt diff_textss    tStdoutRefactoringToolcB€s;eZdZdddd„Zd„Zd„Zd„ZRS(s2 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. Rc C€sv||_||_|r;|jtjƒ r;|tj7}n||_||_||_tt |ƒj |||ƒdS(sF 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( t nobackupst show_diffstendswithtostsept_input_base_dirt _output_dirt_append_suffixtsuperR t__init__( tselftfixerstoptionstexplicitR R tinput_base_dirt output_dirt append_suffix((s"/sys/lib/python2.7/lib2to3/main.pyR$s     cO€s3|jj|||fƒ|jj|||ŽdS(N(terrorstappendtloggerterror(Rtmsgtargstkwargs((s"/sys/lib/python2.7/lib2to3/main.pyt log_errorAsc C€sÝ|}|jre|j|jƒrItjj|j|t|jƒƒ}qetd||jfƒ‚n|jr~||j7}n||krÔtjj |ƒ}tjj |ƒs¾tj |ƒn|j d||ƒn|j sy|d}tjj|ƒr6ytj|ƒWq6tjk r2}|j d|ƒq6Xnytj||ƒWqytjk ru}|j d||ƒqyXntt|ƒj} | ||||ƒ|j sºtj||ƒn||krÙtj||ƒndS(Ns5filename %s does not start with the input_base_dir %ssWriting converted %s to %s.s.baksCan't remove backup %ssCan't rename %s to %s(Rt startswithRRtpathtjointlent ValueErrorRtdirnametisdirtmakedirst log_messageR tlexiststremoveR trenameRR t write_filetshutiltcopymode( Rtnew_textR told_texttencodingt orig_filenameRtbackupterrtwrite((s"/sys/lib/python2.7/lib2to3/main.pyR1Es@         cC€sÐ|r|jd|ƒn³|jd|ƒ|jrÌt|||ƒ}y_|jdk rŒ|j(x|D] }|GHqgWtjjƒWdQXnx|D] }|GHq“WWqÌtk rÈt d|fƒdSXndS(NsNo changes to %ss Refactored %ss+couldn't encode %s's diff for your terminal( R-R R t output_locktNonetsyststdouttflushtUnicodeEncodeErrortwarn(RtoldtnewR tequalt diff_linestline((s"/sys/lib/python2.7/lib2to3/main.pyt print_outputls"        (t__name__t __module__t__doc__RR$R1RG(((s"/sys/lib/python2.7/lib2to3/main.pyR s   'cC€stjd|fIJdS(Ns WARNING: %s(R=tstderr(R!((s"/sys/lib/python2.7/lib2to3/main.pyRA‚sc€s„tjddƒ}|jddddddƒ|jd d dd d gdd ƒ|jddddd dddddƒ|jdddd d gddƒ|jddddddƒ|jddddddƒ|jdddddd ƒ|jd!dddd"ƒ|jd#d$dddd%ƒ|jd&d'ddd tdd(ƒ|jd)d*dddd+d d,dd-ƒ|jd.d/dddd0ƒ|jd1dddd+d d,dd2ƒt}i}|j|ƒ\}}|jrt|d3<|jsøtd4ƒnt|_n|j r'|j r'|j d5ƒn|j rJ|j rJ|j d6ƒn|j rj|j rjtd7ƒn|j r|j r|j d8ƒn|jrÇd9GHxtjˆƒD] }|GHq«W|sÇd:Sn|sëtjd;IJtjd<IJd=Sd>|krt}|jrtjd?IJd=Sn|jr0t|d@Þstalls.fix_s7Output in %r will mirror the input directory %r layout.RRRs+Sorry, -j isn't supported on this platform.(4toptparset OptionParsert add_optiontFalset parse_argsRUtTrueR:RARR R t add_suffixtno_diffst list_fixesRtget_all_fix_namesR=RKRWtverbosetloggingtDEBUGtINFOt basicConfigt getLoggertsettget_fixers_from_packagetnofixR[taddtuniont differenceRR&t commonprefixRRR+R*trstriptinfoR tsortedRtrefactor_stdint doctests_onlyt processestMultiprocessingUnsupportedt summarizeRStbool(R\R"tparserRxtflagsRtfixnameRYRt avail_fixestunwanted_fixesRt all_presentR[t requestedt fixer_namesRtrt((R\s"/sys/lib/python2.7/lib2to3/main.pytmain†sÈ                              (RJt __future__RR=RRRiR2R^RRR tMultiprocessRefactoringToolR RAR<R‡(((s"/sys/lib/python2.7/lib2to3/main.pyts       h