#!/usr/bin/env python3
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Script to generate yaml file based on FILES.cfg."""

import argparse
import os


def _ParseFilesCfg(files_file):
    """Return the dictionary of archive file info read from the given file."""
    if not os.path.exists(files_file):
        raise IOError('Files list does not exist (%s).' % files_file)
    exec_globals = {'__builtins__': None}

    exec(open(files_file).read(), exec_globals)
    return exec_globals['FILES']


def _Process(args):
    yaml_content = (
        'package: '
        + args.package
        + '\ndescription: '
        + args.description
        + '\ninstall_mode: '
        + args.install_mode
        + '\ndata:\n'
    )
    fileobj = _ParseFilesCfg(args.files_file)
    for item in fileobj:
        if 'buildtype' in item:
            if args.buildtype not in item['buildtype']:
                continue
        if 'arch' in item:
            if args.arch not in item['arch']:
                continue
        if 'type' in item and item['type'] == 'folder':
            yaml_content += ' - dir: ' + item['filename'] + '\n'
        else:
            yaml_content += ' - file: ' + item['filename'] + '\n'

    with open(args.output_yaml_file, 'w') as f:
        f.write(yaml_content)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--output_yaml_file', help='File to create.')
    parser.add_argument(
        '--package',
        help='The path where the package will be located inside the CIPD\
           repository.',
    )
    parser.add_argument(
        '--description',
        help='Sets the "description" field in CIPD package definition.',
    )
    parser.add_argument(
        '--install_mode', help='String, should be either "symlink" or "copy".'
    )
    parser.add_argument(
        '--files_file', help='FILES.cfg describes what files to include.'
    )
    parser.add_argument('--buildtype', help='buildtype for FILES.cfg.')
    parser.add_argument('--arch', help='arch for FILES.cfg')

    args = parser.parse_args()

    _Process(args)


if __name__ == '__main__':
    main()
