# Copyright 2016 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.

import os
import json

COMPONENTS_DIR = 'components'
COMPONENT_SUMMARY =\
"""Name: %(name)s
Version: %(version)s
Repository: %(repository)s
Tag: %(tag)s
Revision: %(revision)s
Tree link: %(tree)s
"""

for entry in sorted(os.listdir(COMPONENTS_DIR)):
  component_path = os.path.join(COMPONENTS_DIR, entry)
  if not os.path.isdir(component_path):
    continue
  bower_path = os.path.join(component_path, '.bower.json')
  if not os.path.isfile(bower_path):
    raise Exception('%s is not a file.' % bower_path)
  with open(bower_path) as stream:
    info = json.load(stream)
  repository = info['_source']
  tree = 'https%s/tree/%s' % (repository[3:-4], info['_resolution']['tag'])
  print COMPONENT_SUMMARY % {
    'name': info['name'],
    'version': info['version'],
    'repository': repository,
    'tag': info['_resolution']['tag'],
    'revision': info['_resolution']['commit'],
    'tree': tree
  }
