@@ -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
216216def 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
237237def 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+
396419def _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(
458475def 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