#!/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))
