Skip to content

Commit

Permalink
fix(tar): handle spaces in input filenames (#835)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeagle authored May 8, 2024
1 parent d8d22cb commit b15dc31
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/private/tar.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ def _to_rlocation_path(file, workspace):
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 = []
Expand All @@ -193,7 +197,7 @@ def _expand(file, expander, transform = to_repository_relative_path):
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):
Expand Down
4 changes: 4 additions & 0 deletions lib/tests/tar/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,8 @@ tar(
"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(
Expand All @@ -229,9 +231,11 @@ assert_tar_listing(
"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",
],
)

Expand Down
1 change: 1 addition & 0 deletions lib/tests/tar/srcdir/space in name.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e

0 comments on commit b15dc31

Please sign in to comment.