build/buildutils/finddirs.py
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
permissions -rw-r--r--
v2.2.19_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     1
#
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     2
# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     3
# All rights reserved.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     4
# This component and the accompanying materials are made available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     6
# which accompanies this distribution, and is available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     8
#
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     9
# Initial Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    11
#
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    12
# Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    13
#
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    14
# Description: Find all paths matching pattern
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    15
#
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    16
#! /usr/bin/python
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    17
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    18
import os.path, fnmatch, sys
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    19
from optparse import OptionParser
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    20
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    21
def findDirs(root, pattern, exclude):
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    22
    result = []
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    23
    for path, dirs, files in os.walk(root):
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    24
        if exclude and fnmatch.filter(path.replace("\\", "/").split("/"), exclude):
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    25
            continue
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    26
        result.extend([os.path.join(path, d) 
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    27
                       for d in fnmatch.filter(dirs, pattern)])
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    28
    return result
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    29
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    30
def main():
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    31
    parser = OptionParser()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    32
    parser.add_option(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    33
        "-e", "--exclude", dest = "exclude", 
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    34
        help = "Exclude paths having this pattern as directory component, e.g. tsrc")
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    35
    parser.add_option(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    36
        "-o", "--output", dest = "out", help = "Output file")
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    37
    (options, args) = parser.parse_args()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    38
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    39
    if len(args) != 2:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    40
        print "Usage: %s [options] <root> <pattern>" % sys.argv[0]
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    41
        sys.exit(1)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    42
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    43
    root = args[0]
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    44
    pattern = args[1]
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    45
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    46
    dirs = findDirs(root, pattern, options.exclude)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    47
    output = "\n".join(dirs) + "\n"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    48
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    49
    if options.out:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    50
        open(options.out, "w").write(output)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    51
        print "Wrote %s" % options.out
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    52
    else:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    53
        print output
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    54
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    55
    
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    56
if __name__ == "__main__":
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    57
    main()