Remove special Fileset symlink behaviour.

PiperOrigin-RevId: 679606874
Change-Id: I09445146582d232535a1663551c35ee81ad3d86f
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
index 743e574..83e4bf1 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
@@ -24,7 +24,6 @@
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.RootedPath;
-import java.util.Locale;
 import java.util.Objects;
 import javax.annotation.Nullable;
 
@@ -37,27 +36,6 @@
  */
 public interface FilesetTraversalParams {
 
-  /** Specifies how symlinks should be treated. */
-  enum SymlinkBehavior {
-    /** Symlinks are treated as regular files (the same as the runfiles output tree). */
-    IGNORE,
-
-    /** Symlinks are copied to the output tree. */
-    COPY,
-
-    /** Symlinks are dereferenced and the underlying file is used for the output tree. */
-    DEREFERENCE;
-
-    public static SymlinkBehavior parse(String value) throws IllegalArgumentException {
-      return valueOf(value.toUpperCase(Locale.ROOT));
-    }
-
-    @Override
-    public String toString() {
-      return super.toString().toLowerCase(Locale.ROOT);
-    }
-  }
-
   /** Desired behavior if the traversal hits a directory with a BUILD file, i.e. a subpackage. */
   enum PackageBoundaryMode {
     /** The traversal should recurse into the directory, optionally reporting a warning. */
@@ -195,9 +173,6 @@
     /** Returns true if the root points to a generated file, symlink or directory. */
     public abstract boolean isGenerated();
 
-    /** Returns the desired behaviour for handling symlinks */
-    public abstract SymlinkBehavior getSymlinkBehavior();
-
     /** Returns the desired behavior when the traversal hits a subpackage. */
     public abstract PackageBoundaryMode getPackageBoundaryMode();
 
@@ -219,24 +194,17 @@
       fp.addBoolean(isStrictFilesetOutput());
       fp.addBoolean(permitDirectories());
       getPackageBoundaryMode().fingerprint(fp);
-      fp.addInt(getSymlinkBehavior().ordinal());
       return fp.digestAndReset();
     }
 
     static DirectTraversal getDirectTraversal(
         DirectTraversalRoot root,
-        SymlinkBehavior symlinkBehavior,
         PackageBoundaryMode packageBoundaryMode,
         boolean isStrictFilesetOutput,
         boolean permitSourceDirectories,
         boolean isGenerated) {
       return new AutoValue_FilesetTraversalParams_DirectTraversal(
-          root,
-          isGenerated,
-          symlinkBehavior,
-          packageBoundaryMode,
-          isStrictFilesetOutput,
-          permitSourceDirectories);
+          root, isGenerated, packageBoundaryMode, isStrictFilesetOutput, permitSourceDirectories);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java
index eb2af99..3c42c89 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java
@@ -19,7 +19,6 @@
 import com.google.common.collect.Ordering;
 import com.google.devtools.build.lib.actions.FilesetTraversalParams.DirectTraversalRoot;
 import com.google.devtools.build.lib.actions.FilesetTraversalParams.PackageBoundaryMode;
-import com.google.devtools.build.lib.actions.FilesetTraversalParams.SymlinkBehavior;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -39,7 +38,6 @@
    *     directory or a symlink to one then it'll be traversed as one
    * @param destPath path in the Fileset's output directory that will be the name of this file's
    *     respective symlink there, or the root of files found (in case this is a directory)
-   * @param symlinkBehaviorMode what to do with symlinks
    * @param pkgBoundaryMode what to do when the traversal hits a subdirectory that is also a
    * @param strictFilesetOutput whether Fileset assumes that output Artifacts are regular files.
    */
@@ -47,7 +45,6 @@
       Label ownerLabel,
       Artifact fileToTraverse,
       PathFragment destPath,
-      SymlinkBehavior symlinkBehaviorMode,
       PackageBoundaryMode pkgBoundaryMode,
       boolean strictFilesetOutput,
       boolean permitDirectories) {
@@ -56,7 +53,6 @@
         DirectTraversalRoot.forFileOrDirectory(fileToTraverse),
         destPath,
         null,
-        symlinkBehaviorMode,
         pkgBoundaryMode,
         strictFilesetOutput,
         permitDirectories,
@@ -121,19 +117,13 @@
         DirectTraversalRoot root,
         PathFragment destPath,
         @Nullable Set<String> excludes,
-        SymlinkBehavior symlinkBehaviorMode,
         PackageBoundaryMode pkgBoundaryMode,
         boolean strictFilesetOutput,
         boolean permitDirectories,
         boolean isGenerated) {
       DirectTraversal traversal =
           DirectTraversal.getDirectTraversal(
-              root,
-              symlinkBehaviorMode,
-              pkgBoundaryMode,
-              strictFilesetOutput,
-              permitDirectories,
-              isGenerated);
+              root, pkgBoundaryMode, strictFilesetOutput, permitDirectories, isGenerated);
       return new AutoValue_FilesetTraversalParamsFactory_DirectoryTraversalParams(
           ownerLabelForErrorMessages, destPath, getOrderedExcludes(excludes), traversal);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java
index 3f5b297..848846f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java
@@ -24,7 +24,6 @@
 import com.google.devtools.build.lib.actions.FilesetTraversalParams;
 import com.google.devtools.build.lib.actions.FilesetTraversalParams.DirectTraversal;
 import com.google.devtools.build.lib.actions.HasDigest;
-import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalFunction.DanglingSymlinkException;
 import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalFunction.RecursiveFilesystemTraversalException;
 import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile;
 import com.google.devtools.build.lib.vfs.Path;
@@ -177,23 +176,7 @@
         continue;
       }
 
-      PathFragment targetName;
-      try {
-        switch (direct.getSymlinkBehavior()) {
-          case COPY:
-            targetName = f.getTargetInSymlinkTree(false);
-            break;
-          case DEREFERENCE:
-            targetName = f.getTargetInSymlinkTree(true);
-            break;
-          default:
-            targetName = f.getPath().asPath().asFragment();
-            break;
-        }
-      } catch (DanglingSymlinkException e) {
-        throw new FilesetEntryFunctionException(e);
-      }
-
+      PathFragment targetName = f.getPath().asPath().asFragment();
       maybeStoreSymlink(
           linkName,
           targetName,
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 b09b95f..72a1aba 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
@@ -20,7 +20,6 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalFunction.DanglingSymlinkException;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyValue;
@@ -326,11 +325,6 @@
     public PathFragment getNameInSymlinkTree() {
       return path.getRootRelativePath();
     }
-
-    @Override
-    public PathFragment getTargetInSymlinkTree(boolean followSymlinks) {
-      return path.asPath().asFragment();
-    }
   }
 
   private static final class Directory implements ResolvedFile {
@@ -380,11 +374,6 @@
     public PathFragment getNameInSymlinkTree() {
       return path.getRootRelativePath();
     }
-
-    @Override
-    public PathFragment getTargetInSymlinkTree(boolean followSymlinks) {
-      return path.asPath().asFragment();
-    }
   }
 
   private static final class DanglingSymlink implements ResolvedFile {
@@ -438,17 +427,6 @@
     public PathFragment getNameInSymlinkTree() {
       return symlink.getNameInSymlinkTree();
     }
-
-    @Override
-    public PathFragment getTargetInSymlinkTree(boolean followSymlinks)
-        throws DanglingSymlinkException {
-      if (followSymlinks) {
-        throw new DanglingSymlinkException(symlink.linkName.asPath().getPathString(),
-            symlink.unresolvedLinkTarget.getPathString());
-      } else {
-        return symlink.unresolvedLinkTarget;
-      }
-    }
   }
 
   private static final class SymlinkToFile implements ResolvedFile {
@@ -508,11 +486,6 @@
     public PathFragment getNameInSymlinkTree() {
       return symlink.getNameInSymlinkTree();
     }
-
-    @Override
-    public PathFragment getTargetInSymlinkTree(boolean followSymlinks) {
-      return followSymlinks ? path.asPath().asFragment() : symlink.unresolvedLinkTarget;
-    }
   }
 
   private static final class SymlinkToDirectory implements ResolvedFile {
@@ -572,11 +545,6 @@
     public PathFragment getNameInSymlinkTree() {
       return symlink.getNameInSymlinkTree();
     }
-
-    @Override
-    public PathFragment getTargetInSymlinkTree(boolean followSymlinks) {
-      return followSymlinks ? path.asPath().asFragment() : symlink.unresolvedLinkTarget;
-    }
   }
 
   static final class ResolvedFileFactory {
@@ -639,15 +607,6 @@
      * should have necessary prefixes stripped (if any).
      */
     PathFragment getNameInSymlinkTree();
-  
-
-    /**
-     * Returns the path of the symlink target.
-     *
-     * @throws DanglingSymlinkException if the target cannot be resolved because the symlink is
-     *     dangling
-     */
-    PathFragment getTargetInSymlinkTree(boolean followSymlinks) throws DanglingSymlinkException;
   }
 
   @Override