
    8xd$                    x
   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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Zd dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d d	l(m)Z) d dl*Z*	 d d
l+m,Z, n# e-$ r e.Z,Y nw xY wd dl/Z0d dl1Z1d dl2Z2	 d dl3m4Z4m5Z5m6Z6 n# e7$ r d dl3m8Z4 dZ5e5e4fZ6Y nw xY wd dl9m:Z; d dl<m=Z> d dl?m?Z@ d dlAmBZB d dlCmDZE d dlFmGZG d dlHmIZI ddlJmKZK ddlJmLZL ddlJmMZM ddlJmNZN ddlJmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ddZ?d dl m[Z[ e\Z\e]Z]ej^        dk    Z_ e            pdZ`ej^        dk    Z_eja        #                    eXe_rdnd          Zbe_rd nejc        Zde_rd neje        Zfe_rd nejg        Zhh d Zih d!Zjd"Zkd#Zl	 d d$lmmZmmnZn n# e-$ r	 d d%lmmnZn Y nw xY w ed&          d'             Zod( Zpd) Zq G d* d+          Zrd, Zs G d- d.          Ztd/ Zud0 Zvd1 Zwd2 Zxd3 Zyd4 Zze j{        d5             Z|d6 Z}d7 Z~	 dd:Zd; Zdd<Z	 dd=Zeja        #                    eXd>          eja                            eja        #                    d?d@                    fZddAZddBZddDZdEZddGZdH ZdI ZdJ ZdK ZddMe)e         dNedOefdPZdQ ZddRZdS ZdT ZdU ZdV ZdW ZdX ZddYZe j{        dZ             Ze j{        dd[            Zej^        dk    rdndZ ej        d\          Zd] Zd^ Zd_ Zd` Zi Zda Zdb ZdddZddeZddfZe j{        dg             Zdh Zdi Z G dj dk          Zdl Zdm Z G dn doe          Zdp Z e2j        ee           e j{        dq             Ze j{        ddr            Zds Zdt ZddwZ	 ddyZdz Zdd{ZD G d| d}ej                  Z G d~ dej                  Z G d dej                  Z e            a eej                  Z eej                  Z ej        d          Z ej        d                              ej                    ej        d                              ej                    ej        d                              ej                    ej        d                              ej                   d Zej        ddfdZd Z	 ddZd Zd Zdd efehz  dd fdZd ZddZ ej        d          Z ej        d          ZddZd ZddZd ZddZd Zi ad Zd Zd ZdedOefdZdS )    N)OrderedDictdefaultdict)	lru_cache)filterfalse)getpreferredencoding)
abspathdirname
expanduser
expandvarsgetmtimegetsizeisdirisfileislinkjoin)Path)Thread)Iterable)JSONDecodeError)CONDA_PACKAGE_EXTENSION_V1CONDA_PACKAGE_EXTENSION_V2CONDA_PACKAGE_EXTENSIONS)CONDA_TARBALL_EXTENSIONz.conda)glob)PackageCacheData)rm_rf)BuildLockError)external   Dist)StringIO)cc_conda_build)context)CondaHTTPError	MatchSpecTemporaryDirectoryVersionOrderdownloadget_conda_channelhashsum_filemd5_file	pkgs_dirsroot_dirunix_path_to_winwin_path_to_unixTc                 $    t          | |          S )N	recursive)	glob_glob)pathnamer3   s     1lib/python3.11/site-packages/conda_build/utils.pyr   r   `   s    X3333    )	ExitStackwin32zutf-8Scriptsbin>   zos-zosx-64win-32win-64linux-32linux-64	osx-arm64	win-arm64linux-ppc64linux-s390xlinux-armv6llinux-armv7llinux-aarch64linux-ppc64lenoarch>   weakrJ   strongweak_constrainsstrong_constrainsz
# -*- coding: utf-8 -*-
import re
import sys

from %(module)s import %(import_name)s

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
)z	meta.yamlzmeta.ymlz
conda.yamlz	conda.yml)scandirwalk)rP   )maxsizec                 *    t          j        |           S N)osstatpaths    r6   	stat_filerX      s    74==r7   c                 6   d}t                      }t          |           D ]x\  }}}|D ]o}	 t          t          j                            ||                    }n# t          $ r Y =w xY w|j        |v rK|                    |j                   ||j	        z  }py|S )Nr   )
setrP   rX   rT   rW   r   OSErrorst_inoaddst_size)rW   
total_sizeseenroot_filesfrU   s           r6   directory_size_slowre      s    J55Dt** ' 'a 	' 	'A dA!6!677    {d""HHT[!!!$,&JJ	' s   -A
A&%A&c                    	 t           r,d}t          j        |                    |           d          }nGd}t          j        |                    |                                           t          j                  }t          |d          r9	 |                    d          }n!# t          t          f$ r t           rY d	S Y nw xY wt           r|
                                                    d
d          d         }d}t          j        ||
                                                              d          
                                }|                    dd                              dd                              d d          }n|                                d	         }n$# t          j        $ r t#          |           }Y nw xY w	 t%          |          S # t&          $ r Y d	S w xY w) zdir /s "{}"T)shellzdu -s {})stderrdecodeignore)errorsr   z
   z\s([\d\W]+).+r   , .)on_win
subprocesscheck_outputformatsplitPIPEhasattrrj   UnicodeDecodeError
IndexErrorstriprsplitresearchgroupreplaceCalledProcessErrorre   int
ValueError)rW   commandoutpatterns       r6   directory_sizer      s   ( 	#G)'..*>*>dKKKCC G)t$$**,,Z_  C 3!! 	jjj11&
3    11D	
  	!))++$$VQ//3C&G)GSYY[[1177::@@BBC++c2&&..sB77??RHHCC))++a.C( ( ( (!$''(3xx   qqsO   B
F" B$ #F" $C<F" ?F" CCF" "GGG 
G$#G$c                       e Zd Zd ZdS )DummyPsutilProcessc                     g S rS    selfargskwargss      r6   childrenzDummyPsutilProcess.children   s    	r7   N)__name__
__module____qualname__r   r   r7   r6   r   r      s#            r7   r   c                 p  	 t                      t          |                                 d d          D ]
\  }}||<   t          j                    \  }	t          j        |d          t          j        dk    rdnd	fd}t          |	          }d|_	        |
                                 	S )
a  Rewrite values of env variables back to $ENV in stdout

    Takes output on the pipe and finds any env value
    and rewrites it as the env key

    Useful for replacing "~/conda/conda-bld/pkg_<date>/_h_place..." with "$PREFIX"

    Returns an FD to be passed to Popen(stdout=...)
    c                 ,    t          | d                   S )Nr   )len)kvs    r6   <lambda>z%_setup_rewrite_pipe.<locals>.<lambda>   s    3r!u:: r7   T)keyreversertr9   z%{}%z${}c                      	 	                                  } | s*                                 t          j                   d S                                 D ].\  }}|                     |                    |                    } /t          j                            |            nX# t          $ rK 	 t          j
        d          }t          j                            |pd           n# t          $ r Y nw xY wY nw xY w)NTi'  rp   )readlinecloserT   itemsr   ru   sysstdoutwritery   read	TypeError)linesr   txtrreplacement_treplacementsw_fds       r6   rewriterz%_setup_rewrite_pipe.<locals>.rewriter   s   	zz|| GGIIIHTNNNF*0022 F FFAs<<=+?+?+D+DEEDD
  &&&&%   '!U++CJ$$SYB////    D		s<   >B' A"B' '
C<26C)(C<)
C63C<5C66C<;C<)target)r   sortedr   rT   pipefdopenr   platformr   daemonstart)
envkvr_fdr   tr   r   r   r   s
         @@@@r6   _setup_rewrite_piper      s     ==Lsyy{{(=(=tLLL  1QJD$
	$A
|w       & 	hAAHGGIIIKr7   c                        e Zd Zd Zd Zd ZdS )PopenWrapperc                     d | _         d| _        d| _        d | _        d| _        d| _         | j        |i |\  | _        | _        d S Nr   r   )	elapsedrssvms
returncodedisk	processes_executer   errr   s      r6   __init__zPopenWrapper.__init__  sO    	*T]D;F;;$(((r7   c                    	 dd l }|j        |j        |j        f}nh# t          $ r[}d }t          t
          f}t          t                    }|                    d|            |                    d           Y d }~nd }~ww xY w|	                    dd          }|
                    dt          j                  }|r&|                    t          j                              nt!                      }	t#          t$                    }
t'          j                    }|r |j        |i |nt+          j        |i |}	 | j        d}d}d}|	                    d          D ]}|

                    |j        i           }	 |                                }||j        z  }||j        z  }|                                }|j        |d	<   |j        |d
<   ||
|j        <   n# |$ r Y w xY w|dz  }t=          || j                  | _        t=          || j                  | _        tA          d |
!                                D                       | _"        tA          d |
!                                D                       | _#        t=          || j$                  | _$        t=          tK          |          | j&                  | _&        t'          j'        |           t'          j                    |z
  | _(        |)                                | _        | j        n## tT          $ r |+                                  w xY wt=          tK          |          | j&                  | _&        t'          j                    |z
  | _(        |j,        |j-        fS )Nr   z!psutil import failed.  Error was zsonly disk usage and time statistics will be available.  Install psutil to get CPU time and memory usage statistics.time_intrm   cwdTr2   r   userr   c              3   &   K   | ]}|d          V  dS )r   Nr   .0childs     r6   	<genexpr>z(PopenWrapper._execute.<locals>.<genexpr>i  s&      "P"PE5<"P"P"P"P"P"Pr7   c              3   &   K   | ]}|d          V  dS )r   Nr   r   s     r6   r   z(PopenWrapper._execute.<locals>.<genexpr>j  s&      #R#ReE&M#R#R#R#R#R#Rr7   ).psutilNoSuchProcessAccessDeniedImportErrorr[   r   
get_loggerr   warnpopgetr   prefixProcessrT   getpidr   r   dicttimePopenrs   r   r   pidmemory_infor   	cpu_timessystemr   maxr   sumvaluescpu_syscpu_userr   r   r   sleepr   pollKeyboardInterruptkillr   ri   )r   r   r   r   psutil_exceptionselogr   disk_usage_dirparent	cpu_usage
start_time_popenr   r   r   r   child_cpu_usagemem	cpu_statss                       r6   r   zPopenWrapper._execute&  s   	MMM $#$!
  	 	 	F!(* 5X&&CHH<<<===HH<       	 ::j!,,E3:66 17P	,,,<N<P<P%%	 Y[[
 3LFL$)&)))!42622 	
,	/)
 	#__t_<< # #E&/mmEIr&B&BO!#//11swsw %*OO$5$5	1:1A.2;.//>	%),,, ! ! ! ! NII sDH--sDH--""P"PY=M=M=O=O"P"P"PPP ##R#Ry?O?O?Q?Q#R#R#R R R!$Y!?!?  ~ > >	JJ	
8$$$#y{{Z7"(++--O /)R ! 	 	 	KKMMM	 ~66	BB	y{{Z/}fm++sH    
B AA;;B 7AL 9AGL GL GD.L  L+c                     t          | j        | j        | j        | j        | j        | j        | j        | j        d          S )N)r   r   r   r   r   r   r   r   )	strr   r   r   r   r   r   r   r   r   s    r6   __repr__zPopenWrapper.__repr__|  sF    <xx	!^ M<"o	 	
 
 	
r7   N)r   r   r   r   r   r   r   r7   r6   r   r     sE        < < <T, T, T,l
 
 
 
 
r7   r   c           
         d|vrI|                                 }t          j                                         }|                    d|i           d |d                                         D             |d<   g }d|vrt
          j        |d<   |D ]}t          j        j	        dk     r+t          |d          r|                    t                    }n?t          j        j	        dk    r*t          |d          r|                    t                    }|                    t          |                     |                    d          }d|v r|d= |                    dd           }|rt%          |          |d	<   d }|t'          |fi |}	| d
k    r|	j                                        }|	j        dk    rt          j        |	j        |          |                    |	j        |	j        |	j        |	j        |	j        |	j        |	j        d           n2| dk    rt          j        |fi | nd	|v r|d	= t          j         |fi |}|S )Nr   c                 N    i | ]"\  }}t          |          t          |          #S r   )r   )r   r   values      r6   
<dictcomp>z6_func_defaulting_env_to_os_environ.<locals>.<dictcomp>  s*    RRRjc5SXXs5zzRRRr7   stdin   encoderj   statsrewrite_stdout_envr   outputr   )r   r   r   r   r   r   r   call)!copyrT   environupdater   rs   rw   r   version_infomajorrx   r  codecrj   appendr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
check_callrt   )
func	popenargsr   env_copy_argsargr  r  r   procs
             r6   "_func_defaulting_env_to_os_environr    sa   F:??$$uh'(((RRF5M<O<O<Q<QRRRF5MEf$/w  !A%%'#x*@*@%**U##CC#q((WS(-C-C(**U##CSXXJJwE&7O$8$?? C./ABBx
CE,,V,,8(--//C?a/GGG<	!^ M<xx 
	
 
	
 
	
 
	
 6>>!%22622226!!8$)%::6::CJr7   c                 "    t          dg| R i |S )Nr  )r  r  r   s     r6   check_call_envr    s     -fKyKKKFKKKr7   c                 ^    t          dg| R dt          j        i|                                S )Nr  r   )r  rs   rw   rstripr  s     r6   check_output_envr    sD    -+4  #8> fhhr7   c                     d}i }t          |          D ]\  }}d|dz   dz  z  ||<   t          |          D ]/}| ||         k    r!t          |           ||         z  }|d| c S 0d| z  S )N)KMGTPEZYr   
   z.1fz%sB)	enumeratereversedfloat)nsymbolsr   ir   r   s         r6   bytes2humanr+    s     7GF'"" & &1!a%2%q		g % %q	>>!HHvay(E$$$$$$$  19r7   c                     t          | d          \  }} t          t          |          d          \  }}|dd|dd| dS )N<   d:02dz04.1f)divmodr   )r   mhs      r6   seconds2humanr4    sQ    !R==DAq#a&&"DAq%%%A%%%A%%%%r7   c                    t          |           r<|                                                     t                    s,|                                                     t                    rt          j                    }|                                                     t                    r ddl}|j        	                    | |           nt          | |           t          j                            |dd          }t          |          r.t          |t          j                            |d                     d}nTt          d| z             dS t          t          j                            t          j                    |                     }d}t          j                            |          st%          d	| d
          ||fS )a  resolve recipe dir as absolute path.  If recipe is a tarball rather than a folder,
    extract it and return the extracted directory.

    Returns the absolute path, and a boolean flag that is true if a tarball has been extracted
    and needs cleanup.
    r   Ninfoz
recipe.tarTzIgnoring non-recipe: %s)NNFzPackage or recipe at path z does not exist)r   lowerendswithdecompressible_extsr   tempfilemkdtempconda_package_handling.apiapiextracttar_xfrT   rW   r   printr   getcwdexistsr   )recipe
recipe_dirconda_package_handlingrecipe_tarfileneed_cleanups        r6   get_recipe_abspathrH    s    f~~ <<>>""#677 	 6<<>>;R;R$<
 <
 	  ")++J||~~&&'?@@ +1111&*226:FFFFvz***W\\*flKKNn%% I~rw||J'G'GHHHLL+f4555<RW\\")++v>>??
7>>*%% SQjQQQRRR|##r7   c              #     K   t          j                     }t          j                     |z
  |k     rf	 | D ]}|                    d           	 nW# t          j        $ r | D ]}|                                 Y nw xY wt          j                     |z
  |k     ft          d          	 dV  | D ]}|                                 dS # | D ]}|                                 w xY w)a2  Try to acquire all locks.

    If any lock can't be immediately acquired, free all locks.
    If the timeout is reached withou acquiring all locks, free all locks and raise.

    http://stackoverflow.com/questions/9814008/multiple-mutex-locking-strategies-and-why-libraries-dont-use-address-comparison
    g?timeoutzFailed to acquire all locksN)r   acquirefilelockTimeoutreleaser   )locksrK  r   locks       r6   try_acquire_locksrR    s+      		A
)++/G
#
#	 * *S))))*   	 	 	    	 )++/G
#
#0 :;;; 	 	DLLNNNN	 	E 	 	DLLNNNN	s   A (A98A9&C C c           	         d}t           j        t           j        t           j        fD ])}	  || |           d} n# t          t
          f$ r Y &w xY w|s	 t          j        d|  d| dt          j        t          j                   d S # t          j	        $ rB}t          j                            |          st	          d|  d| d|           Y d }~d S d }~ww xY wd S )	NFTzcp -a rg   )rh   ri   r   zFailed to copy  to z.  Error was: )shutilcopy2r  copyfiler[   PermissionErrorrs   r  rw   r   rT   rW   r   )srcdst	is_copiedr  r   s        r6   _copy_with_shell_fallbackr\  3  sO   Iv{FO<  	DcNNNIE) 	 	 	H	 
Q		Q!$$$s$$!!	      , 	Q 	Q 	Q7>>#&& QOOOOOAOOPPPQ Q Q Q Q Q	Q
Q 
Qs'   9AA2B C7CCc                 :   |                      t          j        j                  }|                     t          j        j                  }|r,|d         |d         k    r|d= |d= |r|d         |d         k    t          j        j        | t          j        j        | fS )N)rv   rT   rW   sepr   )rY  rZ  ssplitdsplits       r6   get_prefix_replacement_pathsrb  I  s    YYrw{##FYYrw{##F
 VBZ6":--2J2J  VBZ6":-- 7< "',"777r7     Fc           	         t          t                    }|r%t          |           r	 t          j        t          j                            |                     n# t          $ r Y nw xY wt          j                            |          rt          j	        |           t          | |          \  }}	t          j        |           }
|
                    ||	          }t          j        ||           	 t          j        |           }t          j        |j                  }t          j        ||           dS #  Y dS xY wt'          |           rt)          | ||||||           dS t'          |          r>t          j                            |t          j                            |                     }n|}t          j                            |           r t          j                            |           }nyt          j        j        |v rSt          j                            |          }t          j                            |          st          j        |           nt          j                    }t          j                            |           rTt          j                            t          j                            |                     s|                    d|            dS |s|rt;          ||          }|r|gng }t=          ||          5  t          j                            |          }|rEt          j                            |          s&	 t          j        |           n# t          $ r Y nw xY w	 t?          | |           nI# t@          j!        $ r7 |"                    dt          j                            |           |           Y nw xY wddd           dS # 1 swxY w Y   dS )z>Copy all the files and directories in src to the directory dst)rK  rQ  lockingclobberz+path %s is a broken symlink - ignoring copyNrJ  z"skipping %s - already exists in %s)#r   r   r   rT   makedirsrW   r	   r[   lexistsremoverb  readlinkr   symlinklstatrU   S_IMODEst_modelchmodr   
merge_treer   basenameisabsr_  rA  rB  realpathr   get_lockrR  r\  rU  Errordebug)rY  rZ  rK  symlinksrQ  re  rf  r   src_basedst_base
src_targetsrc_replacedstmodedst_fn
src_folderrP  
dst_folders                     r6   	copy_intor  R  s    X

C @F3KK @	K,,---- 	 	 	D	7??3 	IcNNN9#sCC([%%
!))(H==

<%%%	#B<
++DIc4     	DD	s /	
 	
 	
 	
 	
 	
 :: 	W\\#rw'7'7'<'<==FFF7== 	)--JJw{f$$W__V44
w}}Z00 ,K
+++Y[[
7>># 	rw~~bg6F6Fs6K6K'L'L 	HHBCHHHF 	9 	9J888D!)rug.. 	 	--J "'.."<"< K
++++   D)#v6666<   		8"':J:J3:O:OQT    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sz   1A 
A('A(1AD5 5D:
AOM! O!
M.+O-M..O2NOAO	OO		OO Oc           	      "   	 t          j        | |           d S # t          $ rk 	 t          | |           t	          j        |            Y d S # t          $ r5 t          t                    }|                    d|  d| d           Y Y d S w xY ww xY w)Nz Failed to copy/remove path from rT  z due to permission error)	rU  moverX  r  rT   unlinkr   r   rv  )rY  rZ  r   s      r6   move_with_fallbackr    s    
C   	c3IcNNNNNN 	 	 	X&&CIIY3YYCYYY      		s&    
B$A:B
B	B

Bc                    t           j                                      s)t          j                   t	          j        |            t          j        |           }|r || |          fd|D             }d|v r|                    d           fd|D             }|sHt          |          D ]7\  }}t           j        	                    | |          }	||         }
|rt           j        
                    |	          rt           j                            |
          rt          j        |
           t          j        t          j        |	          |
           	 t          j        |	          }t          j        |j                  }t          j        |
|           #  Y xY wt           j                            |	          rt)          |	|
||           't+          |	|
           9|S )Nc                     g | ]}|v|	S r   r   )r   xexcls     r6   
<listcomp>zcopytree.<locals>.<listcomp>  s    ///Q$qr7   z.conda_lockc                 P    g | ]"}t           j                            |          #S r   rT   rW   r   )r   itemrZ  s     r6   r  zcopytree.<locals>.<listcomp>  s)    7774rw||C&&777r7   )rT   rW   rB  rg  rU  copystatlistdirri  r%  r   r   rh  rk  rj  rl  rU   rm  rn  ro  r   copytreer\  )rY  rZ  rw  rk   dry_runlstdst_lstidxr  r   r.  r|  r}  r  s    `           @r6   r  r    s   7>># "
CS!!!
*S//C 0vc3////#/// 

=!!!77773777G 0"3 	0 	0ICS$''AA 0BGNN1-- 07??1%% !IaLLL
2;q>>1---!B<
33DIa&&&&Dq!! 0Ax0000)!Q////Ns   AF!!F%c                    t           j                            t           j                            |                    }t           j                            t           j                            |                     } |                    |           rJ d                    | |                      t          | ||d          }d |D             }|r,|s*t          d                    | ||d                             g }	|r|st          | |          }|g}	t          |	|          5  t          | ||           d	d	d	           d	S # 1 swxY w Y   d	S )
z
    Merge src into dst recursively by copying all files from src into dst.
    Return a list of all files copied.

    Like copytree(src, dst), but raises an error if merging the two trees
    would overwrite any files.
    zyCan't merge/copy source into subdirectory of itself.  Please create separate spaces for these things.
  src: {}
  dst: {}T)rw  r  c                 0    g | ]}t          |          |S r   )r   )r   rd   s     r6   r  zmerge_tree.<locals>.<listcomp>  s#    222aq		2222r7   z'Can't merge {} into {}: file exists: {}r   rJ  )rw  N)
rT   rW   normpathnormcase
startswithru   r  r[   rt  rR  )
rY  rZ  rw  rK  rQ  re  rf  	new_filesexistingrP  s
             r6   rp  rp    s    '

27++C00
1
1C
'

27++C00
1
1C~~c""  	 F3$$	   cHdCCCI229222H 
 
8??S(ST+VV
 
 	
 E  	2C111D	5'	*	* . .cH----. . . . . . . . . . . . . . . . . .s   #EE
ErP  ~z.conda_build_locksc                 D   d }	 t           j                            t           j                            |                     }n# t          $ r | }Y nw xY w|}t          |d          r|                                }t          j        |          	                                }t          |d          r|
                                }t          D ]}	 t           j                            |          st          j        |           t           j                            ||          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t#          j        ||          } n,# t          $ r Y w xY wt'           dj        t                     |S )Nr  rj   wrp   z\Could not write locks folder to either system location ({})or user location ({}).  Aborting.)rT   rW   r   r  r[   rx   r  hashlibsha256	hexdigestrj   _lock_foldersr   rg  r   openr   rM  FileLockRuntimeErrorru   )	folderrK  fllocation
b_locationlock_filename	locks_dir	lock_filerd   s	            r6   rt  rt    s   	B7??27#3#3F#;#;<<   Jz8$$ )&&((
 N:..88::M}h'' /%,,.." 
 
			7==++ 'I&&&Y>>Ii%%               "9g66BE 	 	 	H	 7 006G
 
 	
 IsH   <A AAA#E40EE4E	E4E	E44
F Fc                 r   g }t          |          }| rt          d d         }|t          |          z   }|D ][}t          j                            |          st          j        |           t          ||          }|                    |           \|                    t          d|                     |S )Nr   rJ  zconda-operation)	ensure_listr-   listrT   rW   r   rg  rt  r  )re  bldpkgs_dirsrK  rP  
_pkgs_dirslocked_foldersr  rQ  s           r6   get_conda_operation_locksr    s    E|,,L 	Crr]
#d<&8&88$ 	 	F7==(( $F###FG444DLLX/AAABBBLr7   libc                 >   |                      d          r
J |             |                     d          r
J |            |                    d                              d          }|dgk    rg }t          |                               d          } | dgk    rg } |rT| rR|d         | d         k    r@|                    d           |                     d           |r| r|d         | d         k    @d                    | rdgt          |           z  ndg|z             S )N/rq   rp   r   z..)r  r{   rv   r	   r   r   r   )rd   r.  s     r6   relativer  .  s&   ||C  ##!###||C  ##!###	3ASEzz

ARDyy
  adadll	a	a   adadll 88!6tfs1vvoo#!;<<<r7   )z.7z.tar.tar.bz2.tar.gzz	.tar.lzma.tar.xz.tar.zz.tar.zst.tgzz.whlz.zipz.rpmz.debr:*c                 H   |                                                      d          r\t          j        d          }|st          j        d          }|st	          j        d           t          |d| g           | d d         } t          j        | |          }|	                                }t          |d          D ]9\  }}t          j                            |j                  r*t          j                            |j        d          |_        t          j                            t          j                              }t          j                            |j                                      |          s |j                            d	d
          |_        t          j                            |j                                      |          s"t	          j        d|j        z   dz   |z              |||<   ;|                    |           |                                 d S )Nr  
uncompressgunzipzAuncompress (or gunzip) is required to unarchive .z source files.
z-frn   r   r  z../rp   ztarball contains unsafe path: z	 cwd is: rV   )r7  r8  r   find_executabler   exitr  tarfiler  
getmembersr%  rT   rW   rr  namerelpathrs  rA  r  r   
extractallr   )	tarballdir_pathr}  r  r   membersr*  memberr   s	            r6   _tar_xf_fallbackr  P  s   }})) -l;;
 	<!1(;;J 	H  
 	
D'2333#2#,Wd##AllnnGw**  	67==%% 	<'//&+s;;FKgry{{++w,,77<< 	9 +--eR88FKw,,77<< 	YH5CkQTWWXXX

LLhLGGIIIIIr7   c                    ddl m}  ||          }t          j                            |           s1t          j                            t          j                    |           } d }d}t          j        |           5 }|D ]@}|j	        |v r5|dz  }|
                                D ]}|t          |          }||z  } nAd d d            n# 1 swxY w Y   |t          |          k    rt                      |S )Nr   )r  r   )conda_build.utilsr  rT   rW   rr  r   rA  
libarchivefile_readerr  
get_blocksbytesr   KeyError)r  entriesr  resultn_foundarchiveentryblocks           r6   tar_xf_filer  n  sJ   ------k'""G7==!! 5',,ry{{G44FG			(	( 	G 	 	EzW$$1"--// ( (E~!&u% %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #g,,jjMs   :AC

CCc                 B   t           j                            |           s1t           j                            t          j                    |           } g }t          j        |           5 }|D ]}|                    |j                   	 d d d            n# 1 swxY w Y   |S rS   )	rT   rW   rr  r   rA  r  r  r  r  )r  r  r  r  s       r6   tar_xf_getnamesr    s    7==!! 5',,ry{{G44F			(	( &G 	& 	&EMM%*%%%%	&& & & & & & & & & & & & & & & Ms   ' BBBc                    t           j        j        t           j        j        z  t           j        j        z  t           j        j        z  t           j        j        z  }t          j        	                    |           s1t          j        
                    t          j                    |           } 	 t          t          j                            |                    5  t          j        | |           d d d            d S # 1 swxY w Y   d S # t           j        j        $ r< |                                                     d          rt'          | |           Y d S  w xY w)N)r  r  r  r  r  r  )r  r>  EXTRACT_TIMEEXTRACT_PERMEXTRACT_SECURE_NODOTDOTEXTRACT_SECURE_SYMLINKSEXTRACT_SECURE_NOABSOLUTEPATHSrT   rW   rr  r   rA  	tmp_chdirrs  extract_file	exceptionArchiveErrorr7  r8  r  )r  r  flagss      r6   r?  r?    s}   '


)	*


4	5 

4	5 

;		< 
 7==!! 5',,ry{{G44rw''1122 	4 	4#GU333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4, 	 	 	 ==??##H
 
 	 Wh//////	s7   +,D C:-D :C>>D C>D AEEc                 z    t          |           t          |           t          | d          t          |           dS )Nr  )sizemd5r  mtime)r   r,   r+   r   rV   s    r6   	file_infor    s9    ~~tX..$	  r7   andr   conjunctionreturnc                     t          |           } t          |           dk    r| d          d| d| d          S d                    | dd                    d| d| d          S )z
    Like ', '.join(items) but with and

    Examples:

    >>> comma_join(['a'])
    'a'
    >>> comma_join(['a', 'b'])
    'a and b'
    >>> comma_join(['a', 'b', 'c'])
    'a, b, and c'
    rm   r   rg   r   , Nr^  )tupler   r   )r   r  s     r6   
comma_joinr    sv     %LLE
5zzQ(55[5558555iicrc
##@@{@@U2Y@@@r7   c                  J   |                     dd          }|                     dd          }|                     dd          }t          j        j        j        }|                    |           |z   }t          j        j        pd} ||                    ||                     dS )	aG  
    prints unicode strings to stdout using configurable `errors` handler for
    encoding errors

    :param args: unicode strings to print to stdout
    :param sep: separator (defaults to ' ')
    :param end: ending character (defaults to '
')
    :param errors: error handler for encoding errors (defaults to 'replace')
    r_  rg   end
rl   r   utf8N)r   r   r   bufferr   r   encodingr  )r   r   r_  r  rl   r  r   r  s           r6   safe_print_unicoder    s     **UC
 
 C
**UD
!
!CZZ),,F:"D88D>>CDz",fHDXv	&	&'''''r7   c              #   T  K   t          |          }t          |          }t          |           D ]w\  } }}|D ]/}t          j        ||          D ]}|                    |           0|D ]<}t          j        ||          D ]$}t
          j                            | |          V  %=xdS )a)  
    Recursively searches path for filename patterns.

    :param path: path within to search for files
    :param patterns: list of filename patterns to search for
    :param ignore: list of directory patterns to ignore in search
    :return: list of paths in path satisfying patterns/ignore
    N)r  rP   fnmatchfilterri  rT   rW   r   )	rW   patternsignoresdirsrc   rk   r.  r   rd   s	            r6   rec_globr    s       8$$H'""G!$ZZ 	, 	,dE 	 	F^D&11  A   	, 	,G^E733 , ,gll4++++++,	,	, 	,r7   c                     t          j        d          rd|  }t          j        |          } nt	          |           } | S )Ncygpathzcygpath -w )r   r  rs   	getoutputr/   rW   cmds     r6   convert_unix_path_to_winr    H    	** &"D""#C((  %%Kr7   c                     t          j        d          rd|  }t          j        |          } nt	          |           } | S )Nr  zcygpath -u )r   r  rs   r  r0   r  s     r6   convert_win_path_to_unixr    r	  r7   c                 P    t          j        dt          j        |                     S )Nzfile:)urlparseurljoinurllibpathname2urlrV   s    r6   path2urlr    s     GV%8%>%>???r7   c                    t           j        dk    r!t          j                            | d          }nt          j                            | d          }t          t          j                            |d                    }t          t          t          |                    }|r't          j                            ||d                   }n#t          j                            |d|           }|S )Nr9   Libr  z	python?.*r   python)	r   r   rT   rW   r   r   r   r   r   )r   py_verlib_dirpython_folders       r6   get_stdlib_dirr  	  s    
|w',,vu--',,vu--RW\\';??@@{6=AABB 	?gll7M!,<==GGgll7,=V,=,=>>GNr7   c                 ^    t           j                            t          | |          d          S )Nsite-packages)rT   rW   r   r  )r   r  s     r6   get_site_packagesr    s"    7<<vv66HHHr7   c                 \    t          t          j                            | d                    S )Nz4*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*)r   rT   rW   r   )croots    r6   get_build_foldersr    s!    U$<==>>>r7   c                    t          |d          t          j        z   | d         z   | d<   t          j        dk    rt          |ddd          t          j        z   t          |ddd          z   t          j        z   t          |dd          z   t          j        z   t          |d          z   t          j        z   | d         z   | d<   d}|r|t          j        z   | d         z   | d<   | S )	Nr;   PATHr9   Libraryz	mingw-w64usrr:   T)r   rT   pathsepr   r   )r   r   prepend_prefixs      r6   prepend_bin_pathr%     s    vu%%
2S[@CK
|wK77j69eU334 j 69e,,	-
 j 69%%& j &k 	F  8rz)CK7FJr7   c              #   .  K   t           j        d d          }t          r@t           j                            dt          j                            | dd                     nt          j                            | d          }t          t          j                            |d                    }|rF|d         }t           j                            dt          j                            |d                     	 d V  |t           _        d S # |t           _        w xY w)Nr   r  r  zpython[0-9\.]*r   )r   rW   rr   insertrT   r   r   )r   path_backupr  
python_dirs       r6   sys_path_prependedr*  7  s      (111+K J27<<GGHHHH',,vu--"',,w0ABBCC
 	J#AJHOOArw||JHHIII;s   4D Dc              #      K   t           j        d         }t          t           j                                        | |          d         t           j        d<   	 d V  |t           j        d<   d S # |t           j        d<   w xY w)Nr   )rT   r  r%  r  )r   r$  old_paths      r6   path_prependedr-  H  sx       z&!H)"*//*;*;V^TTBJv&%
6X
6%%%%s   A+ +A<z*\s*([\w\-\.]+)\s*=\s*([\w.]+):([\w.]+)\s*$c              #      K   | D ]K}t                               |          }|t          j        d|z             |                                V  Ld S )Nz%Error cound not match entry point: %r)	entry_patmatchr   r  groups)r   r  r2  s      r6   iter_entry_pointsr2  Z  sb        OOD!!9H<tCDDDhhjj	 r7   c           
         |                     d          d         }t          |||dz  }t          rt          | dz   d          5 }t          j                            t          j                            |j        d                    r|	                    d           |	                    |           t          t          t          t                    dt          |j                   d	          | d	z   |j                   d d d            d S # 1 swxY w Y   d S t          j                            |           rt	          j        |            t          | d          5 }|j        s|	                    d
|j        z             |	                    |           d d d            n# 1 swxY w Y   t	          j        | d           d S )Nrq   r   )moduler  import_namez
-script.pyr  zpython_d.exez#!python_d
zcli-.exez#!%s
i  )rv   PY_TMPLrr   r  rT   rW   r   r   host_prefixr   r  r	   __file__r   	host_archrK  r   ri  rJ   host_pythonchmod)rW   r4  r  configr5  pyscriptfos          r6   create_entry_pointr@  b  s   **S//!$KFDUUUH $%s++ 	rw~~bgll6+=~NNOO )(((HHXWX&&(Js63C/D/D(J(J(JKKv  		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 7>>$ 	IdOOO$__ 	= 8F$66777HHX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	us%   B<DDD:F##F'*F'c                     | sd S t          |j        t                    }t          |          st	          j        |           t          |           D ]&\  }}}t          t          ||          |||           'd S rS   )r   r8  bin_dirnamer   rT   mkdirr2  r@  )r   r=  bin_dirr  r4  r  s         r6   create_entry_pointsrE  y  s     6%{33G>> 
.u55 E EVT4--vtVDDDDE Er7   c              #      K   t          |           D ]B\  }}}|D ]9}|                    |          r"t          j                            ||          V  :Cd S rS   )rP   r8  rT   rW   r   )
start_pathr   ra   rb   rc   rd   s         r6   get_ext_filesrH    sr      z** , ,a 	, 	,Azz'"" ,gll4+++++	,, ,r7   c                    t           j        dk    r|S | t          vr_t          | d          5 }|                                }t          j        d|          }|rdndt          | <   ddd           n# 1 swxY w Y   t          |          r	 t          dd|g                                          d	         	                    t                                }n9# t          $ r, t          t                    }|                    d
           Y nw xY w|S )zKIf exe is a Cygwin or MSYS2 executable then filters it through `cygpath -u`r9   rbs   (cygwin1.dll|msys-2.0.dll)TFNr  z-ur   zJcygpath executable not found.  Passing native path.  This is OK for msys2.)r   r   _posix_exes_cacher  r   r}   findallr  
splitlinesrj   r   r[   r   r   rv  )exerW   exe_file
exe_binarymsys2_cygwinr   s         r6    convert_path_for_cygwin_or_msys2rR    sh   
|w
####t__ 	E!J:&CZPPL-9%DTTuc"	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E  
	 )T4!899a!,..// D
  	 	 	X&&CII\    	
 Ks$   8A00A47A4	A	C 3D	D	c                      d                                                       j         fd                                 D                       S )NzCSkipped: {} from {} defines build/skip for this configuration ({}).c                 6    i | ]}|j         j        |         S r   )r=  variant)r   r   r2  s     r6   r   z$get_skip_message.<locals>.<dictcomp>  s%    MMMa1ah.q1MMMr7   )ru   r  rW   get_used_vars)r2  s   `r6   get_skip_messagerW    sK    PWW	!&MMMM1??;L;LMMM  r7   modifiedc                    t                      5 }|                    d          r#t          j                            | |d           n"t          j                            | ||           t
          j                            ||          }t
          j                            |          r	 t          |          5 }|
                                }d d d            n# 1 swxY w Y   nN# t          $ r? t          |d          5 }|
                                }d d d            n# 1 swxY w Y   Y nw xY wd}|cd d d            S # 1 swxY w Y   d S )Nr6  )dest_dir
componentsrJ  F)r'   r  rE  r=  r>  rT   rW   r   rB  r  r   ry   )package_path	file_pathrefresh_modetdresolved_file_pathrd   contents          r6   package_has_filerb    s   			 '' 	"&..rf /     #&..ri /     W\\"i887>>,-- 		',-- 'ffhhG' ' ' ' ' ' ' ' ' ' ' ' ' ' '% ' ' ',d33 'qffhhG' ' ' ' ' ' ' ' ' ' ' ' ' ' '' G)                 s~   BE*C&9CC&C	C&!C	"C&%E&D/ D!D/!D%%D/(D%)D/,E.D//EE	Ec                 P    | g S t          | |          rt          |           S | gS )a  
    Ensure the object is a list. If not return it in a list.

    :param arg: Object to ensure is a list
    :type arg: any
    :param include_dict: Whether to treat `dict` as a `list`
    :type include_dict: bool, optional
    :return: `arg` as a `list`
    :rtype: list
    N)include_dict)islistr  )r  rd  s     r6   r  r    s6     {		,	/	/	/ Cyyur7   c                    t          | t                    st          | t                    sdS |st          | t                    rdS sdS du rCt	          |           } 	 t          t          |                     n# t          $ r Y dS w xY wfd	 t          fd| D                       S # t          t          f$ r Y dS w xY w)af  
    Check whether `arg` is a `list`. Optionally determine whether the list elements
    are all uniform.

    When checking for generic uniformity (`uniform=True`) we check to see if all
    elements are of the first element's type (`type(arg[0]) == type(arg[1])`). For
    any other kinds of uniformity checks are desired provide a uniformity function:

    .. code-block:: pycon
        # uniformity function checking if elements are str and not empty
        >>> truthy_str = lambda e: isinstance(e, str) and e
        >>> islist(["foo", "bar"], uniform=truthy_str)
        True
        >>> islist(["", "bar"], uniform=truthy_str)
        False
        >>> islist([0, "bar"], uniform=truthy_str)
        False

    .. note::
        Testing for uniformity will consume generators.

    :param arg: Object to ensure is a `list`
    :type arg: any
    :param uniform: Whether to check for uniform or uniformity function
    :type uniform: bool, function, optional
    :param include_dict: Whether to treat `dict` as a `list`
    :type include_dict: bool, optional
    :return: Whether `arg` is a `list`
    :rtype: bool
    FTc                 *    t          |           k    S rS   )type)r   etypes    r6   r   zislist.<locals>.<lambda>  s    DGGu, r7   c              3   .   K   | ]} |          V  d S rS   r   )r   r   uniforms     r6   r   zislist.<locals>.<genexpr>  s+      ++!771::++++++r7   )
isinstancer   r   r   iterrh  nextStopIterationallr   r   )r  rk  rd  ri  s    ` @r6   re  re    s   > #s :c8#<#< u jd33 u t
 $3ii	cOOEE 	 	 	44	 -,,,++++s++++++	"   uus$    A= =
B
BB/ /CCc              #      K   t          j                    }	 t          j        |            d V  t          j        |           d S # t          j        |           w xY wrS   )rT   rA  chdir)destcurdirs     r6   r  r    sX      Y[[F

s   A Ac           	      z  	
 g }t          |           D ]}t          j                            |          s t          j                            ||          }t          j                            |          r|                    |           wt          j                            |          r|                    |           t          j                            |          rt          |          D ]\  
}}|
                    
fd|D                        |D ]r}t          j                            t          j                            
|                    r3|                    t          j                            
|                     syt          |          }|s/t          t                    }|                    d| d|            |
                    t          |                     t!          j        dt!          j        | t          j        j                   z             		fd|D             }|S )Nc              3   X   K   | ]$}t           j                            |          V  %d S rS   r  )r   rd   ra   s     r6   r   zexpand_globs.<locals>.<genexpr>*  s3      ??qRW\\$22??????r7   zGlob z did not match in root_dir ^c                 >    g | ]}                     d |d          S )rp   r   )sub)r   rd   prefix_path_res     r6   r  z expand_globs.<locals>.<listcomp>9  s+    999a^Aq))999r7   )r  rT   rW   rr  r   r   r  r   r   rP   extendr   r   r   errorr   r}   compileescaper_  )	path_listr.   rc   rW   dirnamesfsr  
glob_filesr   rz  ra   s            @@r6   expand_globsr    s   EI&& - -w}}T"" 	07<<$//D7>>$ 	-LLW^^D!! 	-LLW]]4   	-&*4jj A A"h????B??????& A AFw~~bgll4&@&@AA ARW\\$%?%?@@@AA dJ O **		M$MM8MMNNN LL
++,,,,Zbi80JRW[0J0J&K&K KLLN99995999ELr7   c                 P    t           j                                       sNt           j                            t           j                            t          j                                          t           j                                       rct           j                                       t          v r S t          d
                     d                    t                                        t          t           t          d                    }|s;t          d
                    d                    t                                         t          |          dk    r|d         S  fdt          D             }t          |          dk    rZt          t                                        d	|d         d
 d           t           j                             |d                   S t          d
                    d                    t                                         )a  recurse through a folder, locating valid meta files (see VALID_METAS).  Raises error if more than one is found.

    Returns full path to meta file to be built.

    If we have a base level meta file and other supplemental (nested) ones, use the base level.
    z {} is not a valid meta file ({})r  )z.AppleDouble)r   zNo meta files ({}) found in {}r   r   c                     g | ]A}t           j                            t           j                            |                    ?|BS r   )rT   rW   r   r   )r   r2  rW   s     r6   r  zfind_recipe.<locals>.<listcomp>]  s<    MMM1rw~~bgll46K6K'L'LMQMMMr7   zMultiple meta files found. The z file in the base directory (z) will be used.z)More than one meta files ({}) found in {})rT   rW   rr  r  r   rA  r   rq  VALID_METASr[   ru   r  r  r   r   r   r   )rW   resultsmetass   `  r6   find_reciper  =  s    7== AwRY[[$ ? ?@@	w~~d 
7D!![00K.55dDIIk<R<RSS
 
 	
 8D+7HIIIJJG 
,33DIIk4J4JDQQ
 
 	
 7||qqz
 NMMMMMME
5zzQ8!!!  %Qxxx/	
 	
 	

 w||D%(+++
3::499[;Q;QSWXX  r7   c                   <    e Zd Zg dZej        dddfdZd Zd ZdS )LoggingContext)condabinstarinstallzconda.installfetchzconda.instructionszfetch.progressr@  progress	dotupdate	stdoutlogrequestszconda.core.package_cachez
conda.planconda.gateways.disk.deleteconda_buildzconda_build.indexzconda_build.noarch_pythonzurllib3.connectionpoolconda_indexzconda_index.indexzconda_index.index.convert_cacheNTc                     || _         i | _        || _        || _        t          j        | _        |st          j        | _        d S || _        d S rS   )	level
old_levelshandlerr   r$   quietr  default_loggersloggers)r   r  r  r   r  s        r6   r   zLoggingContext.__init__  sH    

]
 	#)9DLLL"DLLLr7   c                 h   | j         D ]w}t          |t                    rt          j        |          }|j        | j        |<   |                    d|vs| j        t          j        k     r| j        n	| j        dz              x| j	        r| j
                            | j	                   dt          _        d S )Nr  r$  T)r  rl  r   logging	getLoggerr  r  setLevelINFOr  logger
addHandlerr$   r  )r   r  r   s      r6   	__enter__zLoggingContext.__enter__  s    l 	 	F&#&& 0'//&)iDOF#LLV++tzGL/H/H 

Z"_   
 < 	1K""4<000r7   c                 N   | j                                         D ],\  }}t          j        |                              |           -| j        r| j                            | j                   | j        r | j        r| j                                         | j	        t          _	        d S rS   )r  r   r  r  r  r  r  removeHandlerr   r  r$   )r   etevtbr  r  s         r6   __exit__zLoggingContext.__exit__  s    !_2244 	6 	6MFEf%%..u5555< 	4K%%dl333< 	!DJ 	!L   
r7   )	r   r   r   r  r  WARNr   r  r  r   r7   r6   r  r  k  sd          O2 %\4tT 	# 	# 	# 	#  # # # # #r7   r  c                    t                      }t          t          j                            | dd                    D ]H}t          |          5 }t          j        |          }|||d         <   ddd           n# 1 swxY w Y   I|S )z
    Scan all json files in 'path' and return a dictionary with their contents.
    Files are assumed to be in 'index.json' format.
    
conda-metaz*.jsonr  N)r   r   rT   rW   r   r  jsonload)rW   	installedfilenamefiledatas        r6   get_installed_packagesr    s    
 IdL(CCDD + +(^^ 	+t9T??D&*Id6l#	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ s    A::A>	A>	c                    |                                  D ]\  }}t          |d          r t          t          |                    | |<   5t          |d          r|t	          |t
                    sg	 t          t          t          |                              | |<   # t          $ r, t          t          d |D                                 | |<   Y w xY w| S )Nkeys__iter__c                 ,    h | ]}t          |          S r   )r  )r   rb   s     r6   	<setcomp>z)_convert_lists_to_sets.<locals>.<setcomp>  s    '<'<'<Qa'<'<'<r7   )
r   rx   HashableDict_convert_lists_to_setsrl  r   r   r  rZ   r   )_dictr   r   s      r6   r  r    s     ? ?11f 	?#$:1$=$=>>E!HHQ
## 	?Jq#,>,> 	??!$s1vv,,//a ? ? ?!$'<'<!'<'<'<"="=>>a?Ls   0,B3CCc                   (     e Zd ZdZ fdZd Z xZS )r  z]use hashable frozen dictionaries for resources and resource types so that they can be in setsc                 X     t                      j        |i | t          |           } d S rS   )superr   r  )r   r   r   	__class__s      r6   r   zHashableDict.__init__  s0    $)&)))%d++r7   c                 H    t          t          j        | d                    S )NT)	sort_keys)hashr  dumpsr   s    r6   __hash__zHashableDict.__hash__  s    DJtt444555r7   )r   r   r   __doc__r   r  __classcell__r  s   @r6   r  r    sM        gg, , , , ,6 6 6 6 6 6 6r7   r  c                     g }|                                 D ]F\  }}|                     |          }|                     |          }|                    ||f           Gt          j                            d|          S )Nztag:yaml.org,2002:map)r   represent_datar  yamlnodesMappingNode)dumperr  r   item_key
item_valuenode_key
node_values          r6   represent_hashabledictr    s|    E $

 - -*((22**:66
h
+,,,,:!!"95AAAr7   c               #     K   dd l } | j        | j        }}	 t                      t                      g}|\  | _        | _        |V  ||c| _        | _        |d                                         |d<   |d                                         |d<   d S # ||c| _        | _        |d                                         |d<   |d                                         |d<   w xY wr   )r   r   ri   r"   getvalue)r   oldoutolderrr   s       r6   capturer    s      JJJZFF#zz8::&!$
CJ			!'
CJQ""AQ""A "(
CJQ""AQ""A""""s   /B ACc              #     K   t          |           t          |          }} t          j                            |           }	 |t          j        | <   |r
 |             d V  |r|t          j        | <   nt          j        | = |r |             d S d S # |r|t          j        | <   nt          j        | = |r |             w w xY wrS   )r   rT   r  r   )r  r   callbacksaved_env_vars       r6   env_varr    s       d))SZZ%DJNN4((M 
4 	HJJJ 	!,BJt
4  	HJJJJJ	 		  	!,BJt
4  	HJJJJ	s   B .B=c                    t                      }d}|                                 D ]\  }}t          |d          rt          |           |t	                      k    s|dk    s||t                      k    r|                    |           |s||v r|                    |           d| v r4t          d | d         D                       s|                    d           |D ]}| |= d S )N)finalnoarch_pythonzip_keysr  rp   r  c              3      K   | ]}|V  d S rS   r   r   r   s     r6   r   z"trim_empty_keys.<locals>.<genexpr>  s"      &D&DQq&D&D&D&D&D&Dr7   )rZ   r   rx   trim_empty_keysr  r   r]   any)dict_	to_removenegative_means_emptyr   r   s        r6   r  r    s   IA 	 	11f 	A;;!r''QY!tvv++MM!  	Q...MM!U3&D&D%
2C&D&D&D#D#Dj!!!  !HH r7   c                     	 |rd}nd}t          t          |           dz             |z   }n/# t          $ r" t          t	          |           dz             }Y nw xY w|S )Naz.0a0r   )r   r   r   chrord)version	alpha_versuffixlast_versions       r6   
_incrementr    sw    - 	FFF3w<<!+,,v5 - - -3w<<!+,,-s   ), )AAx.x.x.x.x.x.xr  c                 .   d ||fD             }t          |           j        dd          }d }g }t          |          D ]G\  }}t          |t                    r|}|                    |           2|                    |           H|rEt          |                    d                    t          |          k    rt          |          |d<   ddg}	t          |          D ]\  }
}|rt          |d |                   D ]\  }}|
dk    r^||dz
  k    rUt          |t          |t          |          dz
                                                               }t          ||          }|	|
xx         t          |          z  cc<   ||k    r|	|
xx         dz  cc<   |	|
         d         dk    r|	|
         d d         |	|
<   |	d         r|                     d          rt          | d d                   }n<|                     d	          rt          | d d                   }nt          |           }|t          |	d                   k     r	d
| z   |	d<   nd
|	d         z   |	d<   |	d         rd|	d         z   |	d<   d                    d |	D                       S )Nc                 Z    g | ](}|r"t          |                    d                     nd)S )rq   N)r   rv   )r   ps     r6   r  z)apply_pin_expressions.<locals>.<listcomp>$  s4    III,CIIIr7   r   rq   rp   r^  r   .*rn   *z>=<ro   c                     g | ]}||S r   r   r  s     r6   r  z)apply_pin_expressions.<locals>.<listcomp>P  s    ...1A.Q...r7   )r(   r  r%  rl  r  r{  r  r   rv   r   minisalphar  r8  r   )r  min_pinmax_pinpinsparsed_versionnesting_position	flat_listr  r  versionsp_idxpinv_idxr   r  version_orders                   r6   apply_pin_expressionsr  #  s   IIw6HIIID!'**21226NI~.. # #	TdD!! 	#"T""""T"""" !3w}}S))**S^^;;i..QBxH  oo 7 7
s 	7%io66 + +qA::%37"2"2 #Ic#s9~~7I.J.J$K L L T T V VI"1i00A3q66),,,UOOOs*OOOr"c))"*5/#2#"6{ -D!! 	2("66MMc"" 	2("66MM(11M<4444 .HQKK!,HQK{ (HQK'88.....///r7   z(.*[\\/])?\.git[\\/].*z(.*[\\/])?\.git$z(.*)?\.DS_Store.*z.*\.la$zconda-meta.*z.*\.conda_trash(?:_\d+)*$c                     |D ]H}t          j        |          }t          |           t          t          |j        |                     z
  } Ifd| D             S )zIRemove things like the .git directory from the list of files to be copiedc                    g | ]~}t           j                            t           j                            |                    r=t           j                            t           j                            |                    ||S r   )rT   rW   r   r   r   )r   rd   r   s     r6   r  z filter_files.<locals>.<listcomp>c  su       w}}RW\\&!4455 7>>"',,vq1122		  r7   )r}   r}  rZ   r  r0  )
files_listr   filter_patternsr   r   s    `   r6   filter_filesr  S  sv     # H HJw__s6!':+F+F'G'GG

      r7   c                 &    t          | |d          S )N)zinfo[\\/]index.jsonzinfo[\\/]fileszinfo[\\/]paths.jsonzinfo[\\/]about.jsonzinfo[\\/]has_prefixzinfo[\\/]hash_input_fileszinfo[\\/]hash_input.jsonzinfo[\\/]run_exports.yamlzinfo[\\/]run_exports.jsonzinfo[\\/]gitzinfo[\\/]recipe[\\/].*zinfo[\\/]recipe_log.jsonzinfo[\\/]recipe.tarzinfo[\\/]test[\\/].*zinfo[\\/]LICENSE.txtzinfo[\\/]licenses[\\/]*zinfo[\\/]prelink_messages[\\/]*zinfo[\\/]requireszinfo[\\/]metazinfo[\\/]platformzinfo[\\/]no_linkzinfo[\\/]link.jsonzinfo[\\/]icon.png)r  )r  )r  r   s     r6   filter_info_filesr  k  s$    
   r7   c                      t          |           S rS   )_rm_rf)rW   r=  s     r6   r   r     s    $<<r7   c                   &     e Zd Zd fd	Zd Z xZS )LessThanFilterrp   c                 X    t                                          |           || _        d S rS   )r  r   	max_level)r   exclusive_maximumr  r  s      r6   r   zLessThanFilter.__init__  &    *r7   c                 *    |j         | j        k     rdndS Nr   r   )levelnor  r   records     r6   r  zLessThanFilter.filter      NT^33qq:r7   rp   r   r   r   r   r  r  r  s   @r6   r  r    L        + + + + + +; ; ; ; ; ; ;r7   r  c                   &     e Zd Zd fd	Zd Z xZS )GreaterThanFilterrp   c                 X    t                                          |           || _        d S rS   )r  r   	min_level)r   exclusive_minimumr  r  s      r6   r   zGreaterThanFilter.__init__  r  r7   c                 *    |j         | j        k    rdndS r  )r  r$  r  s     r6   r  zGreaterThanFilter.filter  r  r7   r  r  r  s   @r6   r"  r"    r   r7   r"  c                       e Zd Zd Zd ZdS )DuplicateFilterc                 ,    t                      | _        d S rS   )rZ   msgsr   s    r6   r   zDuplicateFilter.__init__  s    EE			r7   c                 z    |j         | j        v}| j                            |j                    t          |          S rS   )msgr*  r]   r   )r   r  r   s      r6   r  zDuplicateFilter.filter  s1    j	)	fj!!!3xxr7   N)r   r   r   r   r  r   r7   r6   r(  r(    s2              r7   r(  z%(levelname)s: %(message)srM  zconda.core.linked_datar  zconda.gateways.disk.testc                  "    t                      adS )zMost of the time, we want the deduplication.  There are some cases (tests especially)
    where we want to be able to control the duplication.N)r(  dedupe_filterr   r7   r6   reset_deduplicatorr/    s     $%%MMMr7   c           	         d }t          j        d          r;t          t          t	          t          j        d                                        }|rt          |          5 }t          j        |          }d d d            n# 1 swxY w Y   t          j	        
                    |           |                    di                               | i                               d|          }t          j        |           }|                    |           |r|                    t                     |                     d          d         }|dk    r%dt           j        v t          j        |          _        |r|j        st          j        t*          j                  }	t          j        t*          j                  }
|	                    t0                     |
                    t2                     |
                    t6                     |	                    |           |
                    |           |                    |	           |                    |
           |S )Nlog_config_filer  r  rq   r   r  PYTEST_CURRENT_TEST)r#   r   r   r
   r   r  r  	safe_loadr  r=  
dictConfigr  r  	addFilterr.  rv   rT   r  	propagatehandlersStreamHandlerr   r   ri   info_debug_stdout_filterwarning_error_stderr_filtersetFormatterlevel_formatterr  )r  r  dedupeadd_stdout_stderr_handlersconfig_filerd   config_dictr   top_pkgstdout_handlerstderr_handlers              r6   r   r     sJ   K+,, 
z."45F"G"GHHII
 

  Q+ 	,!.++K	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,!!+...	2..224<<@@%PP

D
!
!CLL %m$$$ jjooa G- 0E
/R'"",! 	'#, 	' .sz:: .sz::  !9:::  !<===##O444&&&&&&~&&&~&&&Js   #BBBc                 ^   || k    }t          |t                    rt          | t                    rt          j                            |           sZt          j                            t          j                            t          j                            ||                               } t          j                            |          sZt          j                            t          j                            t          j                            ||                              }|| |k    z  }|S rS   )rl  r   rT   rW   rr  r   r  r   )
base_valuer   rW   
equivalents       r6   _equivalentrG    s    *$J% **Z"="= *w}}Z(( 	  dJ!?!?@@ J w}}U## 	QGOOBG$4$4RW\\$5N5N$O$OPPEjE))
r7   rp   c                    | |k    r| S t          t                    }|                                D ]*\  }}|| v s|r|                     ||          }	t	          |d          rt          |	||||          }	|	| |<   Mt	          |d          r|t          |t                    sg|r_|	|k    r0	 |	                    |           n# t          t          f$ r |}	Y nw xY w	 t          |	          | |<   # t          $ r |	| |<   Y w xY w|| |<   |	r?|r=t          |	||          s,|r*|                    d                    ||	|                     |	|| v r| |= %|| |<   ,| S )Nr  )raise_on_clobberr  z3clobbering key {} (original value {}) with value {})r   r   r   r   rx   merge_or_update_dictrl  r   r{  r   AttributeErrorr  rG  rv  ru   )
basenewrW   mergerI  add_missing_keysr   r   r   rE  s
             r6   rJ  rJ    s    s{{
X

Ciikk $& $&
U$;;*;#u--Juf%% !&1tUEU  
 'S		
++ &Juc4J4J & &!U**/&--e4444 )>: / / /).JJJ//$($4$4S		$ / / /$.S			/ !&DII 

 (
E4@@
 )	
 IIMTTU   
 =SD[[S		 %DIKs$   ,CCCC//D Dc                 p     t                                                   }g  fd|D             S )zI
    From Alex Martelli: https://stackoverflow.com/a/1495821/3257826
    c                 l    i | ]0}|                     |                               |          z   1S r   )r   )r   r   dol1dol2nos     r6   r   z(merge_dicts_of_lists.<locals>.<dictcomp>*  s8    ???QAtxx2!R0???r7   )rZ   union)rR  rS  r  rT  s   `` @r6   merge_dicts_of_listsrV  $  sC     t99??4  D	B??????$????r7   c           	         t                      }| t          j        j        z   }t	          |           D ]\  }}}|D ]:}|                    t          ||                              |dd                     ;|D ]o}t          ||          }t          |          rN|                    |                    |dd                     |	                    t          |f|                      p|S )z/
    Returns a set of all files in prefix.
    rp   r   )rZ   rT   rW   r_  rP   r]   r   r   r   r  r  )	r   res
prefix_repra   r  rc   fndnrW   s	            r6   prefix_filesr\  -  s     %%C"'+%J!&\\ : :dE 	? 	?BGGDrNN**:r1==>>>> 	: 	:Bb>>Dd|| :ZQ77888

<88999		:
 Jr7   c                     t           r2|rt          j        | ||||          S t          j        | ||          S |rt          j        | |||||          S t          j        | |||          S )a;  
    Hides the differences between mmap.mmap on Windows and Unix.
    Windows has `tagname`.
    Unix does not, but makes up for it with `flags` and `prot`.
    On both, the default value for `access` is determined from how the file
    was opened so must not be passed in at all to get this default behaviour.
    )tagnameaccessoffset)r^  )r  protr_  r`  )r  ra  )rr   mmap)filenolengthr^  r  ra  r_  r`  s          r6   	mmap_mmapre  ?  s       E 	>9v    9VVW==== 	E9e$vf    9VV5tDDDDr7   c                    t           r!t          j                            | d          }n t          j                            | d          }t          j                            |          rt          j        |          D ]}t          j                            ||          }t          j                            |          r8|                    t          j                  dk    rt          j	        |           yt          j        
                    |          r)|                    d          rt          j        |           dS dS )z9Remove pip created pycache directory from bin or Scripts.r:   r;   __pycache__z.pycN)rr   rT   rW   r   r   r  r{   r_  rU  rmtreer   r8  ri  )build_prefixscripts_pathr  
entry_paths       r6   remove_pycache_from_scriptsrl  _  s    9w||L)<<w||L%88	w}}\"" &Z-- 	& 	&ElE::Jw}}Z(( &U[[-@-@M-Q-Qj))))
++ &
0C0CF0K0K &	*%%%& &	& 	&r7   c                 `   |                                  D ]\  }}t          |t                    r|                                D ]}| |         |         }t          |t                    rt	          |           5t          |t
                    r6| d| |vr-t          d |D                       r|                                 t          |t
                    rQ|D ]&}t          |t                    rt	          |           '	 |                                 # t          $ r Y w xY wdS )a6  Recurse through a nested dictionary and sort any lists that are found.

    If the list that is found contains anything but strings, it is skipped
    as we can't compare lists containing different types. The omissions argument
    allows for certain sections of the dictionary to be omitted from sorting.
    r  c              3   @   K   | ]}t          |t                    V  d S rS   )rl  r   )r   r  s     r6   r   z0sort_list_in_nested_structure.<locals>.<genexpr>  s,      FFdJtS11FFFFFFr7   N)	r   rl  r   r  sort_list_in_nested_structurer  rp  sortr   )
dictionary	omissionsfieldr   r   sectionelements          r6   ro  ro  p  sd    #((**  ueT"" 	zz|| 	# 	#$U+C0gt,, #1'::::w--# ((3((	99FFgFFFFF : LLNNN	# t$$ 	  ; ;gt,, ;1':::

   	 s   D
D)(D)zD([\w\d\.\-\_]+)\s+((?<![><=])[\w\d\.\-\_]+?(?!\*))(\s+[\w\d\.\_]+)?$z^([0-9a-zA-Z\.]+)$c                    t          | t                    rt          | d          r| j        r|                     dd          st
                              t          | j                            rxt          | j                  dvst          | j                  dk    rJt          d	                    t          | j                  t          | j                  dz                       } nt                              |           }|r|                    d          s|                    d	          dv r5|                    d
          dk    rt                              d|           } ntd| vrp|                    d	          dvr>|r<t          t                    }|                    d	                    |                      t                              d|           } | S )Nr  buildrp   )r  numpyzx.xz{} {}r  r   r   rm   z\1 \2r  )r  vca`  Adding .* to spec '{}' to ensure satisfiability.  Please consider putting {{{{ var_name }}}}.* or some relational operator (>/</>=/<=) on this spec in meta.yaml, or if req is also a build req, using {{{{ pin_compatible() }}}} jinja2 function instead.  See https://conda.io/docs/user-guide/tasks/build-packages/variants.html#pinning-at-the-variant-levelz\1 \2.*)rl  r&   rx   r  r   spec_ver_needing_star_rer0  r   r  ru   spec_needing_star_rer   ry  r   r   r   )specr   r0  r   s       r6   ensure_valid_specr}    s   $	"" FD)$$				 XXgr**		 )..s4</@/@AA			 49~~%888C<M<MQV<V<V NN3ty>>3t|3D3Dt3KLL  %**400 	FQ 	F{{1~~!444Q59P9P+//$??d??{{1~~-===$=(22
 @F  @F $@ @	 	 	 033JEEDKr7   c                 `  
 t          |                     d                    t          |                     d                    z   }t          |                     |                    }|                                D ]\  }}t          j        d|                    dd          z            

fd|D             }t          |          rt          |          D ]\  }}	|	r|dv s|	                    d          |v rk||= t          |t                    s|d	         }|                    |t          d
                    |	                    d          |f                               t          j        d          fd|D             }t          |          rt          |          D ]{\  }}	|	rt||= |                    |t          d
                    |	                    d          |                    |	                    d                    f                               ||r|| |<   d S d S )Nrw  hostz^(%s)(?:\s*$)rb   z[-_]c                 :    g | ]}                     |          S r   r0  )r   pkgregexs     r6   r  z+insert_variant_versions.<locals>.<listcomp>  s%    4445;;s##444r7   )rw  r  r   r   rg   z([0-9a-zA-Z\.\-\_]+)\s+x\.xc                 :    g | ]}                     |          S r   r  )r   r  xx_res     r6   r  z+insert_variant_versions.<locals>.<listcomp>  s%    000Cu{{3000r7   )r  r   r   r}   r}  r   r  r%  r   rl  r   r'  r}  r   )requirements_dictrU  r   
build_depsreqsr   valmatchesr*  r  r  r  s             @@r6   insert_variant_versionsr    sH   .227;;<<{f%%@ @ J (,,S1122DMMOO 	S 	SS
+ckk#v.F.FFGG4444t444w<< 	S!'** S S1 S#!222aggajjJ6N6NQ%c3// %!!fKK#4SXXqwwqzz3>O5P5P#Q#QRRRJ566E00004000G
7|| g&& 	 	DAq G%chh

GKKPQ

<S<S/T&U&UVV    &!%#& &r7   c           
         |                                 |                                d}}}|                     t          || d| d| |||                                d                    }d}|rX|                                }|                                D ]/}	|	|v r)||j        j        |	         |j        j        |	         k    z  }0|o|S )a  target_matchspec comes from the recipe.  target_variant is the variant from the recipe whose
    deps we are matching.  m is the peer job, which must satisfy conda and also have matching keys
    for any keys that are shared between target_variant and m.config.variantrp   -N)r  	dist_namer  build_stringbuild_numberchannelT)r  r  r0  r!   r  get_used_loop_varsr=  rU  )
target_matchspecother_mthis_mr  r  rw  matchspec_matchesvariant_matchesother_m_used_varsr   s
             r6   match_peer_jobr    s     #<<>>7??+<+<b5'D(..1111%11 --//	
 	
 	
	 	 O Y#6688**,, 	Y 	YA%%%6=#8#;w~?UVW?X#XX00r7   c                     t          | d          s;t          |           d d          }|rt          |          t          |          dni } n| D ]}t          | |                   | |<   | S )Nr  )r  run)rx   r  )
reqs_entryoriginalsecs      r6   expand_reqsr    s    :v&& 	;z**111- [**;x3H3HIII 	
  	; 	;C)*S/::JsOOr7      c                 `   t          |           rt          |           sdS t          |           sd S t          j                    }t	          | d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )N@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rJ  c                  .                                    S rS   )r   )
buffersizerd   s   r6   r   z!sha256_checksum.<locals>.<lambda>  s    !&&"4"4 r7   r7   )r   r   r  r  r  rm  r  r  )r  r  r  r  rd   s    `  @r6   sha256_checksumr    s   h Rx 0 0 R RQ( t^F	h		 !44444c:: 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   -BBBc           	         |                      dt           d           |j        rt          |j        j        dd          }t          |          s_t          t          |                    s!t          j
        t          |                     t          |d                                           |                      dt           d|j        j         d           |                      dt           d|j        j         d           d	d
lm}  |d|j        j        d          }|rt!          |t"                    r|d	         }i }d|d<   d|d<   d|d<   t%          |j        d          rd||j        j        <   |                                D ]\  }}|rt|dk    r3|                      d| d           |                      d| d           B|dk    rt          |j        j        d          }|                      d| d           |                      d| d           dD ]o}	|                      d|	 d| d           |                      d|	 d| d           |                      d|	 d| d           |                      d|	 d| d           |                      d |	 d| d           |                      d!|	 d| d           |                      d"|	 d| d           |                      d#|	 d| d           |                      d$|	 d| d           |                      d%|	 d| d           |                      d&|	 d| d           |                      d'|	 d| d           |                      d(|	 d| d           q|                      d)           |                      d*                    |t          j                            |          +                     f|dk    rnt/          d,           d S d S )-Nzcall "z\..\condabin\conda_hook.bat"
r  historyr  z"\..\condabin\conda.bat" activate "z"
z*\..\condabin\conda.bat" activate --stack "r   )r  ccacheFenv_varsrw  nativeccache_methodTzset "CC=z %CC%"
z	set "CXX=z %CXX%"
zccache-ln-binzmkdir r  zpushd )r6  rp   z	mklink clrg   zmklink linkz
mklink gccz
mklink g++z	mklink ccz
mklink c++z	mklink asz	mklink arz	mklink nmzmklink ranlibzmklink gcc-arzmklink gcc-nmzmklink gcc-ranlibzpopd
z5set PATH={dirname_ccache_ln};{dirname_ccache};%PATH%
)dirname_ccache_lndirname_ccachez ccache method {} not implemented)r   root_script_diris_crossr   r=  r8  r   r   r	   rT   rg  r  r   ri  conda_build.os_utils.externalr  rl  r  rx   r  r   ru   rW   r@  )
file_handler2  history_filer  r  ccache_methodsmethodr   dirname_ccache_ln_binexts
             r6   write_bat_activation_textr    s#   QQQQRRRz 
" AH0,	JJl## 	,..// 3GL11222s##))+++d_dd18K_ddd	
 	
 	

 iiiqxOdiii   >=====_Xqx'<eDDF ->fd## 	AYF%*z"%*z"#(x 18_-- 	:59N1812+1133 $	> $	>MFE #>Z''%%&A&A&A&ABBB%%&C&&C&C&CDDDDz)),01F,X,X)%%&H/D&H&H&HIII%%&H/D&H&H&HIII+ P P#))*Fc*F*FF*F*F*FGGG#))*H*H*Hf*H*H*HIII#))*Gs*G*GV*G*G*GHHH#))*Gs*G*GV*G*G*GHHH#))*Fc*F*FF*F*F*FGGG#))*Gs*G*GV*G*G*GHHH#))*Fc*F*FF*F*F*FGGG#))*Fc*F*FF*F*F*FGGG#))*Fc*F*FF*F*F*FGGG#))*J#*J*J*J*J*JKKK#))*J#*J*J*J*J*JKKK#))*J#*J*J*J*J*JKKK#))*Nc*N*NF*N*N*NOOOO%%h///%%PWW.C+-7??6+B+B X      x''<===[-> ->$	> $	>r7   c                 X   |                      d          s	| t          vrt          |                                           }d |D             }i }|D ]}t	                      5 }t
          j                            |d          }	 t          |dz   |           t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   n# t          t          f$ r i }Y nw xY wd d d            n# 1 swxY w Y   t          ||           |t          | <   nt          |          }|S )Nzfile://c                 F    h | ]}|                     d d          d         S )r  r   r   )r|   )r   urls     r6   r  z'download_channeldata.<locals>.<setcomp>q  s+    666#

3""1%666r7   zchanneldata.jsonz/channeldata.json)r  channeldata_cacher*   urlsr'   rT   rW   r   r)   r  r  r  r   r%   rJ  )channel_urlr  r  r  r_  tfrd   new_channeldatas           r6   download_channeldatar  m  s   i(( .K?P,P,P --224466666 		8 		8C#%% )W\\"&899)S#66;;;b 7Q*.)A,,7 7 7 7 7 7 7 7 7 7 7 7 7 7 7'8 ) ) )&(OOO)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) !7777)-+&& -KsZ    !C6"C$C9CC		CC	CC6C'$C6&C''C66C:	=C:	c                 x    ddl m} ddlm fd ||           j                                        D             S )zt
    Return a dictionary of the linked packages in prefix, with correct channels, hopefully.
    cc @kalefranz.
    r   )
PrefixDatar    c                 T    i | ]$} j         |j        |j        j                   |%S ))channel_override)from_stringrZ  r  r  )r   precr!   s     r6   r   z0linked_data_no_multichannels.<locals>.<dictcomp>  sD        	4<3DEEEt  r7   )conda.core.prefix_datar  conda.models.distr!   _prefix_recordsr   )r   r  r!   s     @r6   linked_data_no_multichannelsr    sm    
 211111&&&&&&   Jv&&6==??   r7   c           	         t          t                    }|                    d| d|  d| d           d}|dk    rt          j                            |          rt          |           	 |                    d| d|  d	| d
           t          j        | |           |dk    r.|	                    d
                    || |d|z
                       d}n#  |dz
  }Y nxY w|dk    r=|	                    d
                    |                     dd l} |j        d           n|dk    r|                    d| d           |dk    d S d S )Nz	Renaming z directory 'z' to ''   r   zshutil.move(z)=z, dest=)z:shutil.move({}={}, dest={}) succeeded on attempt number {}   r^  r   zlFailed to rename {} directory, check with strace, struss or procmon. Will sleep for 3 seconds and try again!r   zFailed to rename z) directory despite sleeping and retrying.)r   r   r6  rT   rW   rB  r   rU  r  warningru   r   r   r|  )rY  rs  
debug_namer   attempts_leftr   s         r6   shutil_move_more_retryingr    s   
X

CHHCCCCCDCCCDDDM
!

7>>$ 	$KKK	.HHEJEE#EEdEEEFFFKT"""!!PWW"Cq=/@   
 MM	.)A-MMM1KK::@&:L:L   KKKDJqMMMMb  IIYJYYY  1 !





s   ,A*C C pkg_pathc                     t          |                                           ot          fdt          D                       S )zD
    Determines whether string is pointing to a valid conda pkg
    c              3   L   K   | ]}j                             |          V  d S rS   )r  r8  )r   r  rW   s     r6   r   zis_conda_pkg.<locals>.<genexpr>  s3      HHDIs##HHHHHHr7   )r   is_filer  r   )r  rW   s    @r6   is_conda_pkgr    sF     >>D<<>> HHHH/GHHHHHr7   )T)rc  FNTF)FNF)Frc  NTF)rc  )TNrc  )r  )r  )r  rS   )F)rX  )FT)r  r  )r  )rp   TFTr  )r  )
contextlibr  r  r  r  logging.configrb  rT   r}   rU  rU   rs   r   r  r:  r   collectionsr   r   	functoolsr   	itertoolsr   localer   os.pathr   r	   r
   r   r   r   r   r   r   r   pathlibr   	threadingr   typingr   r  json.decoderr   r   r   r<  rE  rM  r  conda.base.constantsr   r   r   	Exceptionr   urllib.parseparser  urllib.requestrequestr  r   r4   	conda.apir   conda_build.conda_interfacer   r  conda_build.exceptionsr   conda_build.os_utilsr   conda_interfacer!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r8   rX  FileNotFoundErrorr   rr   r  rW   r  MAP_PRIVATEmmap_MAP_PRIVATE	PROT_READmmap_PROT_READ
PROT_WRITEmmap_PROT_WRITEDEFAULT_SUBDIRSRUN_EXPORTS_TYPESr7  r  rO   rP   rX   re   r   r   r   r   r  r  r  r+  r4  rH  contextmanagerrR  r\  rb  r  r  r  rp  r  rt  r  r  r9  r  r  r  r?  r  r   r  r  r  r  r  r  r  r  r  r%  r*  r-  rB  r}  r/  r2  r@  rE  rH  rK  rR  rW  rb  r  re  r  r  r  r  r  r  r   r  r  add_representerr  r  r  r  r  r  r  Filterr  r"  r(  r.  WARNINGr9  r  r:  	Formatterr<  r  r  r  r/  r   rG  rJ  rV  r\  re  rl  ro  r{  rz  r}  r  r  r  r  r  r  r  r  r  boolr  r   r7   r6   <module>r     sC                				 				       



    0 0 0 0 0 0 0 0       ! ! ! ! ! ! ' ' ' ' ' '                                             !,,,,,,, ! ! ! OOO! " ! ! !  X          
  X X X      "* :<VWX              " " " " " " & & & & & & 8 7 7 7 7 7 1 1 1 1 1 1 ) ) ) ) ) ) ! ! ! ! ! ! % % % % % % + + + + + + $ $ $ $ $ $                           "4 4 4 4
 !          !% 		 )'		 ',,xf)G%HH411D$4 0$.2!!4?  $   
 C             4    (# # #L       
/ / /dp
 p
 p
 p
 p
 p
 p
 p
f4 4 4nL L L    "& & &$ $ $D ' ' 'ZQ Q Q,8 8 8 MRE E E EP  " " " "L MR!. !. !. !.P GLL7##Grw||C)=>>??   D   "= = = =" "   <  .    2  A Ahsm A# A# A A A A&( ( (&, , , ,0    @ @ @  I I I? ? ?
   .     	& 	& 	& 	& <722iiBJDEE	    .E E E, , ,    0     2   &: : : :z     <+ + +\<# <# <# <# <# <# <# <#B
 
 
	 	 	6 6 6 6 64 6 6 6	B 	B 	B  \#9 : : : # # #    &  &	 	 	-0 -0 -0 -0f   0  @   
; ; ; ; ;W^ ; ; ;; ; ; ; ; ; ; ;    gn     !!)>'/:: //== #'#$@AA  *   & &w| 4 4 4  * + + 4 4W\ B B B  . / / 8 8 F F F  , - - 6 6w| D D D& & & #<QU " " " "J
 
 
 NR+ + + +\@ @ @  * 
	/	)E E E E@& & &"   P "rzK   &2:&;<< ! ! ! !H& & &>1 1 1 12     Q> Q> Q>h    ,    D3 4      s6   
B BB+
B6 6C
	C
(F1 1F?>F?