aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
diff options
context:
space:
mode:
authorGravatar Laszlo Csomor <laszlocsomor@google.com>2015-12-07 11:16:52 +0000
committerGravatar David Chen <dzc@google.com>2015-12-07 21:18:05 +0000
commitead999004c4df3f1c2c3f70f11e2d5960d489aa7 (patch)
treeb5086ca5b84abcff56afbc8f8f0962194a2f3f40 /src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
parente9c41c5ad913be2e4fa19f95491a8177cd9dd6f2 (diff)
Refactor: ResolvedFile.getMetadata is now .getMetadataHash.
This is a subtle change that'll go a long way: there's a bug in the handling of directory symlinks (changes in the link target are not picked up) which I'll fix by combining the metadata hashes of all items in the directory, and use that as the directory symlink's metadata hash. -- MOS_MIGRATED_REVID=109564943
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java51
1 files changed, 25 insertions, 26 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
index 8c1ad8470c..cfd2ce0695 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
@@ -269,8 +269,8 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
@Override
@Nullable
- public FileStateValue getMetadata() {
- return metadata;
+ public Integer getMetadataHash() {
+ return metadata == null ? null : Integer.valueOf(metadata.hashCode());
}
@Override
@@ -329,8 +329,8 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
}
@Override
- public FileStateValue getMetadata() {
- return FileStateValue.DIRECTORY_FILE_STATE_NODE;
+ public Integer getMetadataHash() {
+ return Integer.valueOf(FileStateValue.DIRECTORY_FILE_STATE_NODE.hashCode());
}
@Override
@@ -374,7 +374,6 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
private final Symlink symlink;
@Nullable private final FileStateValue metadata;
- /** C'tor for {@link #stripMetadataForTesting()}. */
private DanglingSymlink(Symlink symlink) {
this.symlink = symlink;
this.metadata = null;
@@ -404,8 +403,8 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
@Override
@Nullable
- public FileStateValue getMetadata() {
- return metadata;
+ public Integer getMetadataHash() {
+ return metadata == null ? null : Integer.valueOf(metadata.hashCode());
}
@Override
@@ -490,8 +489,8 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
@Override
@Nullable
- public FileStateValue getMetadata() {
- return metadata;
+ public Integer getMetadataHash() {
+ return metadata == null ? null : Integer.valueOf(metadata.hashCode());
}
@Override
@@ -535,27 +534,27 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
private static final class SymlinkToDirectory implements ResolvedFile {
private final RootedPath path;
- @Nullable private final FileStateValue metadata;
+ @Nullable private final Integer metadataHash;
private final Symlink symlink;
/** C'tor for {@link #stripMetadataForTesting()}. */
private SymlinkToDirectory(RootedPath targetPath, Symlink symlink) {
this.path = Preconditions.checkNotNull(targetPath);
- this.metadata = null;
+ this.metadataHash = null;
this.symlink = symlink;
}
private SymlinkToDirectory(
RootedPath targetPath, RootedPath linkNamePath, PathFragment linkValue) {
this.path = Preconditions.checkNotNull(targetPath);
- this.metadata = null;
+ this.metadataHash = null;
this.symlink = new Symlink(linkNamePath, linkValue);
}
SymlinkToDirectory(RootedPath targetPath, RootedPath linkNamePath,
- PathFragment linkValue, FileStateValue metadata) {
+ PathFragment linkValue, Integer metadataHash) {
this.path = Preconditions.checkNotNull(targetPath);
- this.metadata = Preconditions.checkNotNull(metadata);
+ this.metadataHash = Preconditions.checkNotNull(metadataHash);
this.symlink = new Symlink(linkNamePath, linkValue);
}
@@ -571,8 +570,8 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
@Override
@Nullable
- public FileStateValue getMetadata() {
- return metadata;
+ public Integer getMetadataHash() {
+ return metadataHash;
}
@Override
@@ -584,13 +583,13 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
return false;
}
return this.path.equals(((SymlinkToDirectory) obj).path)
- && Objects.equal(this.metadata, ((SymlinkToDirectory) obj).metadata)
+ && Objects.equal(this.metadataHash, ((SymlinkToDirectory) obj).metadataHash)
&& this.symlink.equals(((SymlinkToDirectory) obj).symlink);
}
@Override
public int hashCode() {
- return Objects.hashCode(path, metadata, symlink);
+ return Objects.hashCode(path, metadataHash, symlink);
}
@Override
@@ -631,8 +630,8 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
}
public static ResolvedFile symlinkToDirectory(RootedPath targetPath,
- RootedPath linkNamePath, PathFragment linkValue, FileStateValue metadata) {
- return new SymlinkToDirectory(targetPath, linkNamePath, linkValue, metadata);
+ RootedPath linkNamePath, PathFragment linkValue, Integer metadataHash) {
+ return new SymlinkToDirectory(targetPath, linkNamePath, linkValue, metadataHash);
}
public static ResolvedFile danglingSymlink(RootedPath linkNamePath, PathFragment linkValue,
@@ -684,16 +683,16 @@ public final class RecursiveFilesystemTraversalValue implements SkyValue {
RootedPath getPath();
/**
- * Associated metadata.
+ * Hash code of associated metadata.
*
- * <p>This field must be stored so that this {@link ResolvedFile} is (also) the function of the
- * stat() of the file, but otherwise it is likely not something the consumer of the
- * {@link ResolvedFile} is directly interested in.
+ * <p>This is usually some hash of the {@link FileStateValue} of the underlying filesystem
+ * entity.
*
- * <p>May only return null if metadata is stripped for tests.
+ * <p>The method only returns null if tests stripped the metadata, or the {@link ResolvedFile}
+ * was created by the {@link ResolvedFileFactoryForTesting}.
*/
@Nullable
- FileStateValue getMetadata();
+ Integer getMetadataHash();
/**
* Returns the path of the Fileset-output symlink relative to the output directory.