B 8J? @sdZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z GdddZ dd Z ejfd d Zd d ZdddZdS)zsdistutils.filelist Provides the FileList class, used for poking about the filesystem and building lists of files. N) convert_path)DistutilsTemplateErrorDistutilsInternalError)logc@s|eZdZdZdddZddZejfddZd d Z d d Z d dZ ddZ ddZ ddZddZdddZdddZdS) FileListaA list of files built by on exploring the filesystem and filtered by applying various patterns to what we find there. Instance attributes: dir directory from which files will be taken -- only used if 'allfiles' not supplied to constructor files list of filenames currently being built/filtered/manipulated allfiles complete list of files under consideration (ie. without any filtering applied) NcCsd|_g|_dS)N)allfilesfiles)selfwarn debug_printr 5/opt/alt/python37/lib/python3.7/distutils/filelist.py__init__szFileList.__init__cCs ||_dS)N)r)r rr r r set_allfiles#szFileList.set_allfilescCst||_dS)N)findallr)r dirr r r r&szFileList.findallcCsddlm}|rt|dS)z~Print 'msg' to stdout if the global DEBUG (taken from the DISTUTILS_DEBUG environment variable) flag is true. r)DEBUGN)Zdistutils.debugrprint)r msgrr r r r )s zFileList.debug_printcCs|j|dS)N)rappend)r itemr r r r3szFileList.appendcCs|j|dS)N)rextend)r itemsr r r r6szFileList.extendcCs@tttjj|j}g|_x |D]}|jtjj|q WdS)N)sortedmapospathsplitrrjoin)r Zsortable_filesZ sort_tupler r r sort9s z FileList.sortcCsDx>tt|jdddD]$}|j||j|dkr|j|=qWdS)Nr)rangelenr)r ir r r remove_duplicatesCszFileList.remove_duplicatescCs|}|d}d}}}|dkrTt|dkr ...cSsg|] }t|qSr )r).0wr r r Wsz1FileList._parse_template_line..r )zrecursive-includezrecursive-excludez,'%s' expects ...cSsg|] }t|qSr )r)r)r*r r r r+]s)graftprunez#'%s' expects a single zunknown action '%s')rr#rr)r lineZwordsactionpatternsr dir_patternr r r _parse_template_lineLs*         zFileList._parse_template_linecCsX||\}}}}|dkrZ|dd|x&|D]}|j|dds4td|q4Wn|dkr|dd|x&|D]}|j|dds|td |q|Wn|d kr|d d|x&|D]}|j|d dstd |qWnj|dkr8|dd|x*|D]"}|j|d dstd|qWn|dkr|d|d|fx|D]$}|j||ds`td||q`Wn|dkr|d|d|fx|D]$}|j||dstd||qWnx|dkr|d||jd|dsTtd|nB|dkrH|d||jd|dsTtd|n td|dS)Nr&zinclude  r )anchorz%warning: no files found matching '%s'r'zexclude z9warning: no previously-included files found matching '%s'zglobal-includezglobal-include rz>warning: no files found matching '%s' anywhere in distributionzglobal-excludezglobal-exclude zRwarning: no previously-included files matching '%s' found anywhere in distributionzrecursive-includezrecursive-include %s %s)prefixz:warning: no files found matching '%s' under directory '%s'zrecursive-excludezrecursive-exclude %s %szNwarning: no previously-included files matching '%s' found under directory '%s'r-zgraft z+warning: no directories found matching '%s'r.zprune z6no previously-included directories found matching '%s'z'this cannot happen: invalid action '%s')r3r rinclude_patternrr exclude_patternr)r r/r0r1rr2patternr r r process_template_linehsf           zFileList.process_template_liner rcCspd}t||||}|d|j|jdkr4|x6|jD],}||r<|d||j|d}qr?r$r r r r8s zFileList.exclude_pattern)NN)r Nr)r Nr)__name__ __module__ __qualname____doc__rrrcurdirrr rrrr%r3r:r7r8r r r r rs     L ,rcCs&ddtj|ddD}ttjj|S)z% Find all files under 'path' css,|]$\}}}|D]}tj||VqqdS)N)rrr)r)basedirsrfiler r r sz#_find_all_simple..T) followlinks)rwalkfilterrisfile)rZresultsr r r _find_all_simplesrNcCs6t|}|tjkr.tjtjj|d}t||}t|S)z Find all files under 'dir' and return the list of full filenames. Unless dir is '.', return full filenames with dir prepended. )start) rNrrE functoolspartialrrelpathrlist)rrZmake_relr r r rs   rcCs8t|}tj}tjdkrd}d|}td||}|S)zTranslate a shell-like glob pattern to a regular expression; return a string containing the regex. Differs from 'fnmatch.translate()' in that '*' does not match "special characters" (which are platform-specific). \z\\\\z\1[^%s]z((?t|}nd}|dk rt|}|t|t|t|}tj} tjdkrd} |t|t|t|}d||| ||f}n|rd||t|df}t|S)aTranslate a shell-like wildcard pattern to a compiled regular expression. Return the compiled regex. If 'is_regex' true, then 'pattern' is directly compiled to a regex (if it's a string) or just returned as-is (assumes it's a regex object). _NrTz\\z%s\A%s%s.*%s%sz%s\A%s) isinstancestrrXcompilerZ partitionr#rrW) r9r5r6r=rOr[endr?Z prefix_rerWr r r r;%s(   r;)r Nr)rDrrXrUrPZdistutils.utilrZdistutils.errorsrrZ distutilsrrrNrErrZr;r r r r s  i