aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2017-02-28 10:42:48 +0000
committerGravatar Yue Gan <yueg@google.com>2017-02-28 11:33:37 +0000
commit8afbd3c65339665992ece415e268955394507559 (patch)
treed1b0b8e4ebfecf730dea30fcdba4b68b4220bfbd
parenta843d216f9f54af27a8d1b5f605e5f5378e4714a (diff)
Move UnixFileSystem to lib.unix, WindowsFileSystem to lib.windows
-- PiperOrigin-RevId: 148749485 MOS_MIGRATED_REVID=148749485
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD39
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java (renamed from src/main/java/com/google/devtools/build/lib/vfs/UnixFileSystem.java)9
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/OsUtils.java38
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java (renamed from src/main/java/com/google/devtools/build/lib/vfs/WindowsFileSystem.java)26
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD21
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/repository/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/repository/CompressedTarFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/unix/NativePosixFilesTest.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/unix/UnixFileSystemTest.java (renamed from src/test/java/com/google/devtools/build/lib/vfs/UnixFileSystemTest.java)16
-rw-r--r--src/test/java/com/google/devtools/build/lib/unix/UnixPathEqualityTest.java (renamed from src/test/java/com/google/devtools/build/lib/vfs/UnixPathEqualityTest.java)5
-rw-r--r--src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/NativePathTest.java (renamed from src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java)100
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/PathGetParentTest.java (renamed from src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java)16
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/PathTest.java22
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/windows/PathWindowsTest.java (renamed from src/test/java/com/google/devtools/build/lib/vfs/PathWindowsTest.java)66
-rw-r--r--src/test/java/com/google/devtools/build/lib/windows/WindowsFileOperationsTest.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java (renamed from src/test/java/com/google/devtools/build/lib/vfs/WindowsFileSystemTest.java)82
-rw-r--r--src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/BUILD1
-rw-r--r--src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/GenerateWorkspace.java2
-rw-r--r--src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD2
-rw-r--r--src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java2
30 files changed, 285 insertions, 238 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index a2915e2d03..d6663eafe8 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -73,9 +73,32 @@ java_library(
"//conditions:default": ["//src/main/native:libunix.so"],
}),
deps = [
+ ":concurrent",
+ ":os_util",
+ ":preconditions",
+ ":shell",
+ ":vfs",
+ "//third_party:guava",
+ ],
+)
+
+java_library(
+ name = "windows",
+ srcs = glob([
+ "windows/*.java",
+ ]),
+ visibility = ["//visibility:public"],
+ deps = [
+ ":base-util",
+ ":clock",
+ ":concurrent",
":os_util",
+ ":preconditions",
":shell",
+ ":vfs",
+ "//src/main/java/com/google/devtools/common/options",
"//third_party:guava",
+ "//third_party:jsr305",
],
)
@@ -126,7 +149,6 @@ java_library(
srcs = glob([
"profiler/*.java",
"vfs/*.java",
- "windows/*.java",
]),
visibility = ["//visibility:public"],
deps = [
@@ -136,7 +158,6 @@ java_library(
":os_util",
":preconditions",
":shell",
- ":unix",
"//src/main/java/com/google/devtools/common/options",
"//third_party:guava",
"//third_party:jsr305",
@@ -238,6 +259,17 @@ java_library(
)
java_library(
+ name = "process_util",
+ srcs = ["util/ProcessUtils.java"],
+ deps = [
+ ":concurrent",
+ ":os_util",
+ ":unix",
+ ":windows",
+ ],
+)
+
+java_library(
name = "util",
srcs = glob(
["util/*.java"],
@@ -248,6 +280,7 @@ java_library(
"util/JavaClock.java",
"util/OS.java",
"util/Preconditions.java",
+ "util/ProcessUtils.java",
"util/StringCanonicalizer.java",
"util/StringTrie.java",
"util/VarInt.java",
@@ -1020,12 +1053,14 @@ java_library(
":flags",
":io",
":packages-internal",
+ ":process_util",
":profiler-output",
":shared-base-rules",
":shell",
":unix",
":util",
":vfs",
+ ":windows",
"//src/main/java/com/google/devtools/build/docgen:docgen_javalib",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 2612048ba3..efe5a2111f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -56,6 +56,7 @@ import com.google.devtools.build.lib.server.signal.InterruptSignalHandler;
import com.google.devtools.build.lib.shell.JavaSubprocessFactory;
import com.google.devtools.build.lib.shell.Subprocess;
import com.google.devtools.build.lib.shell.SubprocessBuilder;
+import com.google.devtools.build.lib.unix.UnixFileSystem;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.Clock;
@@ -63,16 +64,15 @@ import com.google.devtools.build.lib.util.CustomExitCodePublisher;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.util.LoggingUtil;
import com.google.devtools.build.lib.util.OS;
-import com.google.devtools.build.lib.util.OsUtils;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.util.ProcessUtils;
import com.google.devtools.build.lib.util.ThreadUtils;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
-import com.google.devtools.build.lib.vfs.UnixFileSystem;
-import com.google.devtools.build.lib.vfs.WindowsFileSystem;
+import com.google.devtools.build.lib.windows.WindowsFileSystem;
import com.google.devtools.build.lib.windows.WindowsSubprocessFactory;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionPriority;
@@ -934,7 +934,7 @@ public final class BlazeRuntime {
PathFragment installBase = startupOptions.installBase;
PathFragment outputBase = startupOptions.outputBase;
- OsUtils.maybeForceJNI(installBase); // Must be before first use of JNI.
+ maybeForceJNI(installBase); // Must be before first use of JNI.
// From the point of view of the Java program --install_base and --output_base
// are mandatory options, despite the comment in their declarations.
@@ -1019,6 +1019,32 @@ public final class BlazeRuntime {
}
/**
+ * Loads JNI libraries, if necessary under the current platform.
+ */
+ public static void maybeForceJNI(PathFragment installBase) {
+ if (jniLibsAvailable()) {
+ forceJNI(installBase);
+ }
+ }
+
+ private static boolean jniLibsAvailable() {
+ return !"0".equals(System.getProperty("io.bazel.EnableJni"));
+ }
+
+ // Force JNI linking at a moment when we have 'installBase' handy, and print
+ // an informative error if it fails.
+ private static void forceJNI(PathFragment installBase) {
+ try {
+ ProcessUtils.getpid(); // force JNI initialization
+ } catch (UnsatisfiedLinkError t) {
+ System.err.println("JNI initialization failed: " + t.getMessage() + ". "
+ + "Possibly your installation has been corrupted; "
+ + "if this problem persists, try 'rm -fr " + installBase + "'.");
+ throw t;
+ }
+ }
+
+ /**
* Returns a logger that crashes as soon as it's written to, since tests should not cause events
* that would be logged.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
index 579c3f4d5b..08bd03a412 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
@@ -36,7 +36,7 @@ import com.google.devtools.build.lib.query2.proto.proto2api.Build.RuleDefinition
import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.util.AbruptExitException;
-import com.google.devtools.build.lib.util.OsUtils;
+import com.google.devtools.build.lib.util.ProcessUtils;
import com.google.devtools.build.lib.util.StringUtilities;
import com.google.devtools.common.options.OptionsProvider;
import java.io.ByteArrayOutputStream;
@@ -334,7 +334,7 @@ public abstract class InfoItem {
@Override
public byte[] get(Supplier<BuildConfiguration> configurationSupplier, CommandEnvironment env)
throws AbruptExitException {
- return print(OsUtils.getpid());
+ return print(ProcessUtils.getpid());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD
index 593aafa73e..82010f3128 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD
@@ -14,6 +14,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:events",
"//src/main/java/com/google/devtools/build/lib:io",
"//src/main/java/com/google/devtools/build/lib:packages-internal",
+ "//src/main/java/com/google/devtools/build/lib:process_util",
"//src/main/java/com/google/devtools/build/lib:runtime",
"//src/main/java/com/google/devtools/build/lib:shell",
"//src/main/java/com/google/devtools/build/lib:unix",
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/BUILD b/src/main/java/com/google/devtools/build/lib/standalone/BUILD
index de704cd840..0b2171e25e 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/standalone/BUILD
@@ -12,6 +12,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib:io",
"//src/main/java/com/google/devtools/build/lib:packages-internal",
+ "//src/main/java/com/google/devtools/build/lib:process_util",
"//src/main/java/com/google/devtools/build/lib:runtime",
"//src/main/java/com/google/devtools/build/lib:shell",
"//src/main/java/com/google/devtools/build/lib:util",
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/UnixFileSystem.java b/src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java
index 53db44cc22..c21848a9f7 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/UnixFileSystem.java
+++ b/src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java
@@ -11,18 +11,21 @@
// 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.vfs;
+package com.google.devtools.build.lib.unix;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
-import com.google.devtools.build.lib.unix.ErrnoFileStatus;
-import com.google.devtools.build.lib.unix.NativePosixFiles;
import com.google.devtools.build.lib.unix.NativePosixFiles.Dirents;
import com.google.devtools.build.lib.unix.NativePosixFiles.ReadTypes;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.AbstractFileSystemWithCustomStat;
+import com.google.devtools.build.lib.vfs.Dirent;
+import com.google.devtools.build.lib.vfs.FileStatus;
+import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/src/main/java/com/google/devtools/build/lib/util/OsUtils.java b/src/main/java/com/google/devtools/build/lib/util/OsUtils.java
index 85c892046d..a25e64bac2 100644
--- a/src/main/java/com/google/devtools/build/lib/util/OsUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/util/OsUtils.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.util;
-import com.google.devtools.build.lib.vfs.PathFragment;
-
/**
* Operating system-specific utilities.
*/
@@ -34,40 +32,4 @@ public final class OsUtils {
public static String executableExtension() {
return EXECUTABLE_EXTENSION;
}
-
- /**
- * Loads JNI libraries, if necessary under the current platform.
- */
- public static void maybeForceJNI(PathFragment installBase) {
- if (jniLibsAvailable()) {
- forceJNI(installBase);
- }
- }
-
- private static boolean jniLibsAvailable() {
- return !"0".equals(System.getProperty("io.bazel.EnableJni"));
- }
-
- // Force JNI linking at a moment when we have 'installBase' handy, and print
- // an informative error if it fails.
- private static void forceJNI(PathFragment installBase) {
- try {
- ProcessUtils.getpid(); // force JNI initialization
- } catch (UnsatisfiedLinkError t) {
- System.err.println("JNI initialization failed: " + t.getMessage() + ". "
- + "Possibly your installation has been corrupted; "
- + "if this problem persists, try 'rm -fr " + installBase + "'.");
- throw t;
- }
- }
-
- /**
- * Returns the PID of the current process, or -1 if not available.
- */
- public static int getpid() {
- if (jniLibsAvailable()) {
- return ProcessUtils.getpid();
- }
- return -1;
- }
}
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 fd5b711e2e..9cc3dc78d8 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
@@ -976,11 +976,6 @@ public class FileSystemUtils {
* <p>Its results are unspecified and MUST NOT be interpreted programmatically.
*/
public static void dump(FileSystem fs, final PrintStream out) {
- if (!(fs instanceof UnixFileSystem)) {
- out.println(" Not a UnixFileSystem.");
- return;
- }
-
// 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*.
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java b/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java
index 221659f9f4..e4099693a6 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java
@@ -19,7 +19,6 @@ import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.util.Clock;
import com.google.devtools.build.lib.util.JavaClock;
-
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/WindowsFileSystem.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java
index 4167d817e4..ab1ee20346 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/WindowsFileSystem.java
+++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java
@@ -11,16 +11,19 @@
// 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.vfs;
+package com.google.devtools.build.lib.windows;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.FileStatus;
+import com.google.devtools.build.lib.vfs.FileSystem;
+import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.Path.PathFactory;
-import com.google.devtools.build.lib.vfs.Path.PathFactory.TranslatedPath;
-import com.google.devtools.build.lib.windows.WindowsFileOperations;
+import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -200,7 +203,9 @@ public class WindowsFileSystem extends JavaIoFileSystem {
}
}
- private static final class WindowsPath extends Path {
+ /** A windows-specific subclass of Path. */
+ @VisibleForTesting
+ protected static final class WindowsPath extends Path {
// The drive letter is '\0' if and only if this Path is the filesystem root "/".
private char driveLetter;
@@ -223,8 +228,9 @@ public class WindowsFileSystem extends JavaIoFileSystem {
if (isTopLevelDirectory()) {
result.append(driveLetter).append(':').append(PathFragment.SEPARATOR_CHAR);
} else {
- getParentDirectory().buildPathString(result);
- if (!getParentDirectory().isTopLevelDirectory()) {
+ WindowsPath parent = (WindowsPath) getParentDirectory();
+ parent.buildPathString(result);
+ if (!parent.isTopLevelDirectory()) {
result.append(PathFragment.SEPARATOR_CHAR);
}
result.append(getBaseName());
@@ -260,7 +266,7 @@ public class WindowsFileSystem extends JavaIoFileSystem {
segments = Arrays.copyOfRange(segments, 1, segments.length);
}
- return new PathFragment(driveLetter, true, segments);
+ return PathFragment.create(driveLetter, true, segments);
}
@Override
@@ -295,6 +301,12 @@ public class WindowsFileSystem extends JavaIoFileSystem {
}
}
}
+
+ @VisibleForTesting
+ @Override
+ protected void applyToChildren(Predicate<Path> function) {
+ super.applyToChildren(function);
+ }
}
@VisibleForTesting
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 56958d9e41..b1efe10065 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -6,16 +6,17 @@ package(
CROSS_PLATFORM_WINDOWS_TESTS = [
"util/DependencySetWindowsTest.java",
"vfs/PathFragmentWindowsTest.java",
- "vfs/PathWindowsTest.java",
+ "windows/PathWindowsTest.java",
]
# Tests for Windows-specific functionality that run on Windows.
WINDOWS_ON_WINDOWS_TESTS = glob(
["windows/*.java"],
- exclude = ["windows/MockSubprocess.java"],
-) + [
- "vfs/WindowsFileSystemTest.java",
-]
+ exclude = [
+ "windows/MockSubprocess.java",
+ "windows/PathWindowsTest.java",
+ ],
+)
# All Windows-specific tests. Use this to exclude Windows tests from globs.
ALL_WINDOWS_TESTS = CROSS_PLATFORM_WINDOWS_TESTS + WINDOWS_ON_WINDOWS_TESTS
@@ -98,8 +99,10 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:io",
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:shell",
+ "//src/main/java/com/google/devtools/build/lib:unix",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/main/java/com/google/devtools/build/lib:windows",
"//third_party:guava",
"//third_party:guava-testlib",
"//third_party:junit4",
@@ -191,6 +194,7 @@ java_test(
"//src/main/java/com/google/devtools/build/lib:inmemoryfs",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/main/java/com/google/devtools/build/lib:windows",
"//src/main/java/com/google/devtools/common/options",
"//third_party:guava",
"//third_party:guava-testlib",
@@ -206,6 +210,7 @@ java_library(
],
deps = [
"//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/main/java/com/google/devtools/build/lib:windows",
"//third_party:guava",
"//third_party:guava-testlib",
"//third_party:junit4",
@@ -220,13 +225,19 @@ java_test(
data = [
":MockSubprocess_deploy.jar",
] + JNI_LIB,
+ jvm_flags = [
+ "-Dbazel.windows_unix_root=C:/fake/msys",
+ ],
test_class = "com.google.devtools.build.lib.AllTests",
deps = [
":test_runner",
":testutil",
":windows_testutil",
+ "//src/main/java/com/google/devtools/build/lib:clock",
+ "//src/main/java/com/google/devtools/build/lib:inmemoryfs",
"//src/main/java/com/google/devtools/build/lib:os_util",
"//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/main/java/com/google/devtools/build/lib:windows",
"//third_party:guava",
"//third_party:junit4",
"//third_party:truth",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD b/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD
index b24f8d10aa..2b281f0b50 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD
@@ -20,6 +20,7 @@ java_test(
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib:packages-internal",
"//src/main/java/com/google/devtools/build/lib:runtime",
+ "//src/main/java/com/google/devtools/build/lib:unix",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib:vfs",
"//src/main/java/com/google/devtools/build/lib/actions",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/CompressedTarFunctionTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/CompressedTarFunctionTest.java
index 2002c626a7..6eac63ef15 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/CompressedTarFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/CompressedTarFunctionTest.java
@@ -22,11 +22,11 @@ import com.google.devtools.build.lib.bazel.repository.TarGzFunction;
import com.google.devtools.build.lib.testutil.BlazeTestUtils;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.testutil.TestUtils;
+import com.google.devtools.build.lib.unix.UnixFileSystem;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.UnixFileSystem;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
index 3294d09dc0..52cf1bac99 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
@@ -63,7 +63,7 @@ public class TestConstants {
public static final String TEST_RULE_MODULE =
"com.google.devtools.build.lib.bazel.rules.BazelRulesModule";
public static final String TEST_REAL_UNIX_FILE_SYSTEM =
- "com.google.devtools.build.lib.vfs.UnixFileSystem";
+ "com.google.devtools.build.lib.unix.UnixFileSystem";
public static final ImmutableList<String> IGNORED_MESSAGE_PREFIXES = ImmutableList.<String>of();
diff --git a/src/test/java/com/google/devtools/build/lib/unix/NativePosixFilesTest.java b/src/test/java/com/google/devtools/build/lib/unix/NativePosixFilesTest.java
index c2e033027a..ea5039d89f 100644
--- a/src/test/java/com/google/devtools/build/lib/unix/NativePosixFilesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/unix/NativePosixFilesTest.java
@@ -23,7 +23,6 @@ import com.google.devtools.build.lib.vfs.FileAccessException;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.UnixFileSystem;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/unix/UnixFileSystemTest.java
index 46b200baff..567b2f3d0e 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/unix/UnixFileSystemTest.java
@@ -11,24 +11,24 @@
// 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.vfs;
+package com.google.devtools.build.lib.unix;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import com.google.devtools.build.lib.unix.NativePosixFiles;
-
+import com.google.devtools.build.lib.vfs.FileSystem;
+import com.google.devtools.build.lib.vfs.FileSystemUtils;
+import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.SymlinkAwareFileSystemTest;
+import com.google.devtools.build.lib.vfs.Symlinks;
+import java.io.IOException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import java.io.IOException;
-
-/**
- * Tests for the {@link UnixFileSystem} class.
- */
+/** Tests for the {@link com.google.devtools.build.lib.unix.UnixFileSystem} class. */
@RunWith(JUnit4.class)
public class UnixFileSystemTest extends SymlinkAwareFileSystemTest {
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathEqualityTest.java b/src/test/java/com/google/devtools/build/lib/unix/UnixPathEqualityTest.java
index fc4b253ea7..bf8091a32d 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathEqualityTest.java
+++ b/src/test/java/com/google/devtools/build/lib/unix/UnixPathEqualityTest.java
@@ -11,7 +11,7 @@
// 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.vfs;
+package com.google.devtools.build.lib.unix;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
@@ -20,7 +20,8 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.common.testing.EqualsTester;
-
+import com.google.devtools.build.lib.vfs.FileSystem;
+import com.google.devtools.build.lib.vfs.Path;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java b/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java
index 15e32e0cff..c0099d2fe3 100644
--- a/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java
@@ -19,14 +19,12 @@ import com.google.common.collect.Sets;
import com.google.devtools.build.lib.testutil.Scratch;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.WindowsFileSystem;
-
+import com.google.devtools.build.lib.windows.WindowsFileSystem;
+import java.util.Set;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import java.util.Set;
-
@RunWith(JUnit4.class)
public class DependencySetWindowsTest {
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java b/src/test/java/com/google/devtools/build/lib/vfs/NativePathTest.java
index e2317bf0f1..15a18428b5 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/NativePathTest.java
@@ -25,7 +25,7 @@ import com.google.common.testing.EqualsTester;
import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.vfs.util.FileSystems;
import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -38,49 +38,47 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/**
- * Tests for {@link Path}.
- */
+/** Tests for {@link Path} in combination with the native file system for the current platform. */
@RunWith(JUnit4.class)
-public class UnixPathTest {
+public class NativePathTest {
- private FileSystem unixFs;
+ private FileSystem fs;
private File aDirectory;
private File aFile;
private File anotherFile;
private File tmpDir;
- protected FileSystem getUnixFileSystem() {
+ protected FileSystem getNativeFileSystem() {
return FileSystems.getNativeFileSystem();
}
@Before
public final void createFiles() throws Exception {
- unixFs = getUnixFileSystem();
+ fs = getNativeFileSystem();
tmpDir = new File(TestUtils.tmpDir(), "tmpDir");
tmpDir.mkdirs();
aDirectory = new File(tmpDir, "a_directory");
aDirectory.mkdirs();
aFile = new File(tmpDir, "a_file");
- new FileWriter(aFile).close();
+ new FileOutputStream(aFile).close();
anotherFile = new File(aDirectory, "another_file.txt");
- new FileWriter(anotherFile).close();
+ new FileOutputStream(anotherFile).close();
}
@Test
public void testExists() {
- assertTrue(unixFs.getPath(aDirectory.getPath()).exists());
- assertTrue(unixFs.getPath(aFile.getPath()).exists());
- assertFalse(unixFs.getPath("/does/not/exist").exists());
+ assertTrue(fs.getPath(aDirectory.getPath()).exists());
+ assertTrue(fs.getPath(aFile.getPath()).exists());
+ assertFalse(fs.getPath("/does/not/exist").exists());
}
@Test
public void testDirectoryEntriesForDirectory() throws IOException {
Collection<Path> entries =
- unixFs.getPath(tmpDir.getPath()).getDirectoryEntries();
+ fs.getPath(tmpDir.getPath()).getDirectoryEntries();
List<Path> expectedEntries = Arrays.asList(
- unixFs.getPath(tmpDir.getPath() + "/a_file"),
- unixFs.getPath(tmpDir.getPath() + "/a_directory"));
+ fs.getPath(tmpDir.getPath() + "/a_file"),
+ fs.getPath(tmpDir.getPath() + "/a_directory"));
assertEquals(new HashSet<Object>(expectedEntries),
new HashSet<Object>(entries));
@@ -89,7 +87,7 @@ public class UnixPathTest {
@Test
public void testDirectoryEntriesForFileThrowsException() {
try {
- unixFs.getPath(aFile.getPath()).getDirectoryEntries();
+ fs.getPath(aFile.getPath()).getDirectoryEntries();
fail("No exception thrown.");
} catch (IOException x) {
// The expected result.
@@ -98,42 +96,42 @@ public class UnixPathTest {
@Test
public void testIsFileIsTrueForFile() {
- assertTrue(unixFs.getPath(aFile.getPath()).isFile());
+ assertTrue(fs.getPath(aFile.getPath()).isFile());
}
@Test
public void testIsFileIsFalseForDirectory() {
- assertFalse(unixFs.getPath(aDirectory.getPath()).isFile());
+ assertFalse(fs.getPath(aDirectory.getPath()).isFile());
}
@Test
public void testBaseName() {
- assertEquals("base", unixFs.getPath("/foo/base").getBaseName());
+ assertEquals("base", fs.getPath("/foo/base").getBaseName());
}
@Test
public void testBaseNameRunsAfterDotDotInterpretation() {
- assertEquals("base", unixFs.getPath("/base/foo/..").getBaseName());
+ assertEquals("base", fs.getPath("/base/foo/..").getBaseName());
}
@Test
public void testParentOfRootIsRoot() {
- assertEquals(unixFs.getPath("/"), unixFs.getPath("/.."));
- assertEquals(unixFs.getPath("/"), unixFs.getPath("/../../../../../.."));
- assertEquals(unixFs.getPath("/foo"), unixFs.getPath("/../../../foo"));
+ assertEquals(fs.getPath("/"), fs.getPath("/.."));
+ assertEquals(fs.getPath("/"), fs.getPath("/../../../../../.."));
+ assertEquals(fs.getPath("/foo"), fs.getPath("/../../../foo"));
}
@Test
public void testIsDirectory() {
- assertTrue(unixFs.getPath(aDirectory.getPath()).isDirectory());
- assertFalse(unixFs.getPath(aFile.getPath()).isDirectory());
- assertFalse(unixFs.getPath("/does/not/exist").isDirectory());
+ assertTrue(fs.getPath(aDirectory.getPath()).isDirectory());
+ assertFalse(fs.getPath(aFile.getPath()).isDirectory());
+ assertFalse(fs.getPath("/does/not/exist").isDirectory());
}
@Test
public void testListNonExistingDirectoryThrowsException() {
try {
- unixFs.getPath("/does/not/exist").getDirectoryEntries();
+ fs.getPath("/does/not/exist").getDirectoryEntries();
fail("No exception thrown.");
} catch (IOException ex) {
// success!
@@ -152,22 +150,22 @@ public class UnixPathTest {
@Test
public void testGlob() throws Exception {
- Collection<Path> textFiles = UnixGlob.forPath(unixFs.getPath(tmpDir.getPath()))
+ Collection<Path> textFiles = UnixGlob.forPath(fs.getPath(tmpDir.getPath()))
.addPattern("*/*.txt")
.globInterruptible();
assertThat(textFiles).hasSize(1);
Path onlyFile = textFiles.iterator().next();
- assertEquals(unixFs.getPath(anotherFile.getPath()), onlyFile);
+ assertEquals(fs.getPath(anotherFile.getPath()), onlyFile);
Collection<Path> onlyFiles =
- UnixGlob.forPath(unixFs.getPath(tmpDir.getPath()))
+ UnixGlob.forPath(fs.getPath(tmpDir.getPath()))
.addPattern("*")
.setExcludeDirectories(true)
.globInterruptible();
assertPathSet(onlyFiles, aFile.getPath());
Collection<Path> directoriesToo =
- UnixGlob.forPath(unixFs.getPath(tmpDir.getPath()))
+ UnixGlob.forPath(fs.getPath(tmpDir.getPath()))
.addPattern("*")
.setExcludeDirectories(false)
.globInterruptible();
@@ -176,16 +174,16 @@ public class UnixPathTest {
@Test
public void testGetRelative() {
- Path relative = unixFs.getPath("/foo").getChild("bar");
- Path expected = unixFs.getPath("/foo/bar");
+ Path relative = fs.getPath("/foo").getChild("bar");
+ Path expected = fs.getPath("/foo/bar");
assertEquals(expected, relative);
}
@Test
public void testEqualsAndHash() {
- Path path = unixFs.getPath("/foo/bar");
- Path equalPath = unixFs.getPath("/foo/bar");
- Path differentPath = unixFs.getPath("/foo/bar/baz");
+ Path path = fs.getPath("/foo/bar");
+ Path equalPath = fs.getPath("/foo/bar");
+ Path differentPath = fs.getPath("/foo/bar/baz");
Object differentType = new Object();
new EqualsTester().addEqualityGroup(path, equalPath).testEquals();
@@ -199,7 +197,7 @@ public class UnixPathTest {
for (int i = 0; i < 256; i++) {
allLatin1Chars[i] = (char) i;
}
- Path path = unixFs.getPath(aFile.getPath());
+ Path path = fs.getPath(aFile.getPath());
String latin1String = new String(allLatin1Chars);
FileSystemUtils.writeContentAsLatin1(path, latin1String);
String fileContent = new String(FileSystemUtils.readContentAsLatin1(path));
@@ -207,9 +205,9 @@ public class UnixPathTest {
}
/**
- * Verify that the encoding implemented by
- * {@link FileSystemUtils#writeContentAsLatin1(Path, String)}
- * really is 8859-1 (latin1).
+ * Verify that the encoding implemented by {@link
+ * com.google.devtools.build.lib.vfs.FileSystemUtils#writeContentAsLatin1(Path, String)} really is
+ * 8859-1 (latin1).
*/
@Test
public void testVerifyLatin1() throws IOException {
@@ -217,7 +215,7 @@ public class UnixPathTest {
for( int i = 0; i < 256; i++) {
allLatin1Chars[i] = (char)i;
}
- Path path = unixFs.getPath(aFile.getPath());
+ Path path = fs.getPath(aFile.getPath());
String latin1String = new String(allLatin1Chars);
FileSystemUtils.writeContentAsLatin1(path, latin1String);
byte[] bytes = FileSystemUtils.readContent(path);
@@ -228,7 +226,7 @@ public class UnixPathTest {
public void testBytesReadAndWrite() throws IOException {
byte[] bytes = new byte[] { (byte) 0xdeadbeef, (byte) 0xdeadbeef>>8,
(byte) 0xdeadbeef>>16, (byte) 0xdeadbeef>>24 };
- Path path = unixFs.getPath(aFile.getPath());
+ Path path = fs.getPath(aFile.getPath());
FileSystemUtils.writeContent(path, bytes);
byte[] content = FileSystemUtils.readContent(path);
assertEquals(bytes.length, content.length);
@@ -239,7 +237,7 @@ public class UnixPathTest {
@Test
public void testInputOutputStreams() throws IOException {
- Path path = unixFs.getPath(aFile.getPath());
+ Path path = fs.getPath(aFile.getPath());
OutputStream out = path.getOutputStream();
for (int i = 0; i < 256; i++) {
out.write(i);
@@ -254,20 +252,8 @@ public class UnixPathTest {
}
@Test
- public void testAbsolutePathRoot() {
- assertEquals("/", new Path(null).toString());
- }
-
- @Test
- public void testAbsolutePath() {
- Path segment = new Path(null, "bar.txt",
- new Path(null, "foo", new Path(null)));
- assertEquals("/foo/bar.txt", segment.toString());
- }
-
- @Test
public void testDerivedSegmentEquality() {
- Path absoluteSegment = unixFs.getRootDirectory();
+ Path absoluteSegment = fs.getRootDirectory();
Path derivedNode = absoluteSegment.getChild("derivedSegment");
Path otherDerivedNode = absoluteSegment.getChild("derivedSegment");
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathGetParentTest.java
index d4719f6da6..5e6224c998 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/PathGetParentTest.java
@@ -18,28 +18,26 @@ import static org.junit.Assert.assertNull;
import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.vfs.util.FileSystems;
-
+import java.io.IOException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import java.io.IOException;
-
/**
- * A test for {@link Path} in the context of {@link UnixFileSystem}.
+ * A test for {@link Path}.
*/
@RunWith(JUnit4.class)
-public class UnixPathGetParentTest {
+public class PathGetParentTest {
- private FileSystem unixFs;
+ private FileSystem fs;
private Path testRoot;
@Before
public final void createTestRoot() throws Exception {
- unixFs = FileSystems.getNativeFileSystem();
- testRoot = unixFs.getPath(TestUtils.tmpDir()).getRelative("UnixPathGetParentTest");
+ fs = FileSystems.getNativeFileSystem();
+ testRoot = fs.getPath(TestUtils.tmpDir()).getRelative("UnixPathGetParentTest");
FileSystemUtils.createDirectoryAndParents(testRoot);
}
@@ -49,7 +47,7 @@ public class UnixPathGetParentTest {
}
private Path getParent(String path) {
- return unixFs.getPath(path).getParentDirectory();
+ return fs.getPath(path).getParentDirectory();
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathTest.java
index 482ef8a267..1976f05f8d 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/PathTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/PathTest.java
@@ -25,12 +25,6 @@ import com.google.common.testing.EqualsTester;
import com.google.common.testing.GcFinalization;
import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
@@ -38,6 +32,10 @@ import java.io.ObjectOutputStream;
import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
/**
* A test for {@link Path}.
@@ -304,6 +302,18 @@ public class PathTest {
}
}
+ @Test
+ public void testAbsolutePathRoot() {
+ assertEquals("/", new Path(null).toString());
+ }
+
+ @Test
+ public void testAbsolutePath() {
+ Path segment = new Path(null, "bar.txt",
+ new Path(null, "foo", new Path(null)));
+ assertEquals("/foo/bar.txt", segment.toString());
+ }
+
private void assertAsFragmentWorks(String expected) {
assertEquals(new PathFragment(expected), filesystem.getPath(expected).asFragment());
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java
index a860c9a612..50329d6ed0 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java
@@ -25,17 +25,16 @@ import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.unix.UnixFileSystem;
import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.Clock;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
/**
* Tests for the UnionFileSystem, both of generic FileSystem functionality
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java b/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java
index 1da31989bd..f7e6d6cb6e 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java
@@ -16,16 +16,15 @@ package com.google.devtools.build.lib.vfs.util;
import com.google.common.base.Verify;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.testutil.TestConstants;
+import com.google.devtools.build.lib.unix.UnixFileSystem;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.UnionFileSystem;
-import com.google.devtools.build.lib.vfs.UnixFileSystem;
-import com.google.devtools.build.lib.vfs.WindowsFileSystem;
import com.google.devtools.build.lib.vfs.ZipFileSystem;
-
+import com.google.devtools.build.lib.windows.WindowsFileSystem;
import java.io.IOException;
import java.util.Map;
@@ -58,7 +57,8 @@ public final class FileSystems {
if (defaultNativeFileSystem == null) {
try {
defaultNativeFileSystem = (FileSystem)
- Class.forName(TestConstants.TEST_REAL_UNIX_FILE_SYSTEM).newInstance();
+ Class.forName(TestConstants.TEST_REAL_UNIX_FILE_SYSTEM)
+ .getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new IllegalStateException(e);
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathWindowsTest.java b/src/test/java/com/google/devtools/build/lib/windows/PathWindowsTest.java
index 9ef6bc7647..388c3fd754 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/PathWindowsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/windows/PathWindowsTest.java
@@ -11,18 +11,21 @@
// 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.vfs;
+package com.google.devtools.build.lib.windows;
import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.vfs.WindowsFileSystem.SHORT_NAME_MATCHER;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.devtools.build.lib.util.BlazeClock;
+import com.google.devtools.build.lib.vfs.FileSystem;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.Path.PathFactory;
+import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
+import com.google.devtools.build.lib.windows.WindowsFileSystem.WindowsPath;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -51,7 +54,7 @@ public class PathWindowsTest {
}
private FileSystem filesystem;
- private Path root;
+ private WindowsPath root;
private final MockShortPathResolver shortPathResolver = new MockShortPathResolver();
@Before
@@ -63,7 +66,7 @@ public class PathWindowsTest {
return WindowsFileSystem.getPathFactoryForTesting(shortPathResolver);
}
};
- root = filesystem.getRootDirectory().getRelative("C:/");
+ root = (WindowsPath) filesystem.getRootDirectory().getRelative("C:/");
root.createDirectory();
}
@@ -163,7 +166,7 @@ public class PathWindowsTest {
public void testChildRegistrationWithTranslatedPaths() {
// Ensure the Path to "/usr" (actually "C:/fake/msys/usr") is created, path parents/children
// properly registered.
- Path usrPath = root.getRelative("/usr");
+ WindowsPath usrPath = (WindowsPath) root.getRelative("/usr");
root.getRelative("dummy_path");
// Assert that "usr" is not registered as a child of "/".
@@ -180,7 +183,7 @@ public class PathWindowsTest {
// Assert that "usr" is registered as a child of "C:/fake/msys/".
children.clear();
- root.getRelative("C:/fake/msys")
+ ((WindowsPath) root.getRelative("C:/fake/msys"))
.applyToChildren(
new Predicate<Path>() {
@Override
@@ -195,48 +198,6 @@ public class PathWindowsTest {
}
@Test
- public void testShortNameMatcher() {
- assertThat(SHORT_NAME_MATCHER.apply("abc")).isFalse(); // no ~ in the name
- assertThat(SHORT_NAME_MATCHER.apply("abc~")).isFalse(); // no number after the ~
- assertThat(SHORT_NAME_MATCHER.apply("~abc")).isFalse(); // no ~ followed by number
- assertThat(SHORT_NAME_MATCHER.apply("too_long_path")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("too_long_path~1")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("abcd~1234")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("h~1")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("h~12")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("h~12.")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("h~12.a")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("h~12.abc")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("h~123456")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hellow~1")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hellow~1.")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hellow~1.a")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hellow~1.abc")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hello~1.abcd")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("hellow~1.abcd")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("hello~12")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hello~12.")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hello~12.a")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hello~12.abc")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("hello~12.abcd")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("hellow~12")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("hellow~12.")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("hellow~12.a")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("hellow~12.ab")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("~h~1")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~1.")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~1.a")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~1.abc")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~1.abcd")).isFalse(); // too long for 8dot3
- assertThat(SHORT_NAME_MATCHER.apply("~h~12")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~12~1")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.a")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.abc")).isTrue();
- assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.abcd")).isFalse(); // too long for 8dot3
- }
-
- @Test
public void testResolvesShortenedPaths() {
shortPathResolver.resolutions.put("d:/progra~1", "program files");
shortPathResolver.resolutions.put("d:/program files/micros~1", "microsoft something");
@@ -279,7 +240,7 @@ public class PathWindowsTest {
}
};
- Path msRoot = root.getRelative("d:/progra~1/micros~1");
+ WindowsPath msRoot = (WindowsPath) root.getRelative("d:/progra~1/micros~1");
assertThat(msRoot.getPathString()).isEqualTo("D:/program files/microsoft something");
msRoot.applyToChildren(collector);
// The path string has an upper-case drive letter because that's how path printing works.
@@ -287,7 +248,8 @@ public class PathWindowsTest {
// Assert that the non-resolvable path was not cached.
children.clear();
- msRoot.getRelative("foo").applyToChildren(collector);
+ WindowsPath foo = (WindowsPath) msRoot.getRelative("foo");
+ foo.applyToChildren(collector);
assertThat(children).containsExactly("D:/program files/microsoft something/foo/~bar_hello");
// Pretend that a path we already failed to resolve once came into existence.
@@ -309,10 +271,10 @@ public class PathWindowsTest {
// Assert that this time we cached the previously non-existent path.
children.clear();
- msRoot.getRelative("foo").applyToChildren(collector);
+ foo.applyToChildren(collector);
// The path strings have upper-case drive letters because that's how path printing works.
children.clear();
- msRoot.getRelative("foo").applyToChildren(collector);
+ foo.applyToChildren(collector);
assertThat(children)
.containsExactly(
"D:/program files/microsoft something/foo/~bar_hello",
diff --git a/src/test/java/com/google/devtools/build/lib/windows/WindowsFileOperationsTest.java b/src/test/java/com/google/devtools/build/lib/windows/WindowsFileOperationsTest.java
index 773daee80f..1fd4223bb9 100644
--- a/src/test/java/com/google/devtools/build/lib/windows/WindowsFileOperationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/windows/WindowsFileOperationsTest.java
@@ -20,7 +20,6 @@ import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.testutil.TestSpec;
import com.google.devtools.build.lib.util.OS;
-import com.google.devtools.build.lib.vfs.WindowsFileSystem;
import com.google.devtools.build.lib.windows.util.WindowsTestUtil;
import java.io.File;
import java.io.IOException;
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/WindowsFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java
index ea08b22f35..75a5497532 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/WindowsFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java
@@ -12,9 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package com.google.devtools.build.lib.vfs;
+package com.google.devtools.build.lib.windows;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.windows.WindowsFileSystem.SHORT_NAME_MATCHER;
import static org.junit.Assert.assertSame;
import com.google.common.base.Function;
@@ -24,7 +25,10 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.testutil.TestSpec;
import com.google.devtools.build.lib.util.OS;
-import com.google.devtools.build.lib.windows.WindowsFileOperations;
+import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.build.lib.vfs.Symlinks;
+import com.google.devtools.build.lib.windows.WindowsFileSystem.WindowsPath;
import com.google.devtools.build.lib.windows.util.WindowsTestUtil;
import java.io.File;
import java.io.IOException;
@@ -65,6 +69,48 @@ public class WindowsFileSystemTest {
}
@Test
+ public void testShortNameMatcher() {
+ assertThat(SHORT_NAME_MATCHER.apply("abc")).isFalse(); // no ~ in the name
+ assertThat(SHORT_NAME_MATCHER.apply("abc~")).isFalse(); // no number after the ~
+ assertThat(SHORT_NAME_MATCHER.apply("~abc")).isFalse(); // no ~ followed by number
+ assertThat(SHORT_NAME_MATCHER.apply("too_long_path")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("too_long_path~1")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("abcd~1234")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("h~1")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("h~12")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("h~12.")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("h~12.a")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("h~12.abc")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("h~123456")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~1")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~1.")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~1.a")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~1.abc")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hello~1.abcd")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~1.abcd")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("hello~12")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hello~12.")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hello~12.a")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hello~12.abc")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("hello~12.abcd")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~12")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~12.")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~12.a")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("hellow~12.ab")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("~h~1")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~1.")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~1.a")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~1.abc")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~1.abcd")).isFalse(); // too long for 8dot3
+ assertThat(SHORT_NAME_MATCHER.apply("~h~12")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~12~1")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.a")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.abc")).isTrue();
+ assertThat(SHORT_NAME_MATCHER.apply("~h~12~1.abcd")).isFalse(); // too long for 8dot3
+ }
+
+ @Test
public void testCanWorkWithJunctionSymlinks() throws Exception {
testUtil.scratchFile("dir\\hello.txt", "hello");
testUtil.scratchDir("non_existent");
@@ -76,26 +122,26 @@ public class WindowsFileSystemTest {
Path nonExistentPath = testUtil.createVfsPath(fs, "non_existent");
// Test junction creation.
- assertThat(fs.exists(juncPath, /* followSymlinks */ false)).isTrue();
- assertThat(fs.exists(dirPath, /* followSymlinks */ false)).isTrue();
- assertThat(fs.exists(juncBadPath, /* followSymlinks */ false)).isTrue();
- assertThat(fs.exists(nonExistentPath, /* followSymlinks */ false)).isTrue();
+ assertThat(juncPath.exists(Symlinks.NOFOLLOW)).isTrue();
+ assertThat(dirPath.exists(Symlinks.NOFOLLOW)).isTrue();
+ assertThat(juncBadPath.exists(Symlinks.NOFOLLOW)).isTrue();
+ assertThat(nonExistentPath.exists(Symlinks.NOFOLLOW)).isTrue();
// Test recognizing and dereferencing a directory junction.
- assertThat(fs.isSymbolicLink(juncPath)).isTrue();
- assertThat(fs.isDirectory(juncPath, /* followSymlinks */ true)).isTrue();
- assertThat(fs.isDirectory(juncPath, /* followSymlinks */ false)).isFalse();
- assertThat(fs.getDirectoryEntries(juncPath))
+ assertThat(juncPath.isSymbolicLink()).isTrue();
+ assertThat(juncPath.isDirectory(Symlinks.FOLLOW)).isTrue();
+ assertThat(juncPath.isDirectory(Symlinks.NOFOLLOW)).isFalse();
+ assertThat(juncPath.getDirectoryEntries())
.containsExactly(testUtil.createVfsPath(fs, "junc\\hello.txt"));
// Test deleting a directory junction.
- assertThat(fs.delete(juncPath)).isTrue();
- assertThat(fs.exists(juncPath, /* followSymlinks */ false)).isFalse();
+ assertThat(juncPath.delete()).isTrue();
+ assertThat(juncPath.exists(Symlinks.NOFOLLOW)).isFalse();
// Test recognizing a dangling directory junction.
- assertThat(fs.delete(nonExistentPath)).isTrue();
- assertThat(fs.exists(nonExistentPath, /* followSymlinks */ false)).isFalse();
- assertThat(fs.exists(juncBadPath, /* followSymlinks */ false)).isTrue();
+ assertThat(nonExistentPath.delete()).isTrue();
+ assertThat(nonExistentPath.exists(Symlinks.NOFOLLOW)).isFalse();
+ assertThat(juncBadPath.exists(Symlinks.NOFOLLOW)).isTrue();
// TODO(bazel-team): fix https://github.com/bazelbuild/bazel/issues/1690 and uncomment the
// assertion below.
//assertThat(fs.isSymbolicLink(juncBadPath)).isTrue();
@@ -103,8 +149,8 @@ public class WindowsFileSystemTest {
assertThat(fs.isDirectory(juncBadPath, /* followSymlinks */ false)).isFalse();
// Test deleting a dangling junction.
- assertThat(fs.delete(juncBadPath)).isTrue();
- assertThat(fs.exists(juncBadPath, /* followSymlinks */ false)).isFalse();
+ assertThat(juncBadPath.delete()).isTrue();
+ assertThat(juncBadPath.exists(Symlinks.NOFOLLOW)).isFalse();
}
@Test
@@ -254,7 +300,7 @@ public class WindowsFileSystemTest {
String longPrefix = "unresolvable.shortpath/foo/";
String longPath = longPrefix + "will.exist/bar/hello.txt";
testUtil.scratchDir(longPrefix);
- final Path foo = fs.getPath(scratchRoot).getRelative(longPrefix);
+ final WindowsPath foo = (WindowsPath) fs.getPath(scratchRoot).getRelative(longPrefix);
// Assert that we can create an unresolvable path.
Path p = fs.getPath(scratchRoot).getRelative(shortPath);
diff --git a/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/BUILD b/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/BUILD
index 705f601b16..ee318dc912 100644
--- a/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/BUILD
+++ b/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/BUILD
@@ -10,6 +10,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:os_util",
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:runtime",
+ "//src/main/java/com/google/devtools/build/lib:unix",
"//src/main/java/com/google/devtools/build/lib:vfs",
"//src/main/java/com/google/devtools/common/options",
"//src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/maven",
diff --git a/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/GenerateWorkspace.java b/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/GenerateWorkspace.java
index 8cea85b150..1700dc1f5b 100644
--- a/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/GenerateWorkspace.java
+++ b/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/GenerateWorkspace.java
@@ -19,11 +19,11 @@ import com.google.common.io.Files;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.unix.UnixFileSystem;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.UnixFileSystem;
import com.google.devtools.build.workspace.maven.DefaultModelResolver;
import com.google.devtools.build.workspace.maven.Resolver;
import com.google.devtools.common.options.OptionsParser;
diff --git a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD
index fcd826435f..997292820a 100644
--- a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD
+++ b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD
@@ -16,8 +16,10 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:io",
"//src/main/java/com/google/devtools/build/lib:os_util",
"//src/main/java/com/google/devtools/build/lib:packages-internal",
+ "//src/main/java/com/google/devtools/build/lib:process_util",
"//src/main/java/com/google/devtools/build/lib:runtime",
"//src/main/java/com/google/devtools/build/lib:shell",
+ "//src/main/java/com/google/devtools/build/lib:unix",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib:vfs",
"//src/main/java/com/google/devtools/build/lib/remote",
diff --git a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java
index 5325b8fd4b..cca971a93d 100644
--- a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java
+++ b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java
@@ -33,13 +33,13 @@ import com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus;
import com.google.devtools.build.lib.shell.AbnormalTerminationException;
import com.google.devtools.build.lib.shell.Command;
import com.google.devtools.build.lib.shell.CommandException;
+import com.google.devtools.build.lib.unix.UnixFileSystem;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.ProcessUtils;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.UnixFileSystem;
import com.google.devtools.common.options.OptionsParser;
import io.grpc.Server;
import io.grpc.ServerBuilder;