diff options
| -rw-r--r-- | subcmds/grep.py | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/subcmds/grep.py b/subcmds/grep.py index a588a78e..4dd85d57 100644 --- a/subcmds/grep.py +++ b/subcmds/grep.py | |||
| @@ -15,15 +15,19 @@ | |||
| 15 | # limitations under the License. | 15 | # limitations under the License. |
| 16 | 16 | ||
| 17 | from __future__ import print_function | 17 | from __future__ import print_function |
| 18 | |||
| 18 | import sys | 19 | import sys |
| 20 | |||
| 19 | from color import Coloring | 21 | from color import Coloring |
| 20 | from command import PagedCommand | 22 | from command import PagedCommand |
| 23 | from error import GitError | ||
| 21 | from git_command import git_require, GitCommand | 24 | from git_command import git_require, GitCommand |
| 22 | 25 | ||
| 23 | class GrepColoring(Coloring): | 26 | class GrepColoring(Coloring): |
| 24 | def __init__(self, config): | 27 | def __init__(self, config): |
| 25 | Coloring.__init__(self, config, 'grep') | 28 | Coloring.__init__(self, config, 'grep') |
| 26 | self.project = self.printer('project', attr='bold') | 29 | self.project = self.printer('project', attr='bold') |
| 30 | self.fail = self.printer('fail', fg='red') | ||
| 27 | 31 | ||
| 28 | class Grep(PagedCommand): | 32 | class Grep(PagedCommand): |
| 29 | common = True | 33 | common = True |
| @@ -184,15 +188,25 @@ contain a line that matches both expressions: | |||
| 184 | cmd_argv.extend(opt.revision) | 188 | cmd_argv.extend(opt.revision) |
| 185 | cmd_argv.append('--') | 189 | cmd_argv.append('--') |
| 186 | 190 | ||
| 191 | git_failed = False | ||
| 187 | bad_rev = False | 192 | bad_rev = False |
| 188 | have_match = False | 193 | have_match = False |
| 189 | 194 | ||
| 190 | for project in projects: | 195 | for project in projects: |
| 191 | p = GitCommand(project, | 196 | try: |
| 192 | cmd_argv, | 197 | p = GitCommand(project, |
| 193 | bare = False, | 198 | cmd_argv, |
| 194 | capture_stdout = True, | 199 | bare=False, |
| 195 | capture_stderr = True) | 200 | capture_stdout=True, |
| 201 | capture_stderr=True) | ||
| 202 | except GitError as e: | ||
| 203 | git_failed = True | ||
| 204 | out.project('--- project %s ---' % project.relpath) | ||
| 205 | out.nl() | ||
| 206 | out.fail('%s', str(e)) | ||
| 207 | out.nl() | ||
| 208 | continue | ||
| 209 | |||
| 196 | if p.Wait() != 0: | 210 | if p.Wait() != 0: |
| 197 | # no results | 211 | # no results |
| 198 | # | 212 | # |
| @@ -202,7 +216,7 @@ contain a line that matches both expressions: | |||
| 202 | else: | 216 | else: |
| 203 | out.project('--- project %s ---' % project.relpath) | 217 | out.project('--- project %s ---' % project.relpath) |
| 204 | out.nl() | 218 | out.nl() |
| 205 | out.write("%s", p.stderr) | 219 | out.fail('%s', p.stderr.strip()) |
| 206 | out.nl() | 220 | out.nl() |
| 207 | continue | 221 | continue |
| 208 | have_match = True | 222 | have_match = True |
| @@ -231,7 +245,9 @@ contain a line that matches both expressions: | |||
| 231 | for line in r: | 245 | for line in r: |
| 232 | print(line) | 246 | print(line) |
| 233 | 247 | ||
| 234 | if have_match: | 248 | if git_failed: |
| 249 | sys.exit(1) | ||
| 250 | elif have_match: | ||
| 235 | sys.exit(0) | 251 | sys.exit(0) |
| 236 | elif have_rev and bad_rev: | 252 | elif have_rev and bad_rev: |
| 237 | for r in opt.revision: | 253 | for r in opt.revision: |
