|  | #!/usr/bin/env python | 
|  | # 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: | 
|  | python 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)) |