diff --git a/tools/findleaves.py b/tools/findleaves.py index 3a9e5084e2..72cc02456b 100755 --- a/tools/findleaves.py +++ b/tools/findleaves.py @@ -23,7 +23,7 @@ import os import sys -def perform_find(mindepth, prune, dirlist, filename): +def perform_find(mindepth, prune, dirlist, filenames): result = [] pruneleaves = set(map(lambda x: os.path.split(x)[1], prune)) for rootdir in dirlist: @@ -48,19 +48,24 @@ def perform_find(mindepth, prune, dirlist, filename): if depth < mindepth: continue # match - if filename in files: - result.append(os.path.join(root, filename)) - del dirs[:] + for filename in filenames: + if filename in files: + result.append(os.path.join(root, filename)) + del dirs[:] return result def usage(): - sys.stderr.write("""Usage: %(progName)s [] + sys.stderr.write("""Usage: %(progName)s [] [--dir=] Options: --mindepth= Both behave in the same way as their find(1) equivalents. --prune= Avoids returning results from inside any directory called (e.g., "*/out/*"). May be used multiple times. + --dir= + Add a directory to search. May be repeated multiple times. For backwards + compatibility, if no --dir argument is provided then all but the last entry + in are treated as directories. """ % { "progName": os.path.split(sys.argv[0])[1], }) @@ -69,6 +74,7 @@ Options: def main(argv): mindepth = -1 prune = [] + dirlist = [] i=1 while i2 and argv[i][0:2] == "--": arg = argv[i] @@ -82,14 +88,24 @@ def main(argv): if len(p) == 0: usage() prune.append(p) + elif arg.startswith("--dir="): + d = arg[len("--dir="):] + if len(p) == 0: + usage() + dirlist.append(d) else: usage() i += 1 - if len(argv)-i < 2: # need both and - usage() - dirlist = argv[i:-1] - filename = argv[-1] - results = list(set(perform_find(mindepth, prune, dirlist, filename))) + if len(dirlist) == 0: # backwards compatibility + if len(argv)-i < 2: # need both and + usage() + dirlist = argv[i:-1] + filenames = [argv[-1]] + else: + if len(argv)-i < 1: # need + usage() + filenames = argv[i:] + results = list(set(perform_find(mindepth, prune, dirlist, filenames))) results.sort() for r in results: print r