ó
ôŸ?`c           @   s÷   d  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 „  Z d a	 d a
 d a d a d a d d d	 g Z d
 „  Z d „  Z d „  Z d d d „  ƒ  YZ d „  Z d „  Z d „  Z e d k ró e ƒ  n  d S(   s—  Mirror a remote ftp subtree into a local directory tree.

usage: ftpmirror [-v] [-q] [-i] [-m] [-n] [-r] [-s pat]
                 [-l username [-p passwd [-a account]]]
                 hostname[:port] [remotedir [localdir]]
-v: verbose
-q: quiet
-i: interactive mode
-m: macintosh server (NCSA telnet 2.4) (implies -n -s '*.o')
-n: don't log in
-r: remove local files/directories no longer pertinent
-l username [-p passwd [-a account]]: login info (default .netrc or anonymous)
-s pat: skip files matching pattern
hostname: remote host w/ optional port separated by ':'
remotedir: remote directory (default initial)
localdir: local directory (default current)
iÿÿÿÿN(   t   fnmatchc          G   s8   t  j t  _ x |  D] } | GHq Wt GHt  j d ƒ d  S(   Ni   (   t   syst   stderrt   stdoutt   __doc__t   exit(   t   argst   msg(    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyt   usage   s
     	i   i    t   .s   ..s   .mirrorinfoc          C   s  y# t  j  t j d d ƒ \ }  } Wn  t  j k
 rE } t | ƒ n Xd } d } d } | sk t d ƒ n  | d } d } d | k r® | j d d ƒ \ } } t | ƒ } n  y7 t j ƒ  j | ƒ } | d  k	 rä | \ } } } n  Wn t j
 t f k
 rn Xx|  D]ü \ }	 }
 |	 d k r*|
 } n  |	 d k r?|
 } n  |	 d	 k rT|
 } n  |	 d
 k rmt d a n  |	 d k r‚d a n  |	 d k r—d a n  |	 d k r¿d a d a t j d ƒ n  |	 d k rÔd a n  |	 d k réd a n  |	 d k r	t j |
 ƒ q	q	Wd } d } | d rZ| d } | d rZ| d } | d rWt d ƒ qWqZn  t j ƒ  } t rŽd | | r‚d | p…d f GHn  | j | | ƒ t sÒt r¼d | p¶d GHn  | j | | | ƒ n  t ràd GHn  | j ƒ  } t d k r
d Gt | ƒ GHn  | r|t d k r.d t | ƒ GHn  | j | ƒ t d k rOd GHn  | j ƒ  } t d k r|d Gt | ƒ GHq|n  t | | ƒ d  S(   Ni   s   a:bil:mnp:qrs:vt    s   hostname missingi    t   :s   -ls   -ps   -as   -vs   -qs   -is   -ms   *.os   -ns   -rs   -si   i   s   too many argumentss   Connecting to '%s%s'...s   :%ds   Logging in as %r...t	   anonymouss   OK.s   PWD =s   cwd(%s)(   t   getoptR   t   argvt   errorR   t   splitt   intt   netrct   authenticatorst   Nonet   NetrcParseErrort   IOErrort   verboset   interactivet   mact   nologint   skippatst   appendt   rmokt   ftplibt   FTPt   connectt   logint   pwdt   reprt   cwdt   mirrorsubdir(   t   optsR   R   R!   t   passwdt   accountt   hostt   portt   autht   ot   at	   remotedirt   localdirt   fR"   (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyt   main,   s–    # 
 	 	 	  	 	    	 	 




       c   #   	   C   s”	  |  j  ƒ  } | rw t j j | ƒ rw t r= d Gt | ƒ GHn  y t | ƒ Wqw t j k
 rs } d Gt | ƒ GHd  SXn  t j j | d ƒ } y t	 | d ƒ j
 ƒ  } Wn t k
 rÀ } d } n Xy t | ƒ } Wn, t t f k
 rÿ d Gt | ƒ GHi  } n Xg  } g  } t r!d | f GHn  |  j d | j ƒ g  }	 x| D]}
 t d	 k red
 Gt |
 ƒ GHn  t r©|
 j ƒ  } d } | d d k r | d  } d } n  d } n¶ |
 j d  d ƒ } t | ƒ d k  rçt d	 k rAd GHqAqAn  | d j ƒ  } | j d ƒ } | d k rHt d	 k r-d | f GHn  | | d } | |  } n  | d d !} | d } d } xS t D]K } t | | ƒ rlt d	 k r­d Gt | ƒ Gd Gt | ƒ GHn  d	 } PqlqlW| rÇqAn  | d d k rt d	 k rõd Gt | ƒ GHn  | j | ƒ qAn  |	 j | ƒ | j | ƒ rX| | | k rXt d	 k rAd Gt | ƒ GHqAqAn  t j j | | ƒ } t j j | d | ƒ } t rÉt d | | ƒ } | sÉ| j | ƒ sAd | | <qAqAqÉn  y t j | ƒ Wn t j k
 rðn X| d d k rXt rd  | | f GHn  y t j | | ƒ WqUt k
 rT} d! | | f GHqAqUXný y t	 | d" ƒ } Wn% t k
 r’} d! | | f GHqAn Xt r®d# | | | f GHn  t rÌt | d$ t  j! ƒ } n | } t" j" ƒ  } y |  j# d% | | j$ d= ƒ Wn t% j& k
 r} | GHn Xt" j" ƒ  } | j' ƒ  } | j( ƒ  | | k rU| j( ƒ  n  y t j | ƒ Wn t j k
 r|n Xy t j) | | ƒ Wn+ t j k
 r¾} d& | | | f GHqAn X| | | <t* | | ƒ t rA| d d k rA| | } | d' } t+ t, | ƒ ƒ Gd( Gt+ t, | ƒ ƒ Gd) G| | k rPd* t+ t, | | ƒ ƒ GHn  HqAqAWd } x` | j- ƒ  D]R } | |	 k rkt r©d+ Gt | ƒ Gd, Gt | p¡d- ƒ GHn  | | =| d	 } qkqkW| r×t* | | ƒ n  y. | sõt j. t j/ ƒ } n t j. | ƒ } Wn t j k
 r!g  } n Xx| D]þ } | d d- k s)| j | ƒ s)| | k r`q)n  d } xS t D]K } t | | ƒ rmt d	 k r®d Gt | ƒ Gd Gt | ƒ GHn  d	 } PqmqmW| rÈq)n  t j j | | ƒ } t0 st r)d. Gt | ƒ Gd/ GHq)q)n  t rd0 Gt | ƒ GHn  t1 | ƒ q)Wxb| D]Z}  t r_t d1 |  | ƒ } | s_q2q_n  t rwd2 Gt |  ƒ GHn  t j j | |  ƒ }! |  j  ƒ  } t d	 k rÅd3 Gt | ƒ GHd4 Gt |  ƒ GHn  y |  j2 |  ƒ Wn3 t% j& k
 r	} d5 Gt |  ƒ Gd6 Gt | ƒ GHnG Xt r$	d7 Gt |! ƒ GHn  t3 |  |! ƒ t d	 k rE	d8 GHn  |  j2 d9 ƒ |  j  ƒ  }" |" | k rx	d: GHd; GHPq2t d	 k r2d< GHq2q2Wd  S(>   Ns   Creating local directorys#   Failed to establish local directorys   .mirrorinfot   rs   {}s   Bad mirror info ins   Listing remote directory %r...t   LISTi   s   -->t   -iÿÿÿÿt   /t   dR
   i   i   s   Skipping short lines    -> i    s   Found symbolic link %ri   iûÿÿÿs   Skip patternt   matchess   Remembering subdirectorys   Already have this version oft   @t   files   Not retrievedt   ls   Creating symlink %r -> %rs   Can't create %r: %st   wbs   Retrieving %r from %r as %r...i   s   RETR s   Can't rename %r to %r: %sg      @s	   Kbytes int   secondss   (~%d Kbytes/sec)s    Removing obsolete info entry fort   inR	   s
   Local files   is no longer pertinents   Removing local file/dirt   subdirectorys   Processing subdirectorys   Remote directory now:s
   Remote cwds   Can't chdir toR   s   Mirroring ass   Remote cwd ..s   ..s,   Ended up in wrong directory after cd + cd ..s   Giving up now.s   OK.i    (4   R"   t   ost   patht   isdirR   R#   t   makedirR   t   joint   opent   readR   t   evalt   SyntaxErrort	   NameErrort	   retrlinesR   R   t   stripR   R   t   lent   lstript   findR   R    t   has_keyR   t   askaboutt   unlinkt   symlinkt   LoggingFileR   R   t   timet
   retrbinaryt   writeR   t
   error_permt   tellt   closet   renamet	   writedictR   t   roundt   keyst   listdirt   curdirR   t   removeR$   R%   (#   R0   R/   R"   R   t   infofilenamet   textt   infot   subdirst   listingt
   filesfoundt   linet   filenamet   modet	   infostufft   wordst   it   linktot   skipt   patt   fullnamet   tempnamet   doitt   fpt   fp1t   t0t   t1t   bytest   dtt   kbytest	   deletionst   namest   namet   subdirt   localsubdirt   newpwd(    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyR%   i   sŽ    

  
		 
	
	



" 
+  	 !   c         C   s  t  j j |  ƒ r× t  j j |  ƒ r× y t  j |  ƒ } Wn t  j k
 rT g  } n Xd } x2 | D]* } t t  j j |  | ƒ ƒ sb d } qb qb W| sš d Sy t  j |  ƒ Wqt  j k
 rÓ } d |  | f GHd SXn: y t  j	 |  ƒ Wn& t  j k
 r} d |  | f GHd SXd S(   Ni   i    s#   Can't remove local directory %r: %ss   Can't remove local file %r: %s(
   R?   R@   RA   t   islinkR]   R   R_   RC   t   rmdirRP   (   Ro   Rz   t   okR{   R   (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyR_   7  s,    %
RR   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s1   | |  _  d |  _ d |  _ | |  _ | |  _ d  S(   Ni    (   Rr   Rv   t   hashest	   blocksizet   outfp(   t   selfRr   Rƒ   R„   (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyt   __init__R  s
    				c         C   sƒ   |  j  t | ƒ |  _  t |  j  ƒ |  j } x@ | |  j k rn |  j j d ƒ |  j j ƒ  |  j d |  _ q/ W|  j j | ƒ d  S(   Nt   #i   (	   Rv   RK   R   Rƒ   R‚   R„   RU   t   flushRr   (   R…   t   dataR‚   (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyRU   X  s    c         C   s   |  j  j d ƒ d  S(   Ns   
(   R„   RU   (   R…   (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyRX   `  s    (   t   __name__t
   __module__R†   RU   RX   (    (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyRR   Q  s   		c         C   sZ   d |  | | f } x@ t  | ƒ j ƒ  j ƒ  } | d k r> d S| d k rN d Sd GHq d  S(   Ns   Retrieve %s %s from %s ? [ny] t   yt   yet   yesi   R
   t   nt   not   nopt   nopei    s   Please answer yes or no.(   RŒ   R   s   yes(   R
   R   R   R‘   R’   (   t	   raw_inputRJ   t   lower(   t   filetypeRg   R"   t   promptt   reply(    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyRO   d  s    c         C   sO   t  j j |  ƒ r d  St  j j |  ƒ } | r; t | ƒ n  t  j |  d ƒ d  S(   Niÿ  (   R?   R@   RA   t   dirnameRB   t   mkdir(   t   pathnameR˜   (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyRB   p  s     c   	      C   s  t  j j | ƒ \ } } t  j j | d | ƒ } t  j j | | d ƒ } y t  j | ƒ Wn t  j k
 rq n Xt | d ƒ } | j d ƒ x1 |  j ƒ  D]# \ } } | j d | | f ƒ q› W| j d ƒ | j	 ƒ  y t  j
 | | ƒ Wn t  j k
 rn Xt  j
 | | ƒ d  S(   NR8   t   ~t   ws   {
s   %r: %r,
s   }
(   R?   R@   R   RC   RP   R   RD   RU   t   itemsRX   RY   (	   t   dictRg   t   dirt   fnameRp   t   backupRr   t   keyt   value(    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyRZ   z  s$    
t   __main__(    (   R   R?   R   RS   R   R   R   R    R   R   R   R   R   R   R   R1   R%   R_   RR   RO   RB   RZ   RŠ   (    (    (    s/   /usr/lib64/python2.7/Tools/scripts/ftpmirror.pyt   <module>   s.   		=	Î			
	