diff: handle errors gracefully
If `git diff` fails in any project checkout (e.g. an incomplete
sync), make sure we print that error clearly rather than blowing
up, and exit non-zero in the process.
Bug: https://crbug.com/gerrit/11613
Change-Id: I12f278427cced20f23f8047e7e3dba8f442ee25e
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239236
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/project.py b/project.py
index a20b413..b41a57c 100755
--- a/project.py
+++ b/project.py
@@ -230,6 +230,7 @@
def __init__(self, config):
Coloring.__init__(self, config, 'diff')
self.project = self.printer('header', attr='bold')
+ self.fail = self.printer('fail', fg='red')
class _Annotation(object):
@@ -1136,10 +1137,18 @@
cmd.append('--src-prefix=a/%s/' % self.relpath)
cmd.append('--dst-prefix=b/%s/' % self.relpath)
cmd.append('--')
- p = GitCommand(self,
- cmd,
- capture_stdout=True,
- capture_stderr=True)
+ try:
+ p = GitCommand(self,
+ cmd,
+ capture_stdout=True,
+ capture_stderr=True)
+ except GitError as e:
+ out.nl()
+ out.project('project %s/' % self.relpath)
+ out.nl()
+ out.fail('%s', str(e))
+ out.nl()
+ return False
has_diff = False
for line in p.process.stdout:
if not hasattr(line, 'encode'):
@@ -1150,7 +1159,7 @@
out.nl()
has_diff = True
print(line[:-1])
- p.Wait()
+ return p.Wait() == 0
# Publish / Upload ##