diff options
Diffstat (limited to 'subcmds/grep.py')
| -rw-r--r-- | subcmds/grep.py | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/subcmds/grep.py b/subcmds/grep.py index b677b6bd..918651d9 100644 --- a/subcmds/grep.py +++ b/subcmds/grep.py | |||
| @@ -23,7 +23,6 @@ from error import GitError | |||
| 23 | from error import InvalidArgumentsError | 23 | from error import InvalidArgumentsError |
| 24 | from error import SilentRepoExitError | 24 | from error import SilentRepoExitError |
| 25 | from git_command import GitCommand | 25 | from git_command import GitCommand |
| 26 | from project import Project | ||
| 27 | from repo_logging import RepoLogger | 26 | from repo_logging import RepoLogger |
| 28 | 27 | ||
| 29 | 28 | ||
| @@ -40,7 +39,7 @@ class GrepColoring(Coloring): | |||
| 40 | class ExecuteOneResult(NamedTuple): | 39 | class ExecuteOneResult(NamedTuple): |
| 41 | """Result from an execute instance.""" | 40 | """Result from an execute instance.""" |
| 42 | 41 | ||
| 43 | project: Project | 42 | project_idx: int |
| 44 | rc: int | 43 | rc: int |
| 45 | stdout: str | 44 | stdout: str |
| 46 | stderr: str | 45 | stderr: str |
| @@ -262,8 +261,10 @@ contain a line that matches both expressions: | |||
| 262 | help="Show only file names not containing matching lines", | 261 | help="Show only file names not containing matching lines", |
| 263 | ) | 262 | ) |
| 264 | 263 | ||
| 265 | def _ExecuteOne(self, cmd_argv, project): | 264 | @classmethod |
| 265 | def _ExecuteOne(cls, cmd_argv, project_idx): | ||
| 266 | """Process one project.""" | 266 | """Process one project.""" |
| 267 | project = cls.get_parallel_context()["projects"][project_idx] | ||
| 267 | try: | 268 | try: |
| 268 | p = GitCommand( | 269 | p = GitCommand( |
| 269 | project, | 270 | project, |
| @@ -274,7 +275,7 @@ contain a line that matches both expressions: | |||
| 274 | verify_command=True, | 275 | verify_command=True, |
| 275 | ) | 276 | ) |
| 276 | except GitError as e: | 277 | except GitError as e: |
| 277 | return ExecuteOneResult(project, -1, None, str(e), e) | 278 | return ExecuteOneResult(project_idx, -1, None, str(e), e) |
| 278 | 279 | ||
| 279 | try: | 280 | try: |
| 280 | error = None | 281 | error = None |
| @@ -282,10 +283,12 @@ contain a line that matches both expressions: | |||
| 282 | except GitError as e: | 283 | except GitError as e: |
| 283 | rc = 1 | 284 | rc = 1 |
| 284 | error = e | 285 | error = e |
| 285 | return ExecuteOneResult(project, rc, p.stdout, p.stderr, error) | 286 | return ExecuteOneResult(project_idx, rc, p.stdout, p.stderr, error) |
| 286 | 287 | ||
| 287 | @staticmethod | 288 | @staticmethod |
| 288 | def _ProcessResults(full_name, have_rev, opt, _pool, out, results): | 289 | def _ProcessResults( |
| 290 | full_name, have_rev, opt, projects, _pool, out, results | ||
| 291 | ): | ||
| 289 | git_failed = False | 292 | git_failed = False |
| 290 | bad_rev = False | 293 | bad_rev = False |
| 291 | have_match = False | 294 | have_match = False |
| @@ -293,9 +296,10 @@ contain a line that matches both expressions: | |||
| 293 | errors = [] | 296 | errors = [] |
| 294 | 297 | ||
| 295 | for result in results: | 298 | for result in results: |
| 299 | project = projects[result.project_idx] | ||
| 296 | if result.rc < 0: | 300 | if result.rc < 0: |
| 297 | git_failed = True | 301 | git_failed = True |
| 298 | out.project("--- project %s ---" % _RelPath(result.project)) | 302 | out.project("--- project %s ---" % _RelPath(project)) |
| 299 | out.nl() | 303 | out.nl() |
| 300 | out.fail("%s", result.stderr) | 304 | out.fail("%s", result.stderr) |
| 301 | out.nl() | 305 | out.nl() |
| @@ -311,9 +315,7 @@ contain a line that matches both expressions: | |||
| 311 | ): | 315 | ): |
| 312 | bad_rev = True | 316 | bad_rev = True |
| 313 | else: | 317 | else: |
| 314 | out.project( | 318 | out.project("--- project %s ---" % _RelPath(project)) |
| 315 | "--- project %s ---" % _RelPath(result.project) | ||
| 316 | ) | ||
| 317 | out.nl() | 319 | out.nl() |
| 318 | out.fail("%s", result.stderr.strip()) | 320 | out.fail("%s", result.stderr.strip()) |
| 319 | out.nl() | 321 | out.nl() |
| @@ -331,13 +333,13 @@ contain a line that matches both expressions: | |||
| 331 | rev, line = line.split(":", 1) | 333 | rev, line = line.split(":", 1) |
| 332 | out.write("%s", rev) | 334 | out.write("%s", rev) |
| 333 | out.write(":") | 335 | out.write(":") |
| 334 | out.project(_RelPath(result.project)) | 336 | out.project(_RelPath(project)) |
| 335 | out.write("/") | 337 | out.write("/") |
| 336 | out.write("%s", line) | 338 | out.write("%s", line) |
| 337 | out.nl() | 339 | out.nl() |
| 338 | elif full_name: | 340 | elif full_name: |
| 339 | for line in r: | 341 | for line in r: |
| 340 | out.project(_RelPath(result.project)) | 342 | out.project(_RelPath(project)) |
| 341 | out.write("/") | 343 | out.write("/") |
| 342 | out.write("%s", line) | 344 | out.write("%s", line) |
| 343 | out.nl() | 345 | out.nl() |
| @@ -381,16 +383,19 @@ contain a line that matches both expressions: | |||
| 381 | cmd_argv.extend(opt.revision) | 383 | cmd_argv.extend(opt.revision) |
| 382 | cmd_argv.append("--") | 384 | cmd_argv.append("--") |
| 383 | 385 | ||
| 384 | git_failed, bad_rev, have_match, errors = self.ExecuteInParallel( | 386 | with self.ParallelContext(): |
| 385 | opt.jobs, | 387 | self.get_parallel_context()["projects"] = projects |
| 386 | functools.partial(self._ExecuteOne, cmd_argv), | 388 | git_failed, bad_rev, have_match, errors = self.ExecuteInParallel( |
| 387 | projects, | 389 | opt.jobs, |
| 388 | callback=functools.partial( | 390 | functools.partial(self._ExecuteOne, cmd_argv), |
| 389 | self._ProcessResults, full_name, have_rev, opt | 391 | range(len(projects)), |
| 390 | ), | 392 | callback=functools.partial( |
| 391 | output=out, | 393 | self._ProcessResults, full_name, have_rev, opt, projects |
| 392 | ordered=True, | 394 | ), |
| 393 | ) | 395 | output=out, |
| 396 | ordered=True, | ||
| 397 | chunksize=1, | ||
| 398 | ) | ||
| 394 | 399 | ||
| 395 | if git_failed: | 400 | if git_failed: |
| 396 | raise GrepCommandError( | 401 | raise GrepCommandError( |
