#!/usr/bin/env python3
# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
"""Tool for listing Dart source files.

If the first argument is 'relative', the script produces paths relative to the
current working directory. If the first argument is 'absolute', the script
produces absolute paths.

Usage:
  python3 tools/list_dart_files.py {absolute, relative} <directory> <pattern>
"""

import os
import re
import sys


def main(argv):
    mode = argv[1]
    if mode not in ['absolute', 'relative']:
        raise Exception("First argument must be 'absolute' or 'relative'")
    directory = argv[2]
    if mode in 'absolute' and not os.path.isabs(directory):
        directory = os.path.realpath(directory)

    pattern = None
    if len(argv) > 3:
        pattern = re.compile(argv[3])

    for root, directories, files in os.walk(directory):
        # We only care about actual source files, not generated code or tests.
        for skip_dir in ['.git', 'gen', 'test']:
            if skip_dir in directories:
                directories.remove(skip_dir)

        # If we are looking at the root directory, filter the immediate
        # subdirectories by the given pattern.
        if pattern and root == directory:
            directories[:] = filter(pattern.match, directories)

        for filename in files:
            if filename.endswith(
                    '.dart') and not filename.endswith('_test.dart'):
                if mode in 'absolute':
                    fullname = os.path.join(directory, root, filename)
                else:
                    fullname = os.path.relpath(os.path.join(root, filename))
                fullname = fullname.replace(os.sep, '/')
                print(fullname)


if __name__ == '__main__':
    sys.exit(main(sys.argv))
