diff options
| author | Jack Neus <jackneus@google.com> | 2021-10-25 22:38:44 +0000 |
|---|---|---|
| committer | Jack Neus <jackneus@google.com> | 2021-10-26 22:18:28 +0000 |
| commit | 198838599c5d4eaaa3bd68ff903925eeb4a09da9 (patch) | |
| tree | 2c7f8e448acb0881397f97a71e205b613aa747e5 /fetch.py | |
| parent | 282d0cae8913e9d20f526e7fb2633bb4e2a21fbf (diff) | |
| download | git-repo-198838599c5d4eaaa3bd68ff903925eeb4a09da9.tar.gz | |
fetch: Fix stderr handling for gsutil
Previously gsutil stderr was getting piped into stdout, which
yields bad results if there are non-fatal warnings in stderr.
Additionally, we should fail outright if gsutil fails (by adding
`check = True`) rather than fail later on when we try to sync to
a manifest that is in fact just a stderr dump.
BUG=none
TEST=manual runs with bad gs urls
Change-Id: Id71791d0c3f180bd0601ef2c783a8e8e4afa8f59
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/321935
Tested-by: Jack Neus <jackneus@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'fetch.py')
| -rw-r--r-- | fetch.py | 10 |
1 files changed, 7 insertions, 3 deletions
| @@ -18,7 +18,7 @@ import subprocess | |||
| 18 | import sys | 18 | import sys |
| 19 | from urllib.parse import urlparse | 19 | from urllib.parse import urlparse |
| 20 | 20 | ||
| 21 | def fetch_file(url): | 21 | def fetch_file(url, verbose=False): |
| 22 | """Fetch a file from the specified source using the appropriate protocol. | 22 | """Fetch a file from the specified source using the appropriate protocol. |
| 23 | 23 | ||
| 24 | Returns: | 24 | Returns: |
| @@ -29,10 +29,14 @@ def fetch_file(url): | |||
| 29 | cmd = ['gsutil', 'cat', url] | 29 | cmd = ['gsutil', 'cat', url] |
| 30 | try: | 30 | try: |
| 31 | result = subprocess.run( | 31 | result = subprocess.run( |
| 32 | cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) | 32 | cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
| 33 | check=True) | ||
| 34 | if result.stderr and verbose: | ||
| 35 | print('warning: non-fatal error running "gsutil": %s' % result.stderr, | ||
| 36 | file=sys.stderr) | ||
| 33 | return result.stdout | 37 | return result.stdout |
| 34 | except subprocess.CalledProcessError as e: | 38 | except subprocess.CalledProcessError as e: |
| 35 | print('fatal: error running "gsutil": %s' % e.output, | 39 | print('fatal: error running "gsutil": %s' % e.stderr, |
| 36 | file=sys.stderr) | 40 | file=sys.stderr) |
| 37 | sys.exit(1) | 41 | sys.exit(1) |
| 38 | if scheme == 'file': | 42 | if scheme == 'file': |
