ó
Ý²k^c           @` s.  d  d l  m Z m Z m Z m Z d  d l m Z d  d l Z d  d l m	 Z	 m
 Z
 m Z m Z m Z m Z m Z d  d l Z d  d l Z d  d l Z d d l m Z d d l m Z m Z m Z d d l m Z d d	 l m Z m Z m Z d d
 l m  Z  d d l! m" Z" m# Z# d d l$ m% Z% m& Z& d d l' m( Z( d d l) m* Z* m+ Z+ m, Z, m- Z- d d l. m/ Z/ d d l0 m1 Z1 m2 Z2 m3 Z3 d d l4 m5 Z5 d d l6 m7 Z7 d d l8 m9 Z9 e: d „ Z; e j< d ƒ Z= e: e> d d d „ Z@ e> d „ ZA e> e> d „ ZB e: d „ ZC d „  ZD e> e: d d „ ZE d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   defaultdictN(   t   abspatht   dirnamet   existst   isdirt   isfilet   joint   relpathi   (   t   context(   t
   itervaluest   on_wint   open(   t   expand(   t   is_urlt   join_urlt   path_to_url(   t	   get_index(   t   PrefixSetupt   UnlinkLinkTransaction(   t   PackageCacheDatat   ProgressiveFetchExtract(   t
   PrefixData(   t   DisallowedPackageErrort
   DryRunExitt   PackagesNotFoundErrort
   ParseError(   t   rm_rf(   t   islinkt   readlinkt   symlink(   t	   MatchSpec(   t   PrefixGraph(   t   _get_best_prec_matchc         C` sa   t  ƒ  } xQ t |  ƒ j ƒ  D]= } | r: d | k r: q n  | j t  | j d d ƒ ƒ ƒ q W| S(   ub   
    Return the set of files which have been installed (using conda) into
    a given prefix.
    u	   file_hashu   files(    (   t   setR   t   iter_recordst   updatet   get(   t   prefixt   exclude_self_buildt   rest   meta(    (    s)   lib/python2.7/site-packages/conda/misc.pyt   conda_installed_files!   s    	#u]   (?:(?P<url_p>.+)(?:[/\\]))?(?P<fn>[^/\\#]+(?:\.tar\.bz2|\.conda))(:?#(?P<md5>[0-9a-f]{32}))?$c         C` s-  t  t ƒ } | | d <g  } xØ |  D]Ð } | d k r; q# n  t | ƒ s\ t t | ƒ ƒ } n  t j | ƒ }	 |	 d  k rŠ t d | ƒ ‚ n  |	 j	 d ƒ |	 j	 d ƒ |	 j	 d ƒ }
 } } t
 |
 | ƒ } | j | ræ t | d | ƒn	 t | ƒ ƒ q# Wt j rt ƒ  ‚ n  t | ƒ } | j ƒ  t d „  | Dƒ ƒ } t d	 „  | Dƒ ƒ sUt ‚ g  } t | ƒ } xn t | ƒ D]` \ } \ } } t | d
 | j ƒ} | | | d <| j | j d  ƒ } | rt| j | ƒ qtqtWt | | t d „  | Dƒ ƒ d t d „  | Dƒ ƒ d ƒ } t | ƒ } | j ƒ  d  S(   Nu   PREFIXu	   @EXPLICITu    Could not parse explicit URL: %su   url_pu   fnu   md5t   md5c         s` s-   |  ]# } | t  t j | ƒ d  ƒ g Vq d  S(   N(   t   nextR   t	   query_allt   None(   t   .0t   spec(    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>X   s   c         s` s   |  ] } | d  d k Vq d S(   i   N(   R1   (   R2   t
   spec_pcrec(    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>Z   s    t   namei    c         s` s   |  ] } | d  Vq d S(   i   N(    (   R2   t   sp(    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>f   s    c         s` s   |  ] } | d  Vq d S(   i    N(    (   R2   R6   (    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>g   s    (    (    (   R   t   listR   R   R   t   url_patt   matchR1   R   t   groupR   t   appendR"   R   t   dry_runR   R   t   executet   tuplet   anyt   AssertionErrorR   t	   enumerateR5   R(   R   R   (   t   specsR)   t   verboset   force_extractt
   index_argst   indext   actionst   fetch_specsR3   t   mt   url_pt   fnt   md5sumt   urlt   pfet   specs_pcrecst   precs_to_removet   prefix_datat   qt   pcrect   new_spect   prect   stpt   txn(    (    s)   lib/python2.7/site-packages/conda/misc.pyt   explicit1   sB    

//	
	c         C` s9   | t  |  ƒ d } t r5 | r5 | j d d ƒ } n  | S(   Ni   u   \u   /(   t   lenR   t   replace(   R)   t   patht   windows_forward_slashesR+   (    (    s)   lib/python2.7/site-packages/conda/misc.pyt   rel_pathm   s    c         C` sÃ  t  ƒ  } t |  ƒ }  d d d d d d d d d	 d
 d d h } d d d h } t j d k rs | j d d h ƒ n  x+t j |  ƒ D]} | r¡ | | k r¡ qƒ n  t t |  | ƒ ƒ rÉ | j	 | ƒ qƒ n  xÑ t j
 t |  | ƒ ƒ D]· \ } } }	 | o	| t |  d ƒ k }
 xE |	 D]= } |
 r1| | k r1qn  | j	 t t | | ƒ |  ƒ ƒ qWxB | D]: } t | | ƒ } t | ƒ r[| j	 t | |  ƒ ƒ q[q[Wqâ Wqƒ Wt r»| r»d „  | Dƒ S| Sd S(   uB   
    Return the set of all files in a given prefix directory.
    u   pkgsu   envsu	   conda-bldu
   conda-metau   .conda_locku   usersu   LICENSE.txtu   infou   conda-recipesu   .indexu   .unionfsu	   .nonadminu   condau   activateu
   deactivateu   darwinu
   python.appu   Launcher.appu   binc         S` s"   h  |  ] } | j  d  d ƒ ’ q S(   u   \u   /(   RZ   (   R2   R[   (    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <setcomp>’   s   	 N(   R%   R   t   syst   platformR'   t   ost   listdirR	   R
   t   addt   walkR   R   R   (   R)   t   ignore_predefined_filesR\   R+   t   ignoret	   binignoreRK   t   roott   dirst   filest   should_ignoret   fn2t   dnR[   (    (    s)   lib/python2.7/site-packages/conda/misc.pyt   walk_prefixt   s6    	(#%c         ` s-   t  |  | ƒ ‰  ‡  f d †  t |  ƒ ˆ  Dƒ S(   uE   
    Return (the set) of all untracked files for a given prefix.
    c         ` sb   h  |  ]X } | j  d  ƒ pU t j d k r9 | j  d ƒ pU | j  d ƒ oU | d  ˆ  k s | ’ q S(   u   ~u   darwinu	   .DS_Storeu   .pyciÿÿÿÿ(   t   endswithR^   R_   (   R2   R[   (   t   conda_files(    s)   lib/python2.7/site-packages/conda/misc.pys	   <setcomp>   s   	 (   R-   Rm   (   R)   R*   (    (   Ro   s)   lib/python2.7/site-packages/conda/misc.pyt	   untracked—   s    c         C` so   t  rk t t t j d ƒ ƒ rk t |  ƒ s: t j |  ƒ n  t t |  d ƒ d ƒ  } | j	 d ƒ Wd QXn  d S(   uO   
    Creates $PREFIX/.nonadmin if sys.prefix/.nonadmin exists (on Windows)
    u	   .nonadminu   wu    N(
   R   R   R
   R   t   root_prefixR   R`   t   makedirsR   t   write(   R)   t   fo(    (    s)   lib/python2.7/site-packages/conda/misc.pyt   touch_nonadmin¥   s
    c         ` s7  t  |  ƒ } i  ‰  t } xÅ | rß t } x² t |  ƒ j ƒ  D]ž ‰ ˆ d } | ˆ  k r\ q: n  | d k r| ˆ ˆ  d <t } Pn  | d k rœ ˆ ˆ  d <t } Pn  x9 ˆ j D]. } t | ƒ j ˆ  k r¦ ˆ ˆ  | <t } q¦ q¦ Wq: Wq Wˆ  rp| sKt j	 rþ t
 j n t
 j }	 t d d |	 ƒx1 t ˆ  ƒ D]  ‰ t d ˆ j ƒ  d |	 ƒq$Wn  ‡  f d †  t |  ƒ j ƒ  Dƒ }
 n d „  t |  ƒ j ƒ  Dƒ }
 i  } g  |
 D] ‰ ˆ j d	 ƒ s™ˆ ^ q™} g  } | r¡| pÏi  } t |   } xÀ | D]µ ‰ t d
 ˆ j d ˆ j d ˆ j ƒ ‰ t ‡ f d †  t | ƒ Dƒ ƒ } | sG| j ˆ ƒ qåt | ƒ d k r||
 j ˆ ƒ |
 j t | ƒ ƒ qå|
 j ˆ ƒ |
 j | d ƒ qåWn  | r¶t | ƒ ‚ n  i  } x |
 D] ‰ ˆ d	 | ˆ <qÃWt t | ƒ j ƒ } g  | D] ‰ | ˆ ^ q÷} t d „  t j Dƒ ƒ } x9 | D]1 ‰ t ‡ f d †  | Dƒ ƒ r-t ˆ ƒ ‚ q-q-W| r“t d t | ƒ ƒ t d t | ƒ ƒ n  t j  r¨t! ƒ  ‚ n  xZ| D]R} t" |  | ƒ } t" | | ƒ } t# | ƒ } t$ | ƒ s÷t% | ƒ rt& | ƒ n  t' | ƒ s t( j) | ƒ n  t$ | ƒ rEt* t+ | ƒ | ƒ q¯n  y( t, | d ƒ  } | j- ƒ  } Wd QXWn t. k
 rƒq¯n Xy4 | j/ d ƒ } | j0 |  | ƒ } | j1 d ƒ } Wn t2 k
 rËn Xt, | d ƒ  } | j3 | ƒ Wd QXt4 j5 | | ƒ q¯Wt6 | | d | d | d t d | ƒ} | | f S(   u1   
    clone existing prefix1 into new prefix2
    u   nameu   condau	   conda-envuD   The following packages cannot be cloned out of the root environment:t   fileu    - c         ` s&   h  |  ] } | d  ˆ  k r | ’ q S(   u   name(    (   R2   RU   (   t   filter(    s)   lib/python2.7/site-packages/conda/misc.pys	   <setcomp>Ò   s   	 c         S` s   h  |  ] } | ’ q S(    (    (   R2   RU   (    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <setcomp>Ô   s   	 u   urlR5   t   versiont   buildc         3` s$   |  ] } ˆ  j  | ƒ r | Vq d  S(   N(   R9   (   R2   RU   (   R3   (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>à   s    i   i    c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R"   (   R2   t   s(    (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>ô   s    c         3` s   |  ] } | j  ˆ  ƒ Vq d  S(   N(   R9   (   R2   t   d(   RU   (    s)   lib/python2.7/site-packages/conda/misc.pys	   <genexpr>ö   s    u   Packages: %du	   Files: %du   rbNu   utf-8u   wbRC   RF   RD   RE   (7   Rp   t   Truet   FalseR   R&   t   combined_dependsR"   R5   R   t   jsonR^   t   stderrt   stdoutt   printR   t   dist_strR(   R   Rx   Ry   R>   R;   RY   t   removeRb   R$   R   R#   t   grapht   disallowed_packagesR?   R   R<   R   R
   R   R   R	   R   R   R`   Rr   R!   R    R   t   readt   IOErrort   decodeRZ   t   encodet   UnicodeDecodeErrorRs   t   shutilt   copystatRX   (   t   prefix1t   prefix2RC   t   quietRE   t   untracked_filest   foundR5   t   dept   fht   drecsRF   t   unknownst   notfoundt   precst   urlst
   disallowedt   ft   srct   dstt   dst_dirt   fit   dataRz   Rt   RG   (    (   Rw   RU   R3   s)   lib/python2.7/site-packages/conda/misc.pyt	   clone_env°   s²    	



!%($"	(F   t
   __future__R    R   R   R   t   collectionsR   R`   t   os.pathR   R   R   R   R	   R
   R   t   reRŒ   R^   t   base.contextR   t   common.compatR   R   R   t   common.pathR   t
   common.urlR   R   R   t
   core.indexR   t	   core.linkR   R   t   core.package_cache_dataR   R   t   core.prefix_dataR   t
   exceptionsR   R   R   R   t   gateways.disk.deleteR   t   gateways.disk.linkR   R    R!   t   models.match_specR"   t   models.prefix_graphR#   t   planR$   R}   R-   t   compileR8   R|   R1   RX   R]   Rm   Rp   Ru   R¡   (    (    (    s)   lib/python2.7/site-packages/conda/misc.pyt   <module>   s8   "4"<#	