diff options
| author | Daniel Sandler <dsandler@android.com> | 2011-04-29 09:59:12 -0400 |
|---|---|---|
| committer | Shawn O. Pearce <sop@google.com> | 2011-11-29 14:38:19 -0800 |
| commit | 3ce2a6b46bb368f000d25782e24d701f68f32659 (patch) | |
| tree | 0d22b2e9993bd3a378bb9dc56df134c038621397 /main.py | |
| parent | 841be34968c91c3ea8d8694bc5910e6388f58cbb (diff) | |
| download | git-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
Diffstat (limited to 'main.py')
| -rwxr-xr-x | main.py | 27 |
1 files changed, 17 insertions, 10 deletions
| @@ -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 | ||
| 160 | def _MyRepoPath(): | 163 | def _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 | ||
| 318 | def _Main(argv): | 321 | def _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 | ||
| 354 | if __name__ == '__main__': | 361 | if __name__ == '__main__': |
| 355 | _Main(sys.argv[1:]) | 362 | _Main(sys.argv[1:]) |
