diff options
| author | Dan Sandler <dsandler@android.com> | 2014-03-09 13:20:02 -0400 |
|---|---|---|
| committer | David Pursehouse <david.pursehouse@sonymobile.com> | 2014-03-11 05:33:43 +0000 |
| commit | 53e902a19b0b80e07ac55966d13c5c84c5b0e8ce (patch) | |
| tree | e804b3826be8d5bb6153f2f9f4e482191e8b8642 | |
| parent | 093fdb6587bba081c4d34eb9ea500149b1090280 (diff) | |
| download | git-repo-53e902a19b0b80e07ac55966d13c5c84c5b0e8ce.tar.gz | |
More verbose errors for NoManifestExceptions.
The old "manifest required for this command -- please run
init" is replaced by a more helpful message that lists the
command repo was trying to execute (with arguments) as well
as the str() of the NoManifestException. For example:
> error: in `sync`: [Errno 2] No such file or directory:
> 'path/to/.repo/manifests/.git/HEAD'
> error: manifest missing or unreadable -- please run init
Other failure points in basic command parsing and dispatch
are more clearly explained in the same fashion.
Change-Id: I6212e5c648bc5d57e27145d55a5391ca565e4149
| -rw-r--r-- | error.py | 7 | ||||
| -rwxr-xr-x | main.py | 27 | ||||
| -rw-r--r-- | project.py | 4 |
3 files changed, 25 insertions, 13 deletions
| @@ -24,6 +24,13 @@ class ManifestInvalidRevisionError(Exception): | |||
| 24 | class NoManifestException(Exception): | 24 | class NoManifestException(Exception): |
| 25 | """The required manifest does not exist. | 25 | """The required manifest does not exist. |
| 26 | """ | 26 | """ |
| 27 | def __init__(self, path, reason): | ||
| 28 | super(NoManifestException, self).__init__() | ||
| 29 | self.path = path | ||
| 30 | self.reason = reason | ||
| 31 | |||
| 32 | def __str__(self): | ||
| 33 | return self.reason | ||
| 27 | 34 | ||
| 28 | class EditorError(Exception): | 35 | class EditorError(Exception): |
| 29 | """Unspecified error from the user's text editor. | 36 | """Unspecified error from the user's text editor. |
| @@ -129,8 +129,15 @@ class _Repo(object): | |||
| 129 | file=sys.stderr) | 129 | file=sys.stderr) |
| 130 | return 1 | 130 | return 1 |
| 131 | 131 | ||
| 132 | copts, cargs = cmd.OptionParser.parse_args(argv) | 132 | try: |
| 133 | copts = cmd.ReadEnvironmentOptions(copts) | 133 | copts, cargs = cmd.OptionParser.parse_args(argv) |
| 134 | copts = cmd.ReadEnvironmentOptions(copts) | ||
| 135 | except NoManifestException as e: | ||
| 136 | print('error: in `%s`: %s' % (' '.join([name] + argv), str(e)), | ||
| 137 | file=sys.stderr) | ||
| 138 | print('error: manifest missing or unreadable -- please run init', | ||
| 139 | file=sys.stderr) | ||
| 140 | return 1 | ||
| 134 | 141 | ||
| 135 | if not gopts.no_pager and not isinstance(cmd, InteractiveCommand): | 142 | if not gopts.no_pager and not isinstance(cmd, InteractiveCommand): |
| 136 | config = cmd.manifest.globalConfig | 143 | config = cmd.manifest.globalConfig |
| @@ -146,15 +153,13 @@ class _Repo(object): | |||
| 146 | start = time.time() | 153 | start = time.time() |
| 147 | try: | 154 | try: |
| 148 | result = cmd.Execute(copts, cargs) | 155 | result = cmd.Execute(copts, cargs) |
| 149 | except DownloadError as e: | 156 | except (DownloadError, ManifestInvalidRevisionError, |
| 150 | print('error: %s' % str(e), file=sys.stderr) | 157 | NoManifestException) as e: |
| 151 | result = 1 | 158 | print('error: in `%s`: %s' % (' '.join([name] + argv), str(e)), |
| 152 | except ManifestInvalidRevisionError as e: | 159 | file=sys.stderr) |
| 153 | print('error: %s' % str(e), file=sys.stderr) | 160 | if isinstance(e, NoManifestException): |
| 154 | result = 1 | 161 | print('error: manifest missing or unreadable -- please run init', |
| 155 | except NoManifestException as e: | 162 | file=sys.stderr) |
| 156 | print('error: manifest required for this command -- please run init', | ||
| 157 | file=sys.stderr) | ||
| 158 | result = 1 | 163 | result = 1 |
| 159 | except NoSuchProjectError as e: | 164 | except NoSuchProjectError as e: |
| 160 | if e.name: | 165 | if e.name: |
| @@ -2327,8 +2327,8 @@ class Project(object): | |||
| 2327 | path = os.path.join(self._project.worktree, '.git', HEAD) | 2327 | path = os.path.join(self._project.worktree, '.git', HEAD) |
| 2328 | try: | 2328 | try: |
| 2329 | fd = open(path, 'rb') | 2329 | fd = open(path, 'rb') |
| 2330 | except IOError: | 2330 | except IOError as e: |
| 2331 | raise NoManifestException(path) | 2331 | raise NoManifestException(path, str(e)) |
| 2332 | try: | 2332 | try: |
| 2333 | line = fd.read() | 2333 | line = fd.read() |
| 2334 | finally: | 2334 | finally: |
