3 \ 2@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 /usr/lib64/python3.6/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|jj|dS)N)rappend)r itemr r r r3szFileList.appendcCs|jj|dS)N)rextend)r itemsr r r r6szFileList.extendcCs@tttjj|j}g|_x |D]}|jjtjj|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|j}|d}d}}}|dkrTt|dkr ...cSsg|] }t|qSr )r).0wr r r Wsz1FileList._parse_template_line..r recursive-includerecursive-excludez,'%s' expects ...cSsg|] }t|qSr )r)r+r,r r r r-]sgraftprunez#'%s' expects a single zunknown action '%s')r&r'r(r))r.r/)r1r2)rr#rr)r lineZwordsactionpatternsr dir_patternr r r _parse_template_lineLs,         zFileList._parse_template_linecCsX|j|\}}}}|dkrZ|jddj|x&|D]}|j|dds4tjd|q4Wn|dkr|jddj|x&|D]}|j|dds|tjd |q|Wn|d kr|jd dj|x&|D]}|j|d dstjd |qWnj|dkr8|jddj|x*|D]"}|j|d dstjd|qWn|dkr|jd|dj|fx,|D]$}|j||ds`tjd||q`Wn|dkr|jd|dj|fx|D]$}|j||dstjd||qWnx|dkr|jd||jd|dsTtjd|nB|dkrH|jd||jd|dsTtjd|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'r1zgraft z+warning: no directories found matching '%s'r2zprune z6no previously-included directories found matching '%s'z'this cannot happen: invalid action '%s')r7r rinclude_patternrr exclude_patternr)r r3r4r5rr6patternr r r process_template_linehsf           zFileList.process_template_liner rcCspd}t||||}|jd|j|jdkr4|jx6|jD],}|j|r<|jd||jj|d}qr;r<r r r r rs     L ,rcCs&ddtj|ddD}ttjj|S)z% Find all files under 'path' css,|]$\}}}|D]}tjj||VqqdS)N)rrr)r+basedirsrfiler r r sz#_find_all_simple..T) followlinks)rwalkfilterrisfile)rresultsr r r _find_all_simplesrScCs6t|}|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) rSrrI functoolspartialrrelpathrlist)rrZmake_relr r r rs   rcCs8tj|}tj}tjdkrd}d|}tjd||}|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}tj|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). _NrYz\\z%s\A%s%s.*%s%sz%s\A%s) isinstancestrr]compiler_ partitionr#rr\) r=r9r:rArTr`endrCZ prefix_rer\r r r r?%s(   r?)r Nr)rHrr]rZrUZdistutils.utilrZdistutils.errorsrrZ distutilsrrrSrIrr_r?r r r r s  i