|  | #!/usr/bin/env python | 
|  | # Copyright (c) 2012, 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 files whose name match a pattern. | 
|  |  | 
|  | 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_files.py {absolute, relative} PATTERN DIRECTORY... | 
|  | """ | 
|  |  | 
|  | 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'") | 
|  | pattern = re.compile(argv[2]) | 
|  | for directory in argv[3:]: | 
|  | if mode in 'absolute' and not os.path.isabs(directory): | 
|  | directory = os.path.realpath(directory) | 
|  | for root, directories, files in os.walk(directory): | 
|  | if '.git' in directories: | 
|  | directories.remove('.git') | 
|  | for filename in files: | 
|  | 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, '/') | 
|  | if re.search(pattern, fullname): | 
|  | print fullname | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main(sys.argv)) |