From 1848729f6f2f92f445be71690544086c8f3597ae Mon Sep 17 00:00:00 2001 From: James Hilliard Date: Wed, 7 Dec 2022 01:04:05 -0400 Subject: [PATCH] Fix pkg_tar directory entries Directories appear to work for zip files but not tar files. This should ensure we don't try to process directories as normal files. Fixes issues like: rules_pkg/pkg/private/tar/tar_writer.py", line 242, in add_file with open(file_content, 'rb') as f: IsADirectoryError: [Errno 21] Is a directory: 'bazel-out/darwin-fastbuild/bin/py/selenium/webdriver/common/devtools/v106' --- pkg/private/tar/build_tar.py | 5 ++++- tests/tar/BUILD | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/private/tar/build_tar.py b/pkg/private/tar/build_tar.py index ab16610d..b6b75bd7 100644 --- a/pkg/private/tar/build_tar.py +++ b/pkg/private/tar/build_tar.py @@ -309,7 +309,10 @@ def add_manifest_entry(self, entry_list, file_attributes): elif entry.entry_type == manifest.ENTRY_IS_EMPTY_FILE: self.add_empty_file(entry.dest, **attrs) else: - self.add_file(entry.src, entry.dest, **attrs) + if os.path.isdir(entry.src): + self.add_tree(entry.src, entry.dest, **attrs) + else: + self.add_file(entry.src, entry.dest, **attrs) def main(): diff --git a/tests/tar/BUILD b/tests/tar/BUILD index 19504e1c..22d6c6ef 100644 --- a/tests/tar/BUILD +++ b/tests/tar/BUILD @@ -60,6 +60,20 @@ genrule( cmd = "for i in $(OUTS); do echo 1 >$$i; done", ) +genrule( + name = "generate_dir_file", + outs = ["lib"], + cmd = "mkdir -p $@; echo 1 >$@/nsswitch.conf", +) + +pkg_tar( + name = "test_tar_dir_file", + srcs = [ + ":generate_dir_file", + ], + out = "dir_file.tar", +) + directory( name = "generate_tree", contents = "hello there",