Add a --batch mode to `git-cl owners`.

This allows a script to generate a sufficient list of owners (and 
reviewers) for a given CL. Unlike the owners presubmit check and 
the normal, interactive mode of `git-cl owners`, we do not print 
the comments associated with an owner for each file, since 
presumably a script doesn't care about them (and the comments
aren't in a particularly machine-parsable form, anyway).

This could be used by the WPT import scripts, and presumably
by roll scripts and other such things.

I didn't add a test for this because there appears to be no good
mechanism for testing top-level CMD functions in git_cl that 
didn't end up just repeating the code mock-for-mock :(.

R: phajdan.jr@chromium.org
Change-Id: I3a9e6d117d6f4bafe938b07b028f119835c3e575
Reviewed-on: https://chromium-review.googlesource.com/648653
Reviewed-by: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
Commit-Queue: Dirk Pranke <dpranke@chromium.org>
diff --git a/git_cl.py b/git_cl.py
index 58d362e..8f55a52 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -5752,11 +5752,15 @@
 
 
 def CMDowners(parser, args):
-  """Interactively finds potential owners for reviewing."""
+  """Finds potential owners for reviewing."""
   parser.add_option(
       '--no-color',
       action='store_true',
       help='Use this option to disable color output')
+  parser.add_option(
+      '--batch',
+      action='store_true',
+      help='Do not run interactively, just suggest some')
   auth.add_auth_options(parser)
   options, args = parser.parse_args(args)
   auth_config = auth.extract_auth_config_from_options(options)
@@ -5774,9 +5778,15 @@
     base_branch = cl.GetCommonAncestorWithUpstream()
 
   change = cl.GetChange(base_branch, None)
+  affected_files = [f.LocalPath() for f in change.AffectedFiles()]
+
+  if options.batch:
+    db = owners.Database(change.RepositoryRoot(), file, os.path)
+    print('\n'.join(db.reviewers_for(affected_files, author)))
+    return 0
+
   return owners_finder.OwnersFinder(
-      [f.LocalPath() for f in
-          cl.GetChange(base_branch, None).AffectedFiles()],
+      affected_files,
       change.RepositoryRoot(),
       author, fopen=file, os_path=os.path,
       disable_color=options.no_color,