Reland "Warn users when .boto might be outdated"

This is a reland of commit e2f35370f5

Original change's description:
> Warn users when .boto might be outdated
>
> Fixed: 1414152
> Change-Id: I887de64a72777c92413ee921099dd762361f6c5c
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4251897
> Commit-Queue: Aravind Vasudevan <aravindvasudev@google.com>
> Reviewed-by: Traian Captan <tcaptan@chromium.org>

Change-Id: Ib77921c172d6d5953c0df6a823b37d8d544ed5f6
Fixed: 1416952
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4260819
Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
Commit-Queue: Aravind Vasudevan <aravindvasudev@google.com>
changes/19/4260819/5
Aravind Vasudevan 2 years ago committed by LUCI CQ
parent c72b0e286d
commit 3879bd830c

@ -147,6 +147,9 @@ def ensure_gsutil(version, target, clean):
def _is_luci_context():
"""Returns True if the script is run within luci-context"""
if os.getenv('SWARMING_HEADLESS') == '1':
return True
luci_context_env = os.getenv('LUCI_CONTEXT')
if not luci_context_env:
return False
@ -167,12 +170,7 @@ def luci_context(cmd):
if b'Not logged in.' in p.stderr:
return _run_subprocess(cmd, interactive=True)
if p.stdout:
print(p.stdout.decode('utf-8'), end='')
if p.stderr:
print(p.stderr.decode('utf-8'), file=sys.stderr, end='')
_print_subprocess_result(p)
return p
@ -205,9 +203,20 @@ def _run_subprocess(cmd, interactive=False, env=None):
return subprocess.run(cmd, **kwargs)
def _print_subprocess_result(p):
"""Prints the subprocess result to stdout & stderr."""
if p.stdout:
sys.stdout.buffer.write(p.stdout)
if p.stderr:
sys.stderr.buffer.write(p.stderr)
def is_boto_present():
"""Returns true if the .boto file is present in the default path."""
return os.path.isfile(os.path.join(os.path.expanduser('~'), '.boto'))
return os.getenv('BOTO_CONFIG') or os.getenv(
'AWS_CREDENTIAL_FILE') or os.path.isfile(
os.path.join(os.path.expanduser('~'), '.boto'))
def run_gsutil(target, args, clean=False):
@ -244,12 +253,27 @@ def run_gsutil(target, args, clean=False):
gsutil_bin
] + args_opt + args
# Bypass luci-auth when run within a bot or .boto file is set.
if (_is_luci_context() or os.getenv('SWARMING_HEADLESS') == '1'
or os.getenv('BOTO_CONFIG') or os.getenv('AWS_CREDENTIAL_FILE')
or is_boto_present()):
# When .boto is present, try without additional wrappers and handle specific
# errors.
if is_boto_present():
p = _run_subprocess(cmd)
# Notify user that their .boto file might be outdated.
if b'Your credentials are invalid.' in p.stderr:
print(
'Warning: You might have an outdated .boto file. If this issue '
'persists after running `gsutil.py config`, try removing your '
'.boto file.',
file=sys.stderr)
_print_subprocess_result(p)
return p.returncode
# Skip wrapping commands if luci-auth is already being
if _is_luci_context():
return _run_subprocess(cmd, interactive=True).returncode
# Wrap gsutil with luci-auth context.
return luci_context(cmd).returncode

Loading…
Cancel
Save