Skip to content

Commit 70734c2

Browse files
committed
cleanup
1 parent 803c62a commit 70734c2

10 files changed

Lines changed: 533 additions & 496 deletions

MODULE.bazel.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rs/extensions.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def _generate_hub_and_spokes(
123123

124124
mctx.report_progress("Reading workspace metadata")
125125
result = mctx.execute(
126-
[cargo_path, "metadata", "--no-deps", "--format-version=1", "--quiet"],
126+
[cargo_path, "metadata", "--no-deps", "--locked", "--format-version=1", "--quiet"],
127127
working_directory = str(mctx.path(cargo_lock_path).dirname),
128128
)
129129
if result.return_code != 0:
@@ -255,7 +255,6 @@ def _generate_hub_and_spokes(
255255

256256
workspace_resolution = resolve_cargo_workspace_members(
257257
mctx,
258-
hub_name = hub_name,
259258
cargo_metadata = cargo_metadata,
260259
packages = packages,
261260
workspace_members = workspace_members,
@@ -266,6 +265,7 @@ def _generate_hub_and_spokes(
266265
materialize_workspace_members = False,
267266
validate_lockfile = validate_lockfile,
268267
debug = debug,
268+
dep_label_prefix = "@%s//:" % hub_name,
269269
watch_manifests = watch_manifests,
270270
use_legacy_rules_rust_platforms = use_legacy_rules_rust_platforms,
271271
)

rs/private/BUILD.bazel

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,16 @@ bzl_library(
192192
name = "rust_src_repository",
193193
srcs = ["rust_src_repository.bzl"],
194194
visibility = ["//rs:__subpackages__"],
195+
deps = [
196+
"@bazel_tools//tools/build_defs/repo:utils.bzl",
197+
"@rules_rust//rust/private:bzl_lib",
198+
],
199+
)
200+
201+
bzl_library(
202+
name = "rustc_src_repository",
203+
srcs = ["rustc_src_repository.bzl"],
204+
visibility = ["//rs:__subpackages__"],
195205
deps = [
196206
":cargo_workspace_graph",
197207
":repository_utils",

rs/private/cargo_workspace_graph.bzl

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def prepare_possible_deps(dependencies, converter = None, skip_internal_rustc_pl
210210

211211
return possible_deps
212212

213-
def dep_package_name(dep):
213+
def _dep_package_name(dep):
214214
return dep.get("package") or dep["name"]
215215

216216
def compute_package_fq_deps(package, versions_by_name, strict = True):
@@ -235,7 +235,7 @@ def compute_package_fq_deps(package, versions_by_name, strict = True):
235235
return possible_dep_fq_crates_by_name
236236

237237
def select_package_fq_dep(dep, fq_deps):
238-
dep_package = dep_package_name(dep)
238+
dep_package = _dep_package_name(dep)
239239
candidates = fq_deps.get(dep_package)
240240
if not candidates:
241241
return None
@@ -286,10 +286,10 @@ def _relative_to_workspace(path, workspace_root):
286286
rel_parts = [".."] * (len(root_parts) - common) + path_parts[common:]
287287
return "/".join(rel_parts) if rel_parts else "."
288288

289-
def cargo_metadata_dep_paths_by_name(cargo_metadata, workspace_root):
289+
def _cargo_metadata_dep_paths_by_name(packages, workspace_root):
290290
package_dirs = {}
291291

292-
for package in cargo_metadata["packages"]:
292+
for package in packages:
293293
for dep in package.get("dependencies", []):
294294
dep_path = dep.get("path")
295295
if not dep_path:
@@ -299,7 +299,7 @@ def cargo_metadata_dep_paths_by_name(cargo_metadata, workspace_root):
299299

300300
return package_dirs
301301

302-
def cargo_toml_patch_paths_by_name(workspace_cargo_toml, workspace_root, workspace_package_dir = ""):
302+
def _cargo_toml_patch_paths_by_name(workspace_cargo_toml, workspace_root, workspace_package_dir = ""):
303303
workspace_root = normalize_path(workspace_root)
304304
workspace_root_prefix = workspace_root + "/"
305305
package_dirs = {}
@@ -333,8 +333,8 @@ def split_lockfile_packages(hub_name, cargo_metadata, workspace_cargo_toml, all_
333333
for package in cargo_metadata["packages"]:
334334
workspace_member_keys[(package["name"], package["version"])] = True
335335

336-
dep_paths_by_name = cargo_metadata_dep_paths_by_name(cargo_metadata, repo_root)
337-
patch_paths_by_name = cargo_toml_patch_paths_by_name(workspace_cargo_toml, repo_root, workspace_package_dir)
336+
dep_paths_by_name = _cargo_metadata_dep_paths_by_name(cargo_metadata["packages"], repo_root)
337+
patch_paths_by_name = _cargo_toml_patch_paths_by_name(workspace_cargo_toml, repo_root, workspace_package_dir)
338338
workspace_members = []
339339
packages = []
340340

@@ -367,42 +367,63 @@ def split_lockfile_packages(hub_name, cargo_metadata, workspace_cargo_toml, all_
367367
workspace_members = workspace_members,
368368
)
369369

370-
def resolve_package_facts(packages, facts_by_fq_crate, platform_triples, skip_internal_rustc_placeholder_crates = True):
370+
def _resolve_packages(packages, package_info_by_fq_crate, platform_triples, dep_converter = None, skip_internal_rustc_placeholder_crates = True):
371371
feature_resolutions_by_fq_crate = {}
372372
versions_by_name = {}
373373

374374
for package_index in range(len(packages)):
375375
package = packages[package_index]
376376
name = package["name"]
377377
version = package["version"]
378+
fq = fq_crate(name, version)
378379

379380
add_to_dict(versions_by_name, name, version)
380381

381-
fact = facts_by_fq_crate[fq_crate(name, version)]
382-
possible_features = fact["features"]
382+
package_info = package_info_by_fq_crate[fq]
383383
possible_deps = prepare_possible_deps(
384-
fact["dependencies"],
384+
package_info.get("dependencies", []),
385+
converter = dep_converter,
385386
skip_internal_rustc_placeholder_crates = skip_internal_rustc_placeholder_crates,
386387
)
387-
feature_resolutions = new_feature_resolutions(package_index, possible_deps, possible_features, platform_triples)
388+
feature_resolutions = new_feature_resolutions(package_index, possible_deps, package_info.get("features", {}), platform_triples)
388389
package["feature_resolutions"] = feature_resolutions
389-
feature_resolutions_by_fq_crate[fq_crate(name, version)] = feature_resolutions
390+
feature_resolutions_by_fq_crate[fq] = feature_resolutions
390391

391392
return struct(
392393
feature_resolutions_by_fq_crate = feature_resolutions_by_fq_crate,
393394
versions_by_name = versions_by_name,
394395
)
395396

397+
def resolve_package_facts(packages, facts_by_fq_crate, platform_triples, skip_internal_rustc_placeholder_crates = True):
398+
return _resolve_packages(
399+
packages,
400+
facts_by_fq_crate,
401+
platform_triples,
402+
skip_internal_rustc_placeholder_crates = skip_internal_rustc_placeholder_crates,
403+
)
404+
405+
def resolve_cargo_metadata_packages(packages, cargo_metadata, platform_triples, skip_internal_rustc_placeholder_crates = True):
406+
metadata_by_fq_crate = {
407+
fq_crate(package["name"], package["version"]): package
408+
for package in cargo_metadata["packages"]
409+
}
410+
411+
return _resolve_packages(
412+
packages,
413+
metadata_by_fq_crate,
414+
platform_triples,
415+
dep_converter = cargo_metadata_dep_to_dep_dict,
416+
skip_internal_rustc_placeholder_crates = skip_internal_rustc_placeholder_crates,
417+
)
418+
396419
def _resolve_possible_deps(
397-
hub_name,
398420
packages,
399421
resolver_versions_by_name,
400422
feature_resolutions_by_fq_crate,
401423
platform_triples,
402424
platform_cfg_attrs,
403425
cfg_match_cache,
404-
dep_label_prefix,
405-
allow_missing_resolved_deps):
426+
dep_label_prefix):
406427
for package in packages:
407428
name = package["name"]
408429
deps_by_name = {}
@@ -414,9 +435,7 @@ def _resolve_possible_deps(
414435
add_to_dict(deps_by_name, dep, resolved_version)
415436

416437
for dep in package["feature_resolutions"].possible_deps:
417-
dep_package = dep.get("package")
418-
if not dep_package:
419-
dep_package = dep["name"]
438+
dep_package = _dep_package_name(dep)
420439

421440
versions = resolver_versions_by_name.get(dep_package)
422441
if not versions:
@@ -440,10 +459,8 @@ def _resolve_possible_deps(
440459

441460
dep_fq = fq_crate(dep_package, resolved_version)
442461
if dep_fq not in feature_resolutions_by_fq_crate:
443-
if allow_missing_resolved_deps:
444-
continue
445462
fail("Resolved %s dependency %s but no crate metadata was available" % (name, dep_fq))
446-
dep["bazel_target"] = "%s%s" % (dep_label_prefix or ("@%s//:" % hub_name), dep_fq)
463+
dep["bazel_target"] = "%s%s" % (dep_label_prefix, dep_fq)
447464
dep["feature_resolutions"] = feature_resolutions_by_fq_crate[dep_fq]
448465

449466
target = dep.get("target")
@@ -458,7 +475,6 @@ def _resolve_possible_deps(
458475
def resolve_cargo_workspace_members(
459476
ctx,
460477
*,
461-
hub_name,
462478
cargo_metadata,
463479
packages,
464480
workspace_members,
@@ -469,8 +485,7 @@ def resolve_cargo_workspace_members(
469485
materialize_workspace_members,
470486
validate_lockfile = True,
471487
debug = False,
472-
dep_label_prefix = None,
473-
allow_missing_resolved_deps = False,
488+
dep_label_prefix = "//:",
474489
skip_internal_rustc_placeholder_crates = True,
475490
watch_manifests = False,
476491
use_legacy_rules_rust_platforms = False):
@@ -521,15 +536,13 @@ def resolve_cargo_workspace_members(
521536
resolver_packages.append(resolver_package)
522537

523538
_resolve_possible_deps(
524-
hub_name,
525539
resolver_packages,
526540
resolver_versions_by_name,
527541
feature_resolutions_by_fq_crate,
528542
platform_triples,
529543
platform_cfg_attrs,
530544
cfg_match_cache,
531545
dep_label_prefix,
532-
allow_missing_resolved_deps,
533546
)
534547

535548
workspace_fq_deps = compute_workspace_fq_deps(workspace_members, resolver_versions_by_name)
@@ -550,16 +563,13 @@ def resolve_cargo_workspace_members(
550563
for dep in package["dependencies"]:
551564
source = dep.get("source")
552565
dep_name = dep["name"]
553-
dep_package = dep_package_name(dep)
566+
dep_package = _dep_package_name(dep)
554567
dep_fq = select_package_fq_dep(dep, fq_deps)
555568
dep_version = None
556569
if dep_fq:
557570
dep_version = dep_fq[len(dep_package) + 1:]
558571
is_first_party_dep = not source and dep_version and (dep_package, dep_version) in workspace_member_keys
559572

560-
if dep_fq and dep_fq not in feature_resolutions_by_fq_crate and allow_missing_resolved_deps:
561-
continue
562-
563573
if validate_lockfile and source and source.startswith("registry+"):
564574
req = dep["req"]
565575
fq = dep_fq
@@ -586,7 +596,7 @@ def resolve_cargo_workspace_members(
586596
fail("Resolved %s dependency %s but no crate metadata was available" % (package["name"], dep_fq))
587597

588598
if not is_first_party_dep or materialize_workspace_members:
589-
dep["bazel_target"] = "%s%s" % (dep_label_prefix or ("@%s//:" % hub_name), dep_fq)
599+
dep["bazel_target"] = "%s%s" % (dep_label_prefix, dep_fq)
590600

591601
feature_resolutions = feature_resolutions_by_fq_crate[dep_fq]
592602

0 commit comments

Comments
 (0)