summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2011-04-29 09:59:12 -0400
committerShawn O. Pearce <sop@google.com>2011-11-29 14:38:19 -0800
commit3ce2a6b46bb368f000d25782e24d701f68f32659 (patch)
tree0d22b2e9993bd3a378bb9dc56df134c038621397
parent841be34968c91c3ea8d8694bc5910e6388f58cbb (diff)
downloadgit-repo-3ce2a6b46bb368f000d25782e24d701f68f32659.tar.gz
Propagate result codes from subcmds to sys.exit().
Allows scripts driving repo to know when git failures have occurred, not just repo internal errors. Change-Id: Id20fbbb405c35a148e72c87b822da3f3bf93839c
-rwxr-xr-xmain.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/main.py b/main.py
index 9bd4b457..ebce9b73 100755
--- a/main.py
+++ b/main.py
@@ -73,6 +73,7 @@ class _Repo(object):
73 all_commands['branch'] = all_commands['branches'] 73 all_commands['branch'] = all_commands['branches']
74 74
75 def _Run(self, argv): 75 def _Run(self, argv):
76 result = 0
76 name = None 77 name = None
77 glob = [] 78 glob = []
78 79
@@ -96,7 +97,7 @@ class _Repo(object):
96 name = 'version' 97 name = 'version'
97 else: 98 else:
98 print >>sys.stderr, 'fatal: invalid usage of --version' 99 print >>sys.stderr, 'fatal: invalid usage of --version'
99 sys.exit(1) 100 return 1
100 101
101 try: 102 try:
102 cmd = self.commands[name] 103 cmd = self.commands[name]
@@ -104,7 +105,7 @@ class _Repo(object):
104 print >>sys.stderr,\ 105 print >>sys.stderr,\
105 "repo: '%s' is not a repo command. See 'repo help'."\ 106 "repo: '%s' is not a repo command. See 'repo help'."\
106 % name 107 % name
107 sys.exit(1) 108 return 1
108 109
109 cmd.repodir = self.repodir 110 cmd.repodir = self.repodir
110 cmd.manifest = XmlManifest(cmd.repodir) 111 cmd.manifest = XmlManifest(cmd.repodir)
@@ -114,7 +115,7 @@ class _Repo(object):
114 print >>sys.stderr, \ 115 print >>sys.stderr, \
115 "fatal: '%s' requires a working directory"\ 116 "fatal: '%s' requires a working directory"\
116 % name 117 % name
117 sys.exit(1) 118 return 1
118 119
119 copts, cargs = cmd.OptionParser.parse_args(argv) 120 copts, cargs = cmd.OptionParser.parse_args(argv)
120 121
@@ -132,7 +133,7 @@ class _Repo(object):
132 try: 133 try:
133 start = time.time() 134 start = time.time()
134 try: 135 try:
135 cmd.Execute(copts, cargs) 136 result = cmd.Execute(copts, cargs)
136 finally: 137 finally:
137 elapsed = time.time() - start 138 elapsed = time.time() - start
138 hours, remainder = divmod(elapsed, 3600) 139 hours, remainder = divmod(elapsed, 3600)
@@ -146,16 +147,18 @@ class _Repo(object):
146 % (hours, minutes, seconds) 147 % (hours, minutes, seconds)
147 except DownloadError, e: 148 except DownloadError, e:
148 print >>sys.stderr, 'error: %s' % str(e) 149 print >>sys.stderr, 'error: %s' % str(e)
149 sys.exit(1) 150 return 1
150 except ManifestInvalidRevisionError, e: 151 except ManifestInvalidRevisionError, e:
151 print >>sys.stderr, 'error: %s' % str(e) 152 print >>sys.stderr, 'error: %s' % str(e)
152 sys.exit(1) 153 return 1
153 except NoSuchProjectError, e: 154 except NoSuchProjectError, e:
154 if e.name: 155 if e.name:
155 print >>sys.stderr, 'error: project %s not found' % e.name 156 print >>sys.stderr, 'error: project %s not found' % e.name
156 else: 157 else:
157 print >>sys.stderr, 'error: no project in current directory' 158 print >>sys.stderr, 'error: no project in current directory'
158 sys.exit(1) 159 return 1
160
161 return result
159 162
160def _MyRepoPath(): 163def _MyRepoPath():
161 return os.path.dirname(__file__) 164 return os.path.dirname(__file__)
@@ -316,6 +319,8 @@ def init_http():
316 urllib2.install_opener(urllib2.build_opener(*handlers)) 319 urllib2.install_opener(urllib2.build_opener(*handlers))
317 320
318def _Main(argv): 321def _Main(argv):
322 result = 0
323
319 opt = optparse.OptionParser(usage="repo wrapperinfo -- ...") 324 opt = optparse.OptionParser(usage="repo wrapperinfo -- ...")
320 opt.add_option("--repo-dir", dest="repodir", 325 opt.add_option("--repo-dir", dest="repodir",
321 help="path to .repo/") 326 help="path to .repo/")
@@ -334,11 +339,11 @@ def _Main(argv):
334 try: 339 try:
335 init_ssh() 340 init_ssh()
336 init_http() 341 init_http()
337 repo._Run(argv) 342 result = repo._Run(argv) or 0
338 finally: 343 finally:
339 close_ssh() 344 close_ssh()
340 except KeyboardInterrupt: 345 except KeyboardInterrupt:
341 sys.exit(1) 346 result = 1
342 except RepoChangedException, rce: 347 except RepoChangedException, rce:
343 # If repo changed, re-exec ourselves. 348 # If repo changed, re-exec ourselves.
344 # 349 #
@@ -349,7 +354,9 @@ def _Main(argv):
349 except OSError, e: 354 except OSError, e:
350 print >>sys.stderr, 'fatal: cannot restart repo after upgrade' 355 print >>sys.stderr, 'fatal: cannot restart repo after upgrade'
351 print >>sys.stderr, 'fatal: %s' % e 356 print >>sys.stderr, 'fatal: %s' % e
352 sys.exit(128) 357 result = 128
358
359 sys.exit(result)
353 360
354if __name__ == '__main__': 361if __name__ == '__main__':
355 _Main(sys.argv[1:]) 362 _Main(sys.argv[1:])