aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2015-08-12 21:10:56 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-08-13 14:01:33 +0000
commit2ff0a6d34095c80999b08ca651dd9430ddc412ac (patch)
treef2e04bfcfdcd61059216dd94352561e408046043 /src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
parent97615f456b0b27003e8b236a0bb74011e484e551 (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.java13
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>() {