Suppress tracebacks for "expected" errors

We shouldn't crash when network communication fails, or when a subprocess fails.
The traceback is unsightly, and causes bug reports to be files. Let's just print
the error.

$ PYTHONPATH=$HOME/python/rust2rpm python -m rust2rpm ./asdfasdf.asdf
error: the manifest-path must be a path to a Cargo.toml file
Subcommand failed with code 101: cargo read-manifest --manifest-path=./asdfasdf.asdf
$ PYTHONPATH=$HOME/python/rust2rpm python -m rust2rpm asdfasdf
Failed to download metadata: 404 Client Error: Not Found for url: https://crates.io/api/v1/crates/asdfasdf/versions

Fixes #145.

(This does the relatively easy thing of printing the original message. In
principle we could try to figure out what the exact error was and print uniform
error messages. But that'd be quite a lot of work, and fairly brittle, because
we'd need to cover all possible errors. So let's do this thing which should
be good enough in 95% of cases.)
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2021-09-28 12:56:29 +02:00 committed by zbyszek
parent 057dd98350
commit afbee03f26

View file

@ -347,7 +347,7 @@ def main():
parser.error("required crate/path argument missing")
crate, diff, metadata, doc_files, license_files = make_diff_metadata(
args.crate, args.version, patch=args.patch, store=args.store_crate)
args.crate, args.version, patch=args.patch, store=args.store_crate)
JINJA_ENV.globals["normalize_deps"] = normalize_deps
JINJA_ENV.globals["to_list"] = to_list
@ -468,4 +468,10 @@ def main():
fobj.writelines(diff)
if __name__ == "__main__":
main()
try:
main()
except requests.exceptions.HTTPError as e:
sys.exit(f'Failed to download metadata: {e}')
except subprocess.CalledProcessError as e:
cmd = shlex.join(e.cmd)
sys.exit(f'Subcommand failed with code {e.returncode}: {cmd}')