diff options
author | aiuto <aiuto@google.com> | 2022-09-15 11:06:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-15 11:06:34 -0400 |
commit | 21888798fdd2ac733018d38a711195db01ab31c9 (patch) | |
tree | 0227782e1beb9d1dcc96ee6f3762d1d05a31deda | |
parent | 0f128a2579163798b75da0309c73d5cbfaf7e261 (diff) | |
download | bazelbuild-rules_pkg-21888798fdd2ac733018d38a711195db01ab31c9.tar.gz |
First cut at runfiles support in pkg_* rules (#605)
* First cut at runfiles in pkg_* rules
* allow long paths in write_manifest to aid debugging
-rw-r--r-- | pkg/private/pkg_files.bzl | 30 | ||||
-rw-r--r-- | tests/BUILD | 5 | ||||
-rw-r--r-- | tests/mappings/BUILD | 3 | ||||
-rw-r--r-- | tests/mappings/executable.manifest.golden | 4 | ||||
-rw-r--r-- | tests/mappings/executable.manifest.windows.golden | 4 | ||||
-rw-r--r-- | tests/mappings/manifest_test_lib.py | 4 | ||||
-rw-r--r-- | tests/util/defs.bzl | 10 |
7 files changed, 47 insertions, 13 deletions
diff --git a/pkg/private/pkg_files.bzl b/pkg/private/pkg_files.bzl index f78f28b..4bd9890 100644 --- a/pkg/private/pkg_files.bzl +++ b/pkg/private/pkg_files.bzl @@ -268,6 +268,10 @@ def add_label_list( default_group: fallback mode to use for Package*Info elements without group """ + if hasattr(ctx.attr, "include_runfiles"): + include_runfiles = ctx.attr.include_runfiles + else: + include_runfiles = False # Compute the relative path data_path = compute_data_path( ctx, @@ -295,6 +299,7 @@ def add_label_list( default_mode = default_mode, default_user = default_user, default_group = default_group, + include_runfiles = include_runfiles, ) @@ -306,7 +311,8 @@ def add_from_default_info( data_path_without_prefix, default_mode = None, default_user = None, - default_group = None): + default_group = None, + include_runfiles = False): """Helper method to add the DefaultInfo of a target to a content_map. Args: @@ -318,6 +324,7 @@ def add_from_default_info( default_mode: fallback mode to use for Package*Info elements without mode default_user: fallback user to use for Package*Info elements without user default_group: fallback mode to use for Package*Info elements without group + include_runfiles: Include runfiles """ if not DefaultInfo in src: return @@ -341,14 +348,29 @@ def add_from_default_info( fmode = "0755" if f == the_executable else default_mode add_single_file( content_map, - d_path, - f, + dest_path = d_path, + src = f, origin = src.label, mode = fmode, user = default_user, group = default_group, ) - + if include_runfiles: + runfiles = src[DefaultInfo].default_runfiles + if runfiles: + base_path = d_path + '.runfiles' + for rf in runfiles.files.to_list(): + d_path = base_path + '/' + rf.short_path + fmode = "0755" if rf == the_executable else default_mode + _check_dest(content_map, d_path, rf, src.label) + content_map[d_path] = _DestFile( + src = rf, + entry_type = ENTRY_IS_FILE, + origin = src.label, + mode = fmode, + user = default_user, + group = default_group, + ) def get_my_executable(src): """If a target represents an executable, return its file handle. diff --git a/tests/BUILD b/tests/BUILD index c6666c6..7f4c989 100644 --- a/tests/BUILD +++ b/tests/BUILD @@ -84,8 +84,9 @@ py_test( ) cc_binary( - name = "an_executable", - srcs = ["foo.cc"], + name = "an_executable", + srcs = ["foo.cc"], + data = ["BUILD"], ) py_test( diff --git a/tests/mappings/BUILD b/tests/mappings/BUILD index 6ebee0a..b9f55aa 100644 --- a/tests/mappings/BUILD +++ b/tests/mappings/BUILD @@ -126,12 +126,13 @@ manifest_golden_test( target = "utf8", ) -# Test handling of executable files +# Test handling of executable + runfiles write_content_manifest( name = "executable_manifest", srcs = [ "//tests:an_executable", ], + include_runfiles = True, ) alias( diff --git a/tests/mappings/executable.manifest.golden b/tests/mappings/executable.manifest.golden index ae87199..c216822 100644 --- a/tests/mappings/executable.manifest.golden +++ b/tests/mappings/executable.manifest.golden @@ -1,3 +1,5 @@ [ -[0, "an_executable", "tests/an_executable", "0755", null, null] +[0,"an_executable.runfiles/tests/BUILD","tests/BUILD","",null,null], +[0,"an_executable.runfiles/tests/an_executable","tests/an_executable","0755",null,null], +[0,"an_executable","tests/an_executable","0755",null,null] ] diff --git a/tests/mappings/executable.manifest.windows.golden b/tests/mappings/executable.manifest.windows.golden index 7573b32..5db6cbe 100644 --- a/tests/mappings/executable.manifest.windows.golden +++ b/tests/mappings/executable.manifest.windows.golden @@ -1,3 +1,5 @@ [ -[0, "an_executable.exe", "tests/an_executable.exe", "0755", null, null] +[0,"an_executable.exe.runfiles/tests/an_executable.exe","tests/an_executable.exe","0755",null,null], +[0,"an_executable.exe.runfiles/tests/BUILD","tests/BUILD","",null,null], +[0,"an_executable.exe","tests/an_executable.exe","0755",null,null] ] diff --git a/tests/mappings/manifest_test_lib.py b/tests/mappings/manifest_test_lib.py index d928473..94c311c 100644 --- a/tests/mappings/manifest_test_lib.py +++ b/tests/mappings/manifest_test_lib.py @@ -33,7 +33,9 @@ class ContentManifestTest(unittest.TestCase): e_file = ContentManifestTest.run_files.Rlocation('rules_pkg/' + expected) with open(e_file, mode='rb') as e_fp: expected = json.load(e_fp) + expected_dict = {x[1]: x for x in expected} g_file = ContentManifestTest.run_files.Rlocation('rules_pkg/' + got) with open(g_file, mode='rb') as g_fp: got = json.load(g_fp) - self.assertEqual(expected, got) + got_dict = {x[1]: x for x in got} + self.assertEqual(expected_dict, got_dict) diff --git a/tests/util/defs.bzl b/tests/util/defs.bzl index eb3124c..463525c 100644 --- a/tests/util/defs.bzl +++ b/tests/util/defs.bzl @@ -171,15 +171,19 @@ This is intended only for testing the manifest creation features.""", """, default = True, ), + "include_runfiles": attr.bool(), }, ) -def write_content_manifest(name, srcs): +def write_content_manifest(name, srcs, **kwargs): + out = kwargs.pop("out", name + ".manifest") + use_short_path = kwargs.pop("use_short_path", True) _write_content_manifest( name = name, srcs = srcs, - use_short_path = True, - out = name + ".manifest", + out = out, + use_short_path = use_short_path, + **kwargs, ) ############################################################ |