fwd/vendor/cxx/tools/buck/prelude/java/java_resources.bzl
John Doty 9c435dc440 Vendor dependencies
Let's see how I like this workflow.
2022-12-19 08:38:22 -08:00

61 lines
2.2 KiB
Python

# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under both the MIT license found in the
# LICENSE-MIT file in the root directory of this source tree and the Apache
# License, Version 2.0 found in the LICENSE-APACHE file in the root directory
# of this source tree.
load("@prelude//:paths.bzl", "paths")
def get_resources_map(
java_toolchain: "JavaToolchainInfo",
package: str.type,
resources: ["artifact"],
resources_root: [str.type, None]) -> {str.type: "artifact"}:
# As in v1, root the resource root via the current package.
if resources_root != None:
resources_root = paths.normalize(paths.join(package, resources_root))
java_package_finder = _get_java_package_finder(java_toolchain)
resources_to_copy = {}
for resource in resources:
# Create the full resource path.
full_resource = paths.join(
resource.owner.package if resource.owner else package,
resource.short_path,
)
# As in v1 (https://fburl.com/code/j2vwny56, https://fburl.com/code/9era0xpz),
# if this resource starts with the resource root, relativize and insert it as
# is.
if resources_root != None and paths.starts_with(full_resource, resources_root):
resource_name = paths.relativize(
full_resource,
resources_root,
)
else:
resource_name = java_package_finder(full_resource)
resources_to_copy[resource_name] = resource
return resources_to_copy
def _get_java_package_finder(java_toolchain: "JavaToolchainInfo") -> "function":
src_root_prefixes = java_toolchain.src_root_prefixes
src_root_elements = java_toolchain.src_root_elements
def finder(path):
for prefix in src_root_prefixes:
if path.startswith(prefix):
return paths.relativize(
path,
prefix,
)
parts = path.split("/")
for i in range(len(parts) - 1, -1, -1):
part = parts[i]
if part in src_root_elements:
return "/".join(parts[i + 1:])
return path
return finder