diff options
author | Nathan Harmata <nharmata@google.com> | 2015-08-12 21:10:56 +0000 |
---|---|---|
committer | Florian Weikert <fwe@google.com> | 2015-08-13 14:01:33 +0000 |
commit | 2ff0a6d34095c80999b08ca651dd9430ddc412ac (patch) | |
tree | f2e04bfcfdcd61059216dd94352561e408046043 /src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java | |
parent | 97615f456b0b27003e8b236a0bb74011e484e551 (diff) |
When we have enough information to determine that a file didn't change type, don't unnecessarily invalidate DirectoryListingStateValues.
--
MOS_MIGRATED_REVID=100511935
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java index 87b9748a8e..9f5dc994ee 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java @@ -32,6 +32,8 @@ import java.util.Comparator; import java.util.Iterator; import java.util.Objects; +import javax.annotation.Nullable; + /** * Encapsulates the filesystem operations needed to get the directory entries of a directory. * @@ -65,7 +67,7 @@ final class DirectoryListingStateValue implements SkyValue { * * <p>Symlinks are not expanded. */ - public Iterable<Dirent> getDirents() { + public Dirents getDirents() { return compactSortedDirents; } @@ -87,7 +89,7 @@ final class DirectoryListingStateValue implements SkyValue { } /** A space-efficient, sorted, immutable dirent structure. */ - private static class CompactSortedDirents implements Iterable<Dirent>, Serializable { + private static class CompactSortedDirents implements Dirents, Serializable { private final String[] names; private final BitSet packedTypes; @@ -138,6 +140,13 @@ final class DirectoryListingStateValue implements SkyValue { } @Override + @Nullable + public Dirent maybeGetDirent(String baseName) { + int pos = Arrays.binarySearch(names, baseName); + return pos < 0 ? null : direntAt(pos); + } + + @Override public Iterator<Dirent> iterator() { return new Iterator<Dirent>() { |