Keep a set of all visited inodes, and prevent recursing into a symlink
to an already visited inode.
Test: m -j
Test: compare `build/tools/findleaves.py --prune=.repo --prune=.git --mindepth=2 --dir=. Android.mk` before and after
Change-Id: Ied14c40d3066ef9f8e8a2b1535f56f7bbbbd0ab6
findleaves.py needs to be able to search multiple directories for
multiple filenames (Android.bp and Android.mk). Add support for a new
--dir= option to specify one or more directories to search, and then
treat any remaining options as filenames. If no directories are
specified, fall back to treating only the last option as a filename and
the rest as directories.
Change-Id: Ie879facd49192c6b4fafae070ad00eb21b1faa32
If we replace the project directories with symlinks to the actual
directories, everything should build fine. Unfortunately, without
this fix, it does not.
Change-Id: Id19fef9696d0f599a7b3a14b6a8fc10ae857f9c7
Commit d36e945 changed findleaves.py to sort the output files so that
the order is deterministic and won't cause spurious build errors when
files happen to be listed (and hence read) in different order on
e.g. add/remove the makefiles.
This correction broke after commit 4820a94 because the conversion to
a set with set() in order to remove duplicates came after sort() and
potentially altered the order of the elements.
This commit fixes makes sure findleaves.py is guaranteed to return
a sorted filename list without duplicates.
Change-Id: Ifd96d04d45641fe43d4cc4739f78a2d4d25cc212
This cuts the make startup time by about 30 seconds. Python is faster
than bash in this case, and also we can now supply multiple directories
to prune, and skip the .repo directory, which is, uh, big.
This is from my mac laptop:
$ time build/tools/findleaves.sh --prune="./out" . Android.mk > /dev/null
real 0m29.186s
user 0m0.550s
sys 0m5.897s
$ time build/tools/findleaves.py --prune="./out" . Android.mk > /dev/null
real 0m4.701s
user 0m0.645s
sys 0m1.294s
$ time build/tools/findleaves.py --prune="./out" --prune="./.repo" . Android.mk > /dev/null
real 0m0.176s
user 0m0.094s
sys 0m0.080s