aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
diff options
context:
space:
mode:
authorGravatar Michajlo Matijkiw <michajlo@google.com>2016-01-19 21:17:45 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2016-01-20 11:35:41 +0000
commit528957e26a957da7abcb8a3b3bcfe7e7f6428687 (patch)
tree5a5bcc75d2428151a203783678fbb1b2172c6295 /src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
parent085c1a1d95dd80f26f4a46c3d4d486427bb24d83 (diff)
Support unreadable files
-- MOS_MIGRATED_REVID=112507181
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
index 80b43a7486..459d1caa48 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
@@ -164,11 +164,9 @@ public abstract class FileStateValue implements SkyValue {
@Nullable TimestampGranularityMonitor tsgm)
throws InconsistentFilesystemException {
Preconditions.checkState(stat.isFile(), path);
+
try {
- byte[] digest = stat.getDigest();
- if (digest == null) {
- digest = path.getFastDigest();
- }
+ byte[] digest = tryGetDigest(path, stat);
if (digest == null) {
long mtime = stat.getLastModifiedTime();
// Note that TimestampGranularityMonitor#notifyDependenceOnFileTime is a thread-safe
@@ -193,6 +191,19 @@ public abstract class FileStateValue implements SkyValue {
}
}
+ @Nullable
+ private static byte[] tryGetDigest(Path path, FileStatusWithDigest stat) throws IOException {
+ try {
+ byte[] digest = stat.getDigest();
+ return digest != null ? digest : path.getFastDigest();
+ } catch (IOException ioe) {
+ if (!path.isReadable()) {
+ return null;
+ }
+ throw ioe;
+ }
+ }
+
@Override
public Type getType() {
return Type.REGULAR_FILE;