�`^c@s�dZdZddlZddlZddlZddlmZddlmZm Z ddl
mZddd��YZej
d �Zd
�Zdddd
�ZdS(ssdistutils.filelist
Provides the FileList class, used for poking about the filesystem
and building lists of files.
s$Id$i�N(tconvert_path(tDistutilsTemplateErrortDistutilsInternalError(tlogtFileListcBs�eZdZddd�Zd�Zejd�Zd�Z d�Z
d�Zd�Zd�Z
d �Zd
�Zdddd
�Zdddd�ZRS(s�A 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)
cCsd|_g|_dS(N(tNonetallfilestfiles(tselftwarntdebug_print((s(/sys/lib/python2.7/distutils/filelist.pyt__init__s cCs
||_dS(N(R(RR((s(/sys/lib/python2.7/distutils/filelist.pytset_allfiles$scCst|�|_dS(N(tfindallR(Rtdir((s(/sys/lib/python2.7/distutils/filelist.pyR
'scCs"ddlm}|r|GHndS(s~Print 'msg' to stdout if the global DEBUG (taken from the
DISTUTILS_DEBUG environment variable) flag is true.
i�(tDEBUGN(tdistutils.debugR(RtmsgR((s(/sys/lib/python2.7/distutils/filelist.pyR
*scCs|jj|�dS(N(Rtappend(Rtitem((s(/sys/lib/python2.7/distutils/filelist.pyR4scCs|jj|�dS(N(Rtextend(Rtitems((s(/sys/lib/python2.7/distutils/filelist.pyR7scCs\ttjj|j�}|j�g|_x*|D]"}|jjtjj|��q2WdS(N(tmaptostpathtsplitRtsortRtjoin(Rtsortable_filest
sort_tuple((s(/sys/lib/python2.7/distutils/filelist.pyR:s
cCsYxRtt|j�ddd�D]1}|j||j|dkr |j|=q q WdS(Niii�(trangetlenR(Rti((s(/sys/lib/python2.7/distutils/filelist.pytremove_duplicatesEs&cCs|j�}|d}d}}}|dkrht|�dkrRtd|�ntt|d�}n�|dkr�t|�dkr�td|�nt|d�}tt|d�}nN|dkr�|�dkr�d|�nt|d�}n
td|�||||fS(Nitincludetexcludesglobal-includesglobal-excludeis&'%s' expects <pattern1> <pattern2> ...isrecursive-includesrecursive-excludeis,'%s' expects <dir> <pattern1> <pattern2> ...tgrafttprunes#'%s' expects a single <dir_pattern>sunknown action '%s'(sincludeR#sglobal-includesglobal-exclude(srecursive-includesrecursive-exclude(R$R%(RRRRRR(RtlinetwordstactiontpatternsRtdir_pattern((s(/sys/lib/python2.7/distutils/filelist.pyt_parse_template_lineNs,
cCs&|j|�\}}}}|dkr}|jddj|��x�|D].}|j|dd�sHtjd|�qHqHWn�|dkr�|jddj|��x||D].}|j|dd�s�tjd |�q�q�WnC|d
krE|jddj|��x|D]2}|j|dd�stjd
d|�qqWn�|dkr�|jddj|��x�|D].}|j|dd�srtjd|�qrqrWn{|dkr|jd|dj|�f�xL|D]5}|j|d|�s�tjd
d||�q�q�Wn|dkr�|jd|dj|�f�x�|D]1}|j|d|�sItjd||�qIqIWn�|dkr�|jd|�|jdd|�s"tjd|�q"nY|dkr|jd|�|jdd|�s"tjdd|�q"n
td |�dS(!NR"sinclude t tanchoris%warning: no files found matching '%s'R#sexclude s9warning: no previously-included files found matching '%s'sglobal-includesglobal-include is&warning: no files found matching '%s' sanywhere in distributionsglobal-excludesglobal-exclude sRwarning: no previously-included files matching '%s' found anywhere in distributionsrecursive-includesrecursive-include %s %stprefixsunder directory '%s'srecursive-excludesrecursive-exclude %s %ssNwarning: no previously-included files matching '%s' found under directory '%s'R$sgraft s+warning: no directories found matching '%s'R%sprune s)no previously-included directories found s
matching '%s's'this cannot happen: invalid action '%s'( R+R
Rtinclude_patternRR texclude_patternRR(RR&R(R)RR*tpattern((s(/sys/lib/python2.7/distutils/filelist.pytprocess_template_linepsh
iicCs�d}t||||�}|jd|j�|jdkrK|j�nxJ|jD]?}|j|�rU|jd|�|jj|�d}qUqUW|S(s�Select strings (presumably filenames) from 'self.files' that
match 'pattern', a Unix-style wildcard (glob) pattern.
Patterns are not quite the same as implemented by the 'fnmatch'
module: '*' and '?' match non-special characters, where "special"
is platform-dependent: slash on Unix; colon, slash, and backslash on
DOS/Windows; and colon on Mac OS.
If 'anchor' is true (the default), then the pattern match is more
stringent: "*.py" will match "foo.py" but not "foo/bar.py". If
'anchor' is false, both of these will match.
If 'prefix' is supplied, then only filenames starting with 'prefix'
(itself a pattern) and ending with 'pattern', with anything in between
them, will match. 'anchor' is ignored in this case.
If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and
'pattern' is assumed to be either a string containing a regex or a
regex object -- no translation is done, the regex is just compiled
and used as-is.
Selected strings will be added to self.files.
Return 1 if files are found.
is%include_pattern: applying regex r'%s's adding iN( ttranslate_patternR
R1RRR
tsearchRR(RR1R-R.tis_regextfiles_foundt
pattern_retname((s(/sys/lib/python2.7/distutils/filelist.pyR/�s
cCs�d}t||||�}|jd|j�xhtt|j�ddd�D]G}|j|j|�rO|jd|j|�|j|=d}qOqOW|S(s�Remove strings (presumably filenames) from 'files' that match
'pattern'.
Other parameters are the same as for 'include_pattern()', above.
The list 'self.files' is modified in place. Return 1 if files are
found.
is%exclude_pattern: applying regex r'%s'ii�s
removing (R3R
R1RRRR4(RR1R-R.R5R6R7R ((s(/sys/lib/python2.7/distutils/filelist.pyR0�s &
N(t__name__t
__module__t__doc__RRRRtcurdirR
R
RRRR!R+R2R/R0(((s(/sys/lib/python2.7/distutils/filelist.pyRs
" K-cCsddlm}m}m}m}g}|g}|j}|j}x�|r|�}tj|�} x�| D]�}
|tj kr�tj
j||
�}n|
}tj|�}||}
||
�r�|j|�qk||
�rk||
�rk||�qkqkWqFW|S(s^Find all files under 'dir' and return the list of full filenames
(relative to 'dir').
i�(tST_MODEtS_ISREGtS_ISDIRtS_ISLNK(tstatR=R>R?R@tpopRRtlistdirR<RR(RR=R>R?R@tlisttstackRBtpushtnamesR8tfullnameRAtmode((s(/sys/lib/python2.7/distutils/filelist.pyR
s&"
cCsStj|�}tj}tjdkr0d}nd|}tjd||�}|S(s�Translate 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).
s\s\\\\s\1[^%s]s((?<!\\)(\\\\)*)\.(tfnmatcht translateRtseptretsub(R1R7RLtescaped((s(/sys/lib/python2.7/distutils/filelist.pyt
glob_to_re s
iicCs�|r)t|t�r"tj|�S|Sn|r>t|�}nd}|dk r�td�}t|�t|� }tj}tjdkr�d}nd|j |d|f�}n|r�d|}ntj|�S(sTranslate 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).
ts\s\\t^s.*N(
t
isinstancetstrRMtcompileRPRRRRLR(R1R-R.R5R7t
empty_patternt prefix_reRL((s(/sys/lib/python2.7/distutils/filelist.pyR38s"
((R;t__revision__RRMRJtdistutils.utilRtdistutils.errorsRRt distutilsRRR<R
RPRR3(((s(/sys/lib/python2.7/distutils/filelist.pyt<module>s�
|