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)