From d08b27fa9701fecfdb69e1b0d1ac2459efc2129b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 25 Feb 2015 16:45:20 +0100 Subject: Update from Google. -- MOE_MIGRATED_REVID=85702957 --- .../build/lib/actions/ActionInputFileCache.java | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java (limited to 'src/main/java/com/google/devtools/build/lib/actions/ActionInputFileCache.java') 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; +} -- cgit v1.2.3