diff options
author | Michajlo Matijkiw <michajlo@google.com> | 2016-01-19 21:17:45 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2016-01-20 11:35:41 +0000 |
commit | 528957e26a957da7abcb8a3b3bcfe7e7f6428687 (patch) | |
tree | 5a5bcc75d2428151a203783678fbb1b2172c6295 /src/main/java/com/google/devtools | |
parent | 085c1a1d95dd80f26f4a46c3d4d486427bb24d83 (diff) |
Support unreadable files
--
MOS_MIGRATED_REVID=112507181
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java | 9 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java | 19 |
2 files changed, 23 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java index 8e897fb078..ae5231a95e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java @@ -106,7 +106,7 @@ class ArtifactFunction implements SkyFunction { return null; } if (!fileValue.exists()) { - if (allowedMissingInputs.apply(((RootedPath) fileSkyKey.argument()).getRelativePath())) { + if (isAllowedMissingInput(fileSkyKey)) { return FileArtifactValue.MISSING_FILE_MARKER; } else { return missingInputFile(artifact, mandatory, null, env.getListener()); @@ -115,10 +115,17 @@ class ArtifactFunction implements SkyFunction { try { return FileArtifactValue.create(artifact, fileValue); } catch (IOException e) { + if (isAllowedMissingInput(fileSkyKey)) { + return FileArtifactValue.MISSING_FILE_MARKER; + } throw makeMissingInputFileExn(artifact, mandatory, e, env.getListener()); } } + private boolean isAllowedMissingInput(SkyKey fileSkyKey) { + return allowedMissingInputs.apply(((RootedPath) fileSkyKey.argument()).getRelativePath()); + } + private static ArtifactValue missingInputFile(Artifact artifact, boolean mandatory, Exception failure, EventHandler reporter) throws MissingInputFileException { if (!mandatory) { 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; |