| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """ |
| Recipe to take a jiri diff of two jiri project revisions. |
| """ |
| |
| import json |
| |
| from recipe_engine.recipe_api import Property |
| |
| DEPS = [ |
| 'fuchsia/jiri', |
| 'recipe_engine/context', |
| 'recipe_engine/path', |
| 'recipe_engine/properties', |
| 'recipe_engine/step', |
| ] |
| |
| PROPERTIES = { |
| 'revision_1': |
| Property( |
| kind=str, |
| help='Revision 1 as commit SHA1.', |
| ), |
| 'revision_2': |
| Property( |
| kind=str, |
| help='Revision 2 as commit SHA1.', |
| ), |
| 'project': |
| Property( |
| kind=str, |
| help='Jiri project to use.', |
| ), |
| 'manifest': |
| Property( |
| kind=str, |
| help='Jiri manifest to use.', |
| ), |
| 'remote': |
| Property( |
| kind=str, |
| help='Remote manifest repository SSO.', |
| ), |
| 'max_cls': |
| Property( |
| kind=int, |
| default=1000, |
| help='Max number of CLs to display per project.', |
| ) |
| } |
| |
| |
| def RunSteps(api, revision_1, revision_2, project, manifest, remote, max_cls): |
| snapshot_file_1 = api.path.mkstemp() |
| snapshot_file_2 = api.path.mkstemp() |
| |
| # Checkout at both revisions, taking a snapshot each time. |
| with api.context(cwd=api.path.mkdtemp()): |
| api.jiri.init() |
| for revision, snapshot_file in ( |
| (revision_1, snapshot_file_1), |
| (revision_2, snapshot_file_2), |
| ): |
| api.jiri.import_manifest( |
| manifest=manifest, |
| remote=remote, |
| name=project, |
| revision=revision, |
| overwrite=True, |
| ) |
| api.jiri.update( |
| fetch_packages=False, |
| run_hooks=False, |
| ) |
| api.jiri.snapshot(snapshot_file=snapshot_file) |
| |
| diff = api.jiri.diff( |
| snapshot_file_1=snapshot_file_1, |
| snapshot_file_2=snapshot_file_2, |
| max_cls=max_cls, |
| ) |
| # Display diff on build UI. |
| diff_logs = api.step.active_result.presentation.logs |
| diff_logs['diff'] = diff.split('\n') |
| |
| |
| def GenTests(api): |
| yield (api.test('basic') + api.properties( |
| revision_1='foo', |
| revision_2='bar', |
| project='project', |
| manifest='test/manifest/path', |
| remote='sso://fuchsia/project', |
| )) |