pw_package: Add info on enabling packages
Add info() method to packages that returns a string describing how to
enable the given package. Use that method at various points in the CLI
(examples below).
$ pw --no-banner package install nanopb
20201125 08:33:47 INF Installing nanopb...
20201125 08:33:47 INF Installing nanopb...done.
20201125 08:33:47 INF Enable with `gn gen out --args='dir_pw_third_party_nanopb="/usr/local/google/home/mohrr/pigweed/pigweed/.environment/packages/nanopb"'`
$ pw --no-banner package status nanopb
20201125 08:33:52 INF nanopb is installed.
20201125 08:33:52 INF Enable with `gn gen out --args='dir_pw_third_party_nanopb="/usr/local/google/home/mohrr/pigweed/pigweed/.environment/packages/nanopb"'`
$ pw --no-banner package list
20201125 08:33:55 INF Installed packages:
20201125 08:33:55 INF nanopb
20201125 08:33:55 INF Enable with `gn gen out --args='dir_pw_third_party_nanopb="/usr/local/google/home/mohrr/pigweed/pigweed/.environment/packages/nanopb"'`
20201125 08:33:55 INF
20201125 08:33:55 INF Available packages:
20201125 08:33:55 INF
Change-Id: Ia3bd47250f353ea37156846ecda8fbcc7aecb0a3
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/26140
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Anthony DiGirolamo <tonymd@google.com>
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
diff --git a/pw_package/py/pw_package/package_manager.py b/pw_package/py/pw_package/package_manager.py
index dd89dba..f22845b 100644
--- a/pw_package/py/pw_package/package_manager.py
+++ b/pw_package/py/pw_package/package_manager.py
@@ -19,7 +19,7 @@
import os
import pathlib
import shutil
-from typing import Dict, List, Tuple
+from typing import Dict, List, Sequence, Tuple
_LOG: logging.Logger = logging.getLogger(__name__)
@@ -59,6 +59,9 @@
This method will be skipped if the directory does not exist.
"""
+ def info(self, path: pathlib.Path) -> Sequence[str]: # pylint: disable=no-self-use
+ """Returns a short string explaining how to enable the package."""
+
_PACKAGES: Dict[str, Package] = {}
@@ -112,6 +115,10 @@
available=tuple(available),
)
+ def info(self, package: str) -> Sequence[str]:
+ pkg = _PACKAGES[package]
+ return pkg.info(self._pkg_root / pkg.name)
+
class PackageManagerCLI:
"""Command-line interface to PackageManager."""
@@ -122,6 +129,8 @@
_LOG.info('Installing %s...', package)
self._mgr.install(package, force)
_LOG.info('Installing %s...done.', package)
+ for line in self._mgr.info(package):
+ _LOG.info('%s', line)
return 0
def remove(self, package: str) -> int:
@@ -133,6 +142,8 @@
def status(self, package: str) -> int:
if self._mgr.status(package):
_LOG.info('%s is installed.', package)
+ for line in self._mgr.info(package):
+ _LOG.info('%s', line)
return 0
_LOG.info('%s is not installed.', package)
@@ -144,6 +155,8 @@
_LOG.info('Installed packages:')
for package in packages.installed:
_LOG.info(' %s', package)
+ for line in self._mgr.info(package):
+ _LOG.info(' %s', line)
_LOG.info('')
_LOG.info('Available packages:')
diff --git a/pw_package/py/pw_package/packages/nanopb.py b/pw_package/py/pw_package/packages/nanopb.py
index 96955bd..800ad29 100644
--- a/pw_package/py/pw_package/packages/nanopb.py
+++ b/pw_package/py/pw_package/packages/nanopb.py
@@ -13,6 +13,9 @@
# the License.
"""Install and check status of nanopb."""
+import pathlib
+from typing import Sequence
+
import pw_package.git_repo
import pw_package.package_manager
@@ -26,5 +29,12 @@
commit='9f57cc871d8a025039019c2d2fde217591f4e30d',
**kwargs)
+ def info(self, path: pathlib.Path) -> Sequence[str]:
+ return (
+ f'{self.name} installed in: {path}',
+ "Enable by running 'gn args out' and adding this line:",
+ f' dir_pw_third_party_nanopb = "{path}"',
+ )
+
pw_package.package_manager.register(NanoPB)