diff options
author | Ola Rozenfeld <olaola@google.com> | 2016-11-17 20:14:56 +0000 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2016-11-18 10:54:32 +0000 |
commit | 39dbc9805f9d60acc9a98685826d2a5bb2dd0908 (patch) | |
tree | b2a51fcbe5ab211ff2efc02fd4a8e95933fa89ec /src/main/java/com/google/devtools/build/lib/vfs/Path.java | |
parent | bede7b47d88c3892c47382ed39911117e48adc70 (diff) |
Adding an option to set the digest function that everything uses. Minor refactoring: enabling potential fast digest computation of more than one digest function type.
Usage: bazel --host_jvm_args="-Dbazel.DigestFunction=SHA1" build ...
Ugliness: using a system property (a static non-final variable), because the better way to do it (a flag) would result in a much, much larger refactoring.
More ugliness: I have updated the minimal amount of tests. A lot of tests are still relying on the default value of MD5. Ideally, they need to be updated as well.
--
MOS_MIGRATED_REVID=139490836
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/vfs/Path.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/Path.java | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Path.java b/src/main/java/com/google/devtools/build/lib/vfs/Path.java index 6599952541..e039efe74b 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/Path.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/Path.java @@ -19,6 +19,7 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.util.StringCanonicalizer; +import com.google.devtools.build.lib.vfs.FileSystem.HashFunction; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -1039,19 +1040,26 @@ public class Path implements Comparable<Path>, Serializable { } /** - * Returns the type of digest that may be returned by {@link #getFastDigest}, or {@code null} - * if the filesystem doesn't support them. + * Gets a fast digest for the given path, or {@code null} if there isn't one available. The + * digest should be suitable for detecting changes to the file. */ - public String getFastDigestFunctionType() { - return fileSystem.getFastDigestFunctionType(this); + public byte[] getFastDigest() throws IOException { + return fileSystem.getFastDigest(this); } /** * Gets a fast digest for the given path, or {@code null} if there isn't one available. The * digest should be suitable for detecting changes to the file. */ - public byte[] getFastDigest() throws IOException { - return fileSystem.getFastDigest(this); + public byte[] getFastDigest(HashFunction hashFunction) throws IOException { + return fileSystem.getFastDigest(this, hashFunction); + } + + /** + * Returns whether the given digest is a valid digest for the default system digest function. + */ + public boolean isValidDigest(byte[] digest) { + return fileSystem.isValidDigest(digest); } /** @@ -1083,6 +1091,28 @@ public class Path implements Comparable<Path>, Serializable { } /** + * Returns the digest of the file denoted by the current path, + * following symbolic links. + * + * @return a new byte array containing the file's digest + * @throws IOException if the digest could not be computed for any reason + */ + public byte[] getDigest() throws IOException { + return fileSystem.getDigest(this); + } + + /** + * Returns the digest of the file denoted by the current path and digest function, + * following symbolic links. + * + * @return a new byte array containing the file's digest + * @throws IOException if the digest could not be computed for any reason + */ + public byte[] getDigest(HashFunction hashFunction) throws IOException { + return fileSystem.getDigest(this, hashFunction); + } + + /** * Opens the file denoted by this path, following symbolic links, for reading, * and returns an input stream to it. * |