Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Unified Diff: gclient.py

Issue 23753008: Add json output for gclient. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix nits Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gclient_scm.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient.py
diff --git a/gclient.py b/gclient.py
index 407b9ad4e99f1efd3f31270f3695e18f458b1fcb..506439630438004a437d34037d3427a8b12d3486 100755
--- a/gclient.py
+++ b/gclient.py
@@ -73,6 +73,7 @@
__version__ = '0.7'
import copy
+import json
import logging
import optparse
import os
@@ -301,6 +302,9 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
# This is the scm used to checkout self.url. It may be used by dependencies
# to get the datetime of the revision we checked out.
self._used_scm = None
+ # The actual revision we ended up getting, or None if that information is
+ # unavailable
+ self._got_revision = None
if not self.name and self.parent:
raise gclient_utils.Error('Dependency without name')
@@ -624,7 +628,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
command, options, parsed_url, self.parent.name, revision_overrides)
self._used_scm = gclient_scm.CreateSCM(
parsed_url, self.root.root_dir, self.name)
- self._used_scm.RunCommand(command, options, args, file_list)
+ self._got_revision = self._used_scm.RunCommand(command, options, args,
+ file_list)
if file_list:
file_list = [os.path.join(self.name, f.strip()) for f in file_list]
@@ -855,6 +860,11 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
return self._used_scm
@property
+ @gclient_utils.lockedmethod
+ def got_revision(self):
+ return self._got_revision
+
+ @property
def file_list_and_children(self):
result = list(self.file_list)
for d in self.dependencies:
@@ -1523,6 +1533,21 @@ def CMDstatus(parser, args):
all modules (useful for recovering files deleted from local copy)
gclient sync --revision src@31000
update src directory to r31000
+
+JSON output format:
+If the --output-json option is specified, the following document structure will
+be emitted to the provided file. 'null' entries may occur for subprojects which
+are present in the gclient solution, but were not processed (due to custom_deps,
+os_deps, etc.)
+
+{
+ "solutions" : {
+ "<name>": { # <name> is the posix-normalized path to the solution.
+ "revision": [<svn rev int>|<git id hex string>|null],
+ "scm": ["svn"|"git"|null],
+ }
+ }
+}
""")
def CMDsync(parser, args):
"""Checkout/update all modules."""
@@ -1573,6 +1598,9 @@ def CMDsync(parser, args):
'actual HEAD revision from the repository')
parser.add_option('--upstream', action='store_true',
help='Make repo state match upstream branch.')
+ parser.add_option('--output-json',
+ help='Output a json document to this path containing '
+ 'summary information about the sync.')
(options, args) = parser.parse_args(args)
client = GClient.LoadCurrentConfig(options)
@@ -1587,7 +1615,18 @@ def CMDsync(parser, args):
# Print out the .gclient file. This is longer than if we just printed the
# client dict, but more legible, and it might contain helpful comments.
print(client.config_content)
- return client.RunOnDeps('update', args)
+ ret = client.RunOnDeps('update', args)
+ if options.output_json:
+ slns = {}
+ for d in client.subtree(True):
+ normed = d.name.replace('\\', '/').rstrip('/') + '/'
+ slns[normed] = {
+ 'revision': d.got_revision,
+ 'scm': d.used_scm.name if d.used_scm else None,
+ }
+ with open(options.output_json, 'wb') as f:
+ json.dump({'solutions': slns}, f)
+ return ret
CMDupdate = CMDsync
« no previous file with comments | « no previous file | gclient_scm.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698