Mercurial > piecrust2
comparison piecrust/processing/base.py @ 35:e4c345dcf33c
More unit tests, fix a bug with the skip patterns.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Wed, 20 Aug 2014 21:46:27 -0700 |
| parents | df790a827d38 |
| children | 485682a6de50 |
comparison
equal
deleted
inserted
replaced
| 34:bdb103c57168 | 35:e4c345dcf33c |
|---|---|
| 158 '.git*', '.hg*', '.svn'] | 158 '.git*', '.hg*', '.svn'] |
| 159 | 159 |
| 160 self.skip_patterns = make_re(self.skip_patterns) | 160 self.skip_patterns = make_re(self.skip_patterns) |
| 161 self.force_patterns = make_re(self.force_patterns) | 161 self.force_patterns = make_re(self.force_patterns) |
| 162 | 162 |
| 163 def filterProcessors(self, authorized_names): | |
| 164 self.processors = list(filter( | |
| 165 lambda p: p.PROCESSOR_NAME in authorized_names, | |
| 166 self.processors)) | |
| 167 | |
| 163 def run(self, src_dir_or_file=None): | 168 def run(self, src_dir_or_file=None): |
| 164 record = ProcessorPipelineRecord() | 169 record = ProcessorPipelineRecord() |
| 165 | 170 |
| 166 # Create the workers. | 171 # Create the workers. |
| 167 pool = [] | 172 pool = [] |
| 219 | 224 |
| 220 def processDirectory(self, ctx, start_dir): | 225 def processDirectory(self, ctx, start_dir): |
| 221 for dirpath, dirnames, filenames in os.walk(start_dir): | 226 for dirpath, dirnames, filenames in os.walk(start_dir): |
| 222 rel_dirpath = os.path.relpath(dirpath, start_dir) | 227 rel_dirpath = os.path.relpath(dirpath, start_dir) |
| 223 dirnames[:] = [d for d in dirnames | 228 dirnames[:] = [d for d in dirnames |
| 224 if not re_matchany(os.path.join(rel_dirpath, d), | 229 if not re_matchany(d, self.skip_patterns, rel_dirpath)] |
| 225 self.skip_patterns)] | |
| 226 | 230 |
| 227 for filename in filenames: | 231 for filename in filenames: |
| 228 if re_matchany(os.path.join(rel_dirpath, filename), | 232 if re_matchany(filename, self.skip_patterns, rel_dirpath): |
| 229 self.skip_patterns): | |
| 230 continue | 233 continue |
| 231 self.processFile(ctx, os.path.join(dirpath, filename)) | 234 self.processFile(ctx, os.path.join(dirpath, filename)) |
| 232 | 235 |
| 233 def processFile(self, ctx, path): | 236 def processFile(self, ctx, path): |
| 234 logger.debug("Queuing: %s" % path) | 237 logger.debug("Queuing: %s" % path) |
| 326 .replace(r'\?', r'[^/\\]')) | 329 .replace(r'\?', r'[^/\\]')) |
| 327 re_patterns.append(escaped_pat) | 330 re_patterns.append(escaped_pat) |
| 328 return [re.compile(p) for p in re_patterns] | 331 return [re.compile(p) for p in re_patterns] |
| 329 | 332 |
| 330 | 333 |
| 331 def re_matchany(filename, patterns): | 334 def re_matchany(filename, patterns, dirname=None): |
| 335 if dirname and dirname != '.': | |
| 336 filename = os.path.join(dirname, filename) | |
| 337 | |
| 332 # skip patterns use a forward slash regardless of the platform. | 338 # skip patterns use a forward slash regardless of the platform. |
| 333 filename = filename.replace('\\', '/') | 339 filename = filename.replace('\\', '/') |
| 334 for pattern in patterns: | 340 for pattern in patterns: |
| 335 if pattern.search(filename): | 341 if pattern.search(filename): |
| 336 return True | 342 return True |
