fix(tar): handle spaces in input filenames (#835)

diff --git a/lib/private/tar.bzl b/lib/private/tar.bzl
index 0bc8a2e..89f7ad3 100644
--- a/lib/private/tar.bzl
+++ b/lib/private/tar.bzl
@@ -183,6 +183,10 @@
     else:
         return workspace + "/" + file.short_path
 
+def _vis_encode(filename):
+    # TODO(#794): correctly encode all filenames by using vis(3) (or porting it)
+    return filename.replace(" ", "\\040")
+
 def _expand(file, expander, transform = to_repository_relative_path):
     expanded = expander.expand(file)
     lines = []
@@ -193,7 +197,7 @@
             parent = "/".join(segments[:i])
             lines.append(_mtree_line(parent, "dir"))
 
-        lines.append(_mtree_line(path, "file", content = e.path))
+        lines.append(_mtree_line(_vis_encode(path), "file", content = _vis_encode(e.path)))
     return lines
 
 def _mtree_impl(ctx):
diff --git a/lib/tests/tar/BUILD.bazel b/lib/tests/tar/BUILD.bazel
index 497f707..1ec8976 100644
--- a/lib/tests/tar/BUILD.bazel
+++ b/lib/tests/tar/BUILD.bazel
@@ -217,6 +217,8 @@
         "treeartifact",
     ],
     out = "7.tar",
+    # When running remote, BB lays out files with inodes that mtree optimizes into a hardlink
+    tags = ["no-remote-exec"],
 )
 
 assert_tar_listing(
@@ -229,9 +231,11 @@
         "drwxr-xr-x  0 0      0           0 Jan  1  2023 lib/tests/tar/srcdir/",
         "-rwxr-xr-x  0 0      0           0 Jan  1  2023 lib/tests/tar/srcdir/info",
         "-rwxr-xr-x  0 0      0           0 Jan  1  2023 lib/tests/tar/srcdir/pkg",
+        "-rwxr-xr-x  0 0      0           1 Jan  1  2023 lib/tests/tar/srcdir/space in name.txt",
         "drwxr-xr-x  0 0      0           0 Jan  1  2023 lib/tests/tar/treeartifact/",
         "-rwxr-xr-x  0 0      0           0 Jan  1  2023 lib/tests/tar/treeartifact/info",
         "-rwxr-xr-x  0 0      0           0 Jan  1  2023 lib/tests/tar/treeartifact/pkg",
+        "-rwxr-xr-x  0 0      0           1 Jan  1  2023 lib/tests/tar/treeartifact/space in name.txt",
     ],
 )
 
diff --git a/lib/tests/tar/srcdir/space in name.txt b/lib/tests/tar/srcdir/space in name.txt
new file mode 100644
index 0000000..9cbe6ea
--- /dev/null
+++ b/lib/tests/tar/srcdir/space in name.txt
@@ -0,0 +1 @@
+e
\ No newline at end of file