diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/filelist.py | 249 |
1 files changed, 126 insertions, 123 deletions
diff --git a/Lib/distutils/filelist.py b/Lib/distutils/filelist.py index ee7051b..78f2a8d 100644 --- a/Lib/distutils/filelist.py +++ b/Lib/distutils/filelist.py @@ -19,15 +19,19 @@ from distutils.util import convert_path class FileList: - files = None # reference to files list to mainpulate - allfiles = None # list of all files, if None will be filled - # at first use from directory self.dir - dir = None # directory from which files will be taken - # to fill self.allfiles if it was not set otherwise - - # next both functions (callable objects) can be set by the user - # warn: warning function - # debug_print: debug function + """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) + """ def __init__(self, files=[], @@ -42,13 +46,14 @@ class FileList: self.debug_print = debug_print self.files = files self.dir = dir + + # if None, 'allfiles' will be filled when used for first time self.allfiles = allfiles - # if None, it will be filled, when used for first time # standard warning and debug functions, if no other given def __warn (self, msg): - sys.stderr.write ("warning: template: %s\n" % msg) + sys.stderr.write ("warning: %s\n" % msg) def __debug_print (self, msg): """Print 'msg' to stdout if the global DEBUG (taken from the @@ -59,130 +64,128 @@ class FileList: print msg - def process_line(self, line): + def process_line (self, line): + + words = string.split (line) + action = words[0] + + # First, check that the right number of words are present + # for the given action (which is the first word) + if action in ('include','exclude', + 'global-include','global-exclude'): + if len (words) < 2: + self.warn \ + ("invalid template line: " + + "'%s' expects <pattern1> <pattern2> ..." % + action) + return - words = string.split (line) - action = words[0] + pattern_list = map(convert_path, words[1:]) - # First, check that the right number of words are present - # for the given action (which is the first word) - if action in ('include','exclude', - 'global-include','global-exclude'): - if len (words) < 2: - self.warn \ - ("invalid template line: " + - "'%s' expects <pattern1> <pattern2> ..." % - action) - return + elif action in ('recursive-include','recursive-exclude'): + if len (words) < 3: + self.warn \ + ("invalid template line: " + + "'%s' expects <dir> <pattern1> <pattern2> ..." % + action) + return - pattern_list = map(convert_path, words[1:]) + dir = convert_path(words[1]) + pattern_list = map (convert_path, words[2:]) - elif action in ('recursive-include','recursive-exclude'): - if len (words) < 3: - self.warn \ - ("invalid template line: " + - "'%s' expects <dir> <pattern1> <pattern2> ..." % - action) - return + elif action in ('graft','prune'): + if len (words) != 2: + self.warn \ + ("invalid template line: " + + "'%s' expects a single <dir_pattern>" % + action) + return - dir = convert_path(words[1]) - pattern_list = map (convert_path, words[2:]) + dir_pattern = convert_path (words[1]) - elif action in ('graft','prune'): - if len (words) != 2: + else: + self.warn ("invalid template line: " + + "unknown action '%s'" % action) + return + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. Also, we have + # defined either (pattern), (dir and pattern), or + # (dir_pattern) -- so we don't have to spend any time + # digging stuff up out of 'words'. + + if action == 'include': + self.debug_print("include " + string.join(pattern_list)) + for pattern in pattern_list: + if not self.select_pattern (pattern, anchor=1): + self.warn ("no files found matching '%s'" % + pattern) + + elif action == 'exclude': + self.debug_print("exclude " + string.join(pattern_list)) + for pattern in pattern_list: + if not self.exclude_pattern (pattern, anchor=1): + self.warn ( + "no previously-included files found matching '%s'"% + pattern) + + elif action == 'global-include': + self.debug_print("global-include " + string.join(pattern_list)) + for pattern in pattern_list: + if not self.select_pattern (pattern, anchor=0): + self.warn (("no files found matching '%s' " + + "anywhere in distribution") % + pattern) + + elif action == 'global-exclude': + self.debug_print("global-exclude " + string.join(pattern_list)) + for pattern in pattern_list: + if not self.exclude_pattern (pattern, anchor=0): self.warn \ - ("invalid template line: " + - "'%s' expects a single <dir_pattern>" % - action) - return - - dir_pattern = convert_path (words[1]) - - else: - self.warn ("invalid template line: " + - "unknown action '%s'" % action) - return - - # OK, now we know that the action is valid and we have the - # right number of words on the line for that action -- so we - # can proceed with minimal error-checking. Also, we have - # defined either (pattern), (dir and pattern), or - # (dir_pattern) -- so we don't have to spend any time - # digging stuff up out of 'words'. - - if action == 'include': - self.debug_print("include " + string.join(pattern_list)) - for pattern in pattern_list: - if not self.select_pattern (pattern, anchor=1): - self.warn ("no files found matching '%s'" % - pattern) - - elif action == 'exclude': - self.debug_print("exclude " + string.join(pattern_list)) - for pattern in pattern_list: - if not self.exclude_pattern (pattern, anchor=1): - self.warn ( - "no previously-included files found matching '%s'"% - pattern) - - elif action == 'global-include': - self.debug_print("global-include " + string.join(pattern_list)) - for pattern in pattern_list: - if not self.select_pattern (pattern, anchor=0): - self.warn (("no files found matching '%s' " + - "anywhere in distribution") % - pattern) - - elif action == 'global-exclude': - self.debug_print("global-exclude " + string.join(pattern_list)) - for pattern in pattern_list: - if not self.exclude_pattern (pattern, anchor=0): - self.warn \ - (("no previously-included files matching '%s' " + - "found anywhere in distribution") % - pattern) - - elif action == 'recursive-include': - self.debug_print("recursive-include %s %s" % - (dir, string.join(pattern_list))) - for pattern in pattern_list: - if not self.select_pattern (pattern, prefix=dir): - self.warn (("no files found matching '%s' " + - "under directory '%s'") % - (pattern, dir)) - - elif action == 'recursive-exclude': - self.debug_print("recursive-exclude %s %s" % - (dir, string.join(pattern_list))) - for pattern in pattern_list: - if not self.exclude_pattern(pattern, prefix=dir): - self.warn \ - (("no previously-included files matching '%s' " + - "found under directory '%s'") % - (pattern, dir)) - - elif action == 'graft': - self.debug_print("graft " + dir_pattern) - if not self.select_pattern(None, prefix=dir_pattern): - self.warn ("no directories found matching '%s'" % - dir_pattern) - - elif action == 'prune': - self.debug_print("prune " + dir_pattern) - if not self.exclude_pattern(None, prefix=dir_pattern): + (("no previously-included files matching '%s' " + + "found anywhere in distribution") % + pattern) + + elif action == 'recursive-include': + self.debug_print("recursive-include %s %s" % + (dir, string.join(pattern_list))) + for pattern in pattern_list: + if not self.select_pattern (pattern, prefix=dir): + self.warn (("no files found matching '%s' " + + "under directory '%s'") % + (pattern, dir)) + + elif action == 'recursive-exclude': + self.debug_print("recursive-exclude %s %s" % + (dir, string.join(pattern_list))) + for pattern in pattern_list: + if not self.exclude_pattern(pattern, prefix=dir): self.warn \ - (("no previously-included directories found " + - "matching '%s'") % - dir_pattern) - else: - raise RuntimeError, \ - "this cannot happen: invalid action '%s'" % action + (("no previously-included files matching '%s' " + + "found under directory '%s'") % + (pattern, dir)) + + elif action == 'graft': + self.debug_print("graft " + dir_pattern) + if not self.select_pattern(None, prefix=dir_pattern): + self.warn ("no directories found matching '%s'" % + dir_pattern) + + elif action == 'prune': + self.debug_print("prune " + dir_pattern) + if not self.exclude_pattern(None, prefix=dir_pattern): + self.warn \ + (("no previously-included directories found " + + "matching '%s'") % + dir_pattern) + else: + raise RuntimeError, \ + "this cannot happen: invalid action '%s'" % action # process_line () - - def select_pattern (self, pattern, anchor=1, prefix=None, is_regex=0): """Select strings (presumably filenames) from 'files' that match |