gclient: Remove annotated_gclient.
Shouldn't be used anymore. Change-Id: I4fc152e7425124d46aa3be12359ed7513f0d3892 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1949407 Reviewed-by: Robbie Iannucci <iannucci@chromium.org> Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>changes/07/1949407/2
parent
240afdb1c4
commit
434f1219fd
@ -1,91 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# Copyright 2013 The Chromium Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
"""Wraps gclient calls with annotated output.
|
|
||||||
|
|
||||||
Note that you will have to use -- to stop option parsing for gclient flags.
|
|
||||||
|
|
||||||
To run `gclient sync --gclientfile=.gclient` and annotate got_v8_revision:
|
|
||||||
`annotated_gclient.py --revision-mapping='{"src/v8": "got_v8_revision"}' --
|
|
||||||
sync --gclientfile=.gclient`
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import contextlib
|
|
||||||
import json
|
|
||||||
import optparse
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
|
||||||
def temp_filename(suffix='', prefix='tmp'):
|
|
||||||
output_fd, output_file = tempfile.mkstemp(suffix=suffix, prefix=prefix)
|
|
||||||
os.close(output_fd)
|
|
||||||
|
|
||||||
yield output_file
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.remove(output_file)
|
|
||||||
except OSError as e:
|
|
||||||
print('Error cleaning up temp file %s: %s' % (output_file, e))
|
|
||||||
|
|
||||||
|
|
||||||
def parse_got_revision(filename, revision_mapping):
|
|
||||||
result = {}
|
|
||||||
with open(filename) as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
for path, info in data['solutions'].items():
|
|
||||||
# gclient json paths always end with a slash
|
|
||||||
path = path.rstrip('/')
|
|
||||||
if path in revision_mapping:
|
|
||||||
propname = revision_mapping[path]
|
|
||||||
result[propname] = info['revision']
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def emit_buildprops(got_revisions):
|
|
||||||
for prop, revision in got_revisions.items():
|
|
||||||
print('@@@SET_BUILD_PROPERTY@%s@%s@@@' % (prop, json.dumps(revision)))
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = optparse.OptionParser(
|
|
||||||
description=('Runs gclient and annotates the output with any '
|
|
||||||
'got_revisions.'))
|
|
||||||
parser.add_option('--revision-mapping', default='{}',
|
|
||||||
help='json dict of directory-to-property mappings.')
|
|
||||||
parser.add_option('--suffix', default='gclient',
|
|
||||||
help='tempfile suffix')
|
|
||||||
opts, args = parser.parse_args()
|
|
||||||
|
|
||||||
revision_mapping = json.loads(opts.revision_mapping)
|
|
||||||
|
|
||||||
if not args:
|
|
||||||
parser.error('Must provide arguments to gclient.')
|
|
||||||
|
|
||||||
if any(a.startswith('--output-json') for a in args):
|
|
||||||
parser.error('Can\'t call annotated_gclient with --output-json.')
|
|
||||||
|
|
||||||
with temp_filename(opts.suffix) as f:
|
|
||||||
cmd = ['gclient']
|
|
||||||
cmd.extend(args)
|
|
||||||
cmd.extend(['--output-json', f])
|
|
||||||
p = subprocess.Popen(cmd)
|
|
||||||
p.wait()
|
|
||||||
|
|
||||||
if p.returncode == 0:
|
|
||||||
revisions = parse_got_revision(f, revision_mapping)
|
|
||||||
emit_buildprops(revisions)
|
|
||||||
return p.returncode
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main())
|
|
Loading…
Reference in New Issue