parallel_emerge: Add dry run option and log emerge command.

Add the option to do a dryrun to just see what emerge command would
have been run.
Log the command it's about to run at info to make it accessible
but not visible by default.

BUG=b:199404652
TEST=cq, manual

Change-Id: Iaf8b01b05814086c231227484fbf2544f98c48fc
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3195104
Tested-by: Alex Klein <saklein@chromium.org>
Auto-Submit: Alex Klein <saklein@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/scripts/parallel_emerge.py b/scripts/parallel_emerge.py
index 33a7a42..cfa9307 100644
--- a/scripts/parallel_emerge.py
+++ b/scripts/parallel_emerge.py
@@ -13,12 +13,14 @@
 """
 
 import argparse
+import logging
 import multiprocessing
 import os
 
 from chromite.lib import build_target_lib
 from chromite.lib import commandline
 from chromite.lib import constants
+from chromite.lib import cros_build_lib
 
 
 class LookupBoardSysroot(argparse.Action):
@@ -88,6 +90,16 @@
       default=multiprocessing.cpu_count(),
       metavar='PARALLEL_JOBCOUNT',
   )
+  parser.add_argument(
+      '-n',
+      '--dryrun',
+      '--dry-run',
+      dest='dry_run',
+      action='store_true',
+      default=False,
+      help='Print the emerge command that would have been run instead of '
+           'actually running it.',
+  )
 
   parser.add_argument(
       '--retries',
@@ -149,4 +161,11 @@
   for pkg in constants.OTHER_CHROME_PACKAGES:
     emerge_args.append('--rebuild-exclude=%s' % pkg)
 
-  os.execvp('emerge', ['emerge'] + emerge_args)
+  cmd = ['emerge'] + emerge_args
+  cmd_str = cros_build_lib.CmdToStr(cmd)
+  if parsed_args.get('dry_run'):
+    logging.notice('Would have run: %s', cmd_str)
+    return
+
+  logging.info('Running: %s', cmd_str)
+  os.execvp('emerge', cmd)