pw_env_setup: Allow skipping environment check
If PW_ACTIVATE_SKIP_CHECKS is set skip running 'pw doctor' in
activate and bootstrap.
Change-Id: Ic041f36dd3b16ade70fd19b893edc25fcc1daa2f
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/28662
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Rob Mohr <mohrr@google.com>
diff --git a/pw_cli/py/pw_cli/env.py b/pw_cli/py/pw_cli/env.py
index 021c98e..eef188d 100644
--- a/pw_cli/py/pw_cli/env.py
+++ b/pw_cli/py/pw_cli/env.py
@@ -44,6 +44,9 @@
parser.add_allowed_suffix('_CIPD_INSTALL_DIR')
parser.add_var('PW_DOCTOR_SKIP_CIPD_CHECKS')
+ parser.add_var('PW_ACTIVATE_SKIP_CHECKS',
+ type=envparse.strict_bool,
+ default=False)
# TODO(pwbug/274) Remove after some transition time. These are no longer
# used but may be set by users or downstream projects, or just in currently
diff --git a/pw_env_setup/docs.rst b/pw_env_setup/docs.rst
index 018424e..c243dc9 100644
--- a/pw_env_setup/docs.rst
+++ b/pw_env_setup/docs.rst
@@ -224,6 +224,13 @@
--cargo-package-file
"$PW_ROOT/pw_env_setup/py/pw_env_setup/cargo_setup/packages.txt"
+Automated Tools
+***************
+Automated tools should set ``PW_ACTIVATE_SKIP_CHECKS=1`` before running
+``activate.sh`` or ``activate.bat``. This will skip the checks on the
+environment and should complete almost instantaneously. Users should not set
+this variable.
+
Implementation
**************
diff --git a/pw_env_setup/py/pw_env_setup/env_setup.py b/pw_env_setup/py/pw_env_setup/env_setup.py
index a03fdf4..f0461ff 100755
--- a/pw_env_setup/py/pw_env_setup/env_setup.py
+++ b/pw_env_setup/py/pw_env_setup/env_setup.py
@@ -324,10 +324,7 @@
self._env.echo(Color.bold('Sanity checking the environment:'))
self._env.echo()
- log_level = 'warn' if 'PW_ENVSETUP_QUIET' in os.environ else 'info'
- doctor = ['pw', '--no-banner', '--loglevel', log_level, 'doctor']
-
- self._env.command(doctor)
+ self._env.doctor()
self._env.echo()
self._env.echo(
diff --git a/pw_env_setup/py/pw_env_setup/environment.py b/pw_env_setup/py/pw_env_setup/environment.py
index 3e4c9b2..396671b 100644
--- a/pw_env_setup/py/pw_env_setup/environment.py
+++ b/pw_env_setup/py/pw_env_setup/environment.py
@@ -419,6 +419,34 @@
pass
+class Doctor(Command):
+ def __init__(self, *args, **kwargs):
+ log_level = 'warn' if 'PW_ENVSETUP_QUIET' in os.environ else 'info'
+ super(Doctor, self).__init__(
+ command=['pw', '--no-banner', '--loglevel', log_level, 'doctor'],
+ *args,
+ **kwargs)
+
+ def write(self, outs, windows=(os.name == 'nt'), replacements=()):
+ super_call = lambda: super(Doctor, self).write(
+ outs, windows=windows, replacements=replacements)
+
+ if windows:
+ outs.write('if "%PW_ACTIVATE_SKIP_CHECKS%"=="" (\n')
+ super_call()
+ outs.write(') else (\n')
+ outs.write('echo Skipping environment check because '
+ 'PW_ACTIVATE_SKIP_CHECKS is set\n')
+ outs.write(')\n')
+ else:
+ outs.write('if [ -z "$PW_ACTIVATE_SKIP_CHECKS" ]; then\n')
+ super_call()
+ outs.write('else\n')
+ outs.write('echo Skipping environment check because '
+ 'PW_ACTIVATE_SKIP_CHECKS is set\n')
+ outs.write('fi\n')
+
+
class BlankLine(_Action):
"""Write a blank line to the init script."""
def write( # pylint: disable=no-self-use
@@ -593,6 +621,10 @@
self._actions.append(Command(command, exit_on_error=exit_on_error))
self._blankline()
+ def doctor(self):
+ """Run 'pw doctor'."""
+ self._actions.append(Doctor())
+
def function(self, name, body):
"""Define a function."""
assert not self._finalized