blob: a1122b2d037415a64f3a6ed0fa865d5723dfdba1 [file] [log] [blame]
#!/usr/bin/env python
# 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.
import argparse
import json
import sys
def main():
parser = argparse.ArgumentParser()
# TODO(DX-685): make this argument required.
help='Path to the golden API file',
help='Path to the SDK manifest',
help='Path to the API file to compute',
help='Whether API changes should only cause warnings',
args = parser.parse_args()
if not args.reference:
# Nothing to do.
with open(args.updated, 'w') as updated_file:
updated_file.write('No API verification for this SDK :/')
return 0
with open(args.manifest, 'r') as manifest_file:
manifest = json.load(manifest_file)
ids = map(lambda a: a['id'], manifest['atoms'])
# Ignore images which are very architecture-dependent.
# TODO(DX-981): remove this exception when obsolete.
ids = filter(lambda i: not i.startswith('sdk://images'), ids)
with open(args.updated, 'w') as updated_file:
with open(args.reference, 'r') as reference_file:
old_ids = map(lambda l: l.strip(), reference_file.readlines())
new_id_set = set(ids)
old_id_set = set(old_ids)
added_ids = new_id_set - old_id_set
removed_ids = old_id_set - new_id_set
if added_ids:
print('Elements added to SDK:')
for id in sorted(added_ids):
print(' - %s' % id)
if removed_ids:
print('Elements removed from SDK:')
for id in sorted(removed_ids):
print(' - %s' % id)
if removed_ids or added_ids:
type = 'Warning' if args.warn else 'Error'
print('%s: SDK contents have changed!' % type)
print('Please acknowledge this change by running:')
print(' cp ' + args.updated + ' ' + args.reference)
if not args.warn:
return 1
return 0
if __name__ == '__main__':