aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-02-08 15:32:00 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-08 15:34:11 -0800
commita729b9b4c3d7844a7d44934bf3365f92633c0a60 (patch)
tree6329f4baf5b0b83ea6e3bd577b78b8d49afea9f1 /src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java
parent0ab46f0dd95f735056add4dd8a90a76944b81d00 (diff)
Replace path implementation.
Path and PathFragment have been replaced with String-based implementations. They are pretty similar, but each method is dissimilar enough that I did not feel sharing code was appropriate. A summary of changes: PATH ==== * Subsumes LocalPath (deleted, its tests repurposed) * Use a simple string to back Path * Path instances are no longer interned; Reference equality will no longer work * Always normalized (same as before) * Some operations will now be slower, like instance compares (which were previously just a reference check) * Multiple identical paths will now consume more memory since they are not interned PATH FRAGMENT ============= * Use a simple string to back PathFragment * No more segment arrays with interned strings * Always normalized * Remove isNormalized * Replace some isNormalizied uses with containsUpLevelReferences() to check if path fragments try to escape their scope * To check if user input is normalized, supply static methods on PathFragment to validate the string before constructing a PathFragment * Because PathFragments are always normalized, we have to replace checks for literal "." from PathFragment#getPathString to PathFragment#getSafePathString. The latter returns "." for the empty string. * The previous implementation supported efficient segment semantics (segment count, iterating over segments). This is now expensive since we do longer have a segment array. ARTIFACT ======== * Remove Path instance. It is instead dynamically constructed on request. This is necessary to avoid this CL becoming a memory regression. RELNOTES: None PiperOrigin-RevId: 185062932
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java39
1 files changed, 1 insertions, 38 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java b/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java
index adeb9c847c..b7fd8d2a43 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java
@@ -25,7 +25,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
@@ -90,25 +89,13 @@ public class FileSystemUtils {
return a;
}
- /**
- * Returns a path fragment from a given from-dir to a given to-path. May be
- * either a short relative path "foo/bar", an up'n'over relative path
- * "../../foo/bar" or an absolute path.
- */
- public static PathFragment relativePath(Path fromDir, Path to) {
- if (to.getFileSystem() != fromDir.getFileSystem()) {
- throw new IllegalArgumentException("fromDir and to must be on the same FileSystem");
- }
-
- return relativePath(fromDir.asFragment(), to.asFragment());
- }
/**
* Returns a path fragment from a given from-dir to a given to-path.
*/
public static PathFragment relativePath(PathFragment fromDir, PathFragment to) {
if (to.equals(fromDir)) {
- return PathFragment.create("."); // same dir, just return '.'
+ return PathFragment.EMPTY_FRAGMENT;
}
if (to.startsWith(fromDir)) {
return to.relativeTo(fromDir); // easy case--it's a descendant
@@ -883,30 +870,6 @@ public class FileSystemUtils {
}
/**
- * Dumps diagnostic information about the specified filesystem to {@code out}.
- * This is the implementation of the filesystem part of the 'blaze dump'
- * command. It lives here, rather than in DumpCommand, because it requires
- * privileged access to members of this package.
- *
- * <p>Its results are unspecified and MUST NOT be interpreted programmatically.
- */
- public static void dump(FileSystem fs, final PrintStream out) {
- // Unfortunately there's no "letrec" for anonymous functions so we have to
- // (a) name the function, (b) put it in a box and (c) use List not array
- // because of the generic type. *sigh*.
- final List<Predicate<Path>> dumpFunction = new ArrayList<>();
- dumpFunction.add(
- child -> {
- Path path = child;
- out.println(" " + path + " (" + path.toDebugString() + ")");
- path.applyToChildren(dumpFunction.get(0));
- return false;
- });
-
- fs.getRootDirectory().applyToChildren(dumpFunction.get(0));
- }
-
- /**
* Returns the type of the file system path belongs to.
*/
public static String getFileSystem(Path path) {