aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java
new file mode 100644
index 0000000000..b45e9cd65a
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java
@@ -0,0 +1,77 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.actions;
+
+import com.google.protobuf.ByteString;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
+
+/**
+ * The interface for Action inputs metadata (Digest and size).
+ *
+ * NOTE: Implementations must be thread safe.
+ */
+@ThreadSafe
+public interface ActionInputFileCache {
+ /**
+ * Returns digest for the given artifact. This digest is current as of some time t >= the start of
+ * the present build. If the artifact is an output of an action that already executed at time p,
+ * then t >= p. Aside from these properties, t can be any value and may vary arbitrarily across
+ * calls.
+ *
+ * @param input the input to retrieve the digest for
+ * @return the artifact's digest or null if digest cannot be obtained (due to artifact
+ * non-existence, lookup errors, or any other reason)
+ *
+ * @throws DigestOfDirectoryException in case {@code input} is a directory.
+ * @throws IOException If the file cannot be digested.
+ *
+ */
+ @Nullable
+ ByteString getDigest(ActionInput input) throws IOException;
+
+ /**
+ * Retrieve the size of the file at the given path. Will usually return 0 on failure instead of
+ * throwing an IOException. Returns 0 for files inaccessible to user, but available to the
+ * execution environment.
+ *
+ * @param input the input.
+ * @return the file size in bytes.
+ * @throws IOException on failure.
+ */
+ long getSizeInBytes(ActionInput input) throws IOException;
+
+ /**
+ * Checks if the file is available locally, based on the assumption that previous operations on
+ * the ActionInputFileCache would have created a cache entry for it.
+ *
+ * @param digest the digest to lookup.
+ * @return true if the specified digest is backed by a locally-readable file, false otherwise
+ */
+ boolean contentsAvailableLocally(ByteString digest);
+
+ /**
+ * Concrete subclasses must implement this to provide a mapping from digest to file path,
+ * based on files previously seen as inputs.
+ *
+ * @param digest the digest.
+ * @return a File path.
+ */
+ @Nullable
+ File getFileFromDigest(ByteString digest) throws IOException;
+}