80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
# Copyright (C) 2018 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
""" Script to list all files in a directory filtering by pattern.
|
|
|
|
Do NOT use this script to pull in sources for GN targets. Globbing inputs is
|
|
a bad idea, as it plays very badly with git leaving untracked files around. This
|
|
script should be used only for cases where false positives won't affect the
|
|
output of the build but just cause spurious re-runs (e.g. as input section of
|
|
an "action" target).
|
|
"""
|
|
from __future__ import print_function
|
|
import argparse
|
|
import fnmatch
|
|
import os
|
|
import sys
|
|
|
|
|
|
def make_parent_dirs(file_path):
|
|
directory = os.path.dirname(file_path)
|
|
if not os.path.exists(directory):
|
|
os.makedirs(directory)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--filter', default=[], action='append')
|
|
parser.add_argument('--exclude', default=[], action='append')
|
|
parser.add_argument('--deps', default=None)
|
|
parser.add_argument('--output', default=None)
|
|
parser.add_argument('--root', required=True)
|
|
args = parser.parse_args()
|
|
|
|
if args.output:
|
|
make_parent_dirs(args.output)
|
|
fout = open(args.output, 'w')
|
|
else:
|
|
fout = sys.stdout
|
|
|
|
def writepath(path):
|
|
if args.deps:
|
|
path = '\t' + path
|
|
print(path, file=fout)
|
|
|
|
root = args.root
|
|
if not root.endswith('/'):
|
|
root += '/'
|
|
if not os.path.exists(root):
|
|
return 0
|
|
|
|
if args.deps:
|
|
print(args.deps + ':', file=fout)
|
|
for pardir, dirs, files in os.walk(root, topdown=True):
|
|
assert pardir.startswith(root)
|
|
relpar = pardir[len(root):]
|
|
dirs[:] = [d for d in dirs if os.path.join(relpar, d) not in args.exclude]
|
|
for fname in files:
|
|
fpath = os.path.join(pardir, fname)
|
|
match = len(args.filter) == 0
|
|
for filter in args.filter:
|
|
if fnmatch.fnmatch(fpath, filter):
|
|
match = True
|
|
break
|
|
if match:
|
|
writepath(fpath)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|