From 98be335d545bb59d3ac022d4b8e67a6f11fc7b49 Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Fri, 21 Apr 2023 08:09:54 -0700 Subject: [PATCH] [move-package] Support dependency overrides (#11181) ## Description When building a dependency graph, different versions of the same (transitively) dependent package can be encountered. If this is indeed the case, a single version must be chosen by the developer to be the override, and this override must be specified in a manifest file whose package dominates all the conflicting "uses" of the dependent package. These overrides must taken into consideration during the dependency graph construction and this PR implements the relevant changes to dependency graph construction algorithm. For additional details see the doc-comments in the code as well as the PR this one is based on (https://github.com/move-language/move/pull/1023) which contains a discussion of issues encountered during development of this algorithm. ## Test Plan A comprehensive test suite is attached. --- If your changes are not user-facing and not a breaking change, you can skip the following section. Otherwise, please indicate what changed, and then add to the Release Notes section as highlighted during the release process. ### Type of Change (Check all that apply) - [x] user-visible impact ### Release notes This change allows a developer to override transitive dependencies of a package they are developing to avoid conflicts that could otherwise arise. --- .../src/resolution/dependency_graph.rs | 586 ++++++++++++++---- .../src/source_package/manifest_parser.rs | 18 +- .../src/source_package/parsed_manifest.rs | 4 +- .../tests/test_dependency_graph.rs | 40 +- .../dep_dev_dep_diamond/Move.resolved | 16 +- .../dep_good_digest/Move.resolved | 4 +- .../Move.resolved | 11 +- .../Move.resolved | 3 + .../diamond_problem_dep_conflict/Move.toml | 7 + .../deps_only/A/Move.toml | 6 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 3 + .../Move.resolved | 3 + .../Move.toml | 13 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 6 + .../Move.resolved | 1 + .../Move.toml | 22 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 7 + .../deps_only/C/Move.toml | 10 + .../Move.resolved | 3 + .../Move.toml | 28 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 7 + .../deps_only/C/Move.toml | 6 + .../Move.locked | 29 + .../Move.resolved | 236 +++++++ .../Move.toml | 13 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 6 + .../Move.locked | 30 + .../Move.resolved | 273 ++++++++ .../Move.toml | 14 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 6 + .../Move.locked | 38 ++ .../Move.resolved | 320 ++++++++++ .../Move.toml | 23 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 10 + .../Move.resolved | 3 + .../Move.toml | 20 + .../deps_only/A/Move.toml | 7 + .../deps_only/B/Move.toml | 7 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 3 + .../Move.resolved | 1 + .../Move.toml | 27 + .../deps_only/A/Move.toml | 7 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 7 + .../deps_only/E/Move.toml | 3 + .../Move.resolved | 1 + .../Move.toml | 20 + .../deps_only/A/Move.toml | 7 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 3 + .../Move.resolved | 3 + .../Move.toml | 20 + .../deps_only/A/Move.toml | 6 + .../deps_only/B/Move.toml | 7 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 3 + .../Move.resolved | 3 + .../Move.toml | 24 + .../deps_only/A/Move.toml | 7 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 7 + .../deps_only/D/Move.toml | 6 + .../deps_only/E/Move.toml | 6 + .../deps_only/F/Move.toml | 6 + .../deps_only/G/Move.toml | 3 + .../Move.locked | 47 ++ .../Move.resolved | 420 +++++++++++++ .../Move.toml | 24 + .../deps_only/A/Move.toml | 7 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 6 + .../deps_only/E/Move.toml | 3 + .../Move.resolved | 3 + .../Move.toml | 23 + .../deps_only/A/Move.toml | 8 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 6 + .../deps_only/E/Move.toml | 3 + .../diamond_problem_dep_override/Move.locked | 30 + .../Move.resolved | 285 +++++++++ .../diamond_problem_dep_override/Move.toml | 8 + .../deps_only/A/Move.toml | 6 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 3 + .../Move.locked | 43 ++ .../Move.resolved | 406 ++++++++++++ .../Move.toml | 27 + .../deps_only/A/Move.toml | 6 + .../deps_only/B1/Move.toml | 3 + .../deps_only/B2/Move.toml | 6 + .../deps_only/C/Move.toml | 7 + .../deps_only/D/Move.toml | 3 + .../deps_only/E/Move.toml | 6 + .../Move.locked | 48 ++ .../Move.resolved | 445 +++++++++++++ .../Move.toml | 25 + .../deps_only/A/Move.toml | 8 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 6 + .../deps_only/D/Move.toml | 6 + .../deps_only/E/Move.toml | 3 + .../Move.resolved | 433 +++++++++++++ .../diamond_problem_dep_with_deps/Move.toml | 28 + .../deps_only/A/Move.toml | 8 + .../deps_only/B/Move.toml | 6 + .../deps_only/C1/Move.toml | 6 + .../deps_only/C2/Move.toml | 6 + .../deps_only/D/Move.toml | 6 + .../deps_only/E/Move.toml | 3 + .../Move.resolved | 3 + .../Move.toml | 27 + .../deps_only/A/Move.toml | 8 + .../deps_only/B/Move.toml | 6 + .../deps_only/C1/Move.toml | 6 + .../deps_only/C2/Move.toml | 6 + .../deps_only/D/Move.toml | 6 + .../deps_only/E/Move.toml | 3 + .../diamond_problem_no_conflict/Move.resolved | 11 +- .../tests/test_sources/external/Move.locked | 4 +- .../tests/test_sources/external/Move.resolved | 7 +- .../test_sources/external_bad_dep/Move.locked | 4 +- .../external_bad_dep/Move.resolved | 2 +- .../test_sources/external_dev_dep/Move.locked | 8 +- .../external_dev_dep/Move.resolved | 14 +- .../test_sources/external_overlap/Move.locked | 2 +- .../external_overlap/Move.resolved | 16 +- .../test_sources/external_silent/Move.locked | 4 +- .../multiple_deps_rename/Move.resolved | 8 +- .../nested_deps_git_local/Move.resolved | 4 + .../nested_deps_override/Move.locked | 20 + .../nested_deps_override/Move.toml | 6 + .../deps_only/nested/Move.toml | 6 + .../deps_only/nested/more/Move.toml | 3 + .../tests/test_sources/one_dep/Move.resolved | 4 +- .../one_dep_assigned_address/Move.resolved | 4 +- .../Move.resolved | 4 +- .../one_dep_override/Move.compiled | 26 + .../test_sources/one_dep_override/Move.locked | 12 + .../one_dep_override/Move.resolved | 138 +++++ .../test_sources/one_dep_override/Move.toml | 9 + .../deps_only/other_dep/Move.toml | 6 + .../deps_only/other_dep/sources/B.move | 3 + .../one_dep_override/sources/OneDep.move | 6 + .../one_dep_reassigned_address/Move.resolved | 4 +- .../Move.resolved | 4 +- 164 files changed, 4833 insertions(+), 160 deletions(-) create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/ADep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/ADep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/ADep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B1/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B2/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C1/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C2/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/A/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/B/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C1/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C2/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/D/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/E/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.compiled create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.locked create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.resolved create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move create mode 100644 external-crates/move/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move diff --git a/external-crates/move/tools/move-package/src/resolution/dependency_graph.rs b/external-crates/move/tools/move-package/src/resolution/dependency_graph.rs index f59088add611a..b1ed96cf9cf2f 100644 --- a/external-crates/move/tools/move-package/src/resolution/dependency_graph.rs +++ b/external-crates/move/tools/move-package/src/resolution/dependency_graph.rs @@ -42,6 +42,29 @@ use super::{ /// /// In order to be `BuildConfig` agnostic, it contains `dev-dependencies` as well as `dependencies` /// and labels edges in the graph accordingly, as `DevOnly`, or `Always` dependencies. +/// +/// When building a dependency graph, different versions of the same (transitively) dependent +/// package can be encountered. If this is indeed the case, a single version must be chosen by the +/// developer to be the override, and this override must be specified in a manifest file whose +/// package dominates all the conflicting "uses" of the dependent package. These overrides are taken +/// into consideration during the dependency graph construction. +/// +/// When constructing the graph (top to bottom) for internal dependencies (external dependencies are +/// batch-processed at the end of the graph construction), we maintain a set of the current +/// overrides collected when processing dependencies (starting with an empty set at the root package). +/// +/// When processing dependencies of a given package, we process overrides first to collect a list of +/// overrides to be added to the set (if they are not yet in the set - outer overrides "win") and +/// then process non-overridden dependencies using a freshly updated overrides set. We use this +/// overrides set when attempting to insert a package into the graph (with an entry for this package +/// already existing or not) via the `process_graph_entry` function. After a package is fully +/// processed, remove its own overrides from the set. +/// +/// External dependencies are provided by external resolvers as fully formed dependency sub-graphs +/// that need to be inserted into the "main" dependency graph being constructed. Whenever an +/// external dependency is encountered, it's "recorded" along with the set of overrides available at +/// the point of sub-graph insertion, and batch-merged (using the `merge` function) after +/// construction of the entire internally resolved graph is completed. #[derive(Debug, Clone)] pub struct DependencyGraph { /// Path to the root package and its name (according to its manifest) @@ -61,12 +84,25 @@ pub struct DependencyGraph { pub always_deps: BTreeSet, } -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, Eq)] pub struct Package { pub kind: PM::DependencyKind, pub version: Option, /// Optional field set if the package was externally resolved. resolver: Option, + /// Set if the package was inserted while some overrides were active. + overridden_path: bool, +} + +impl PartialEq for Package { + fn eq(&self, other: &Self) -> bool { + // comparison should neither contain overridden_path (as it's only used to determine if + // package should be re-inspected) nor the type of resolver (as it would actually lead to + // incorrect result when comparing packages during insertion of externally resolved ones - + // an internally resolved existing package in the graph would not be recognized as a + // potential different version of the externally resolved one) + self.kind == other.kind && self.version == other.version + } } #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] @@ -74,6 +110,7 @@ pub struct Dependency { pub mode: DependencyMode, pub subst: Option, pub digest: Option, + pub dep_override: PM::DepOverride, } /// Indicates whether one package always depends on another, or only in dev-mode. @@ -91,6 +128,8 @@ pub struct ExternalRequest { to: Symbol, resolver: Symbol, pkg_path: PathBuf, + /// overrides at the point of external graph insertion + overrides: BTreeMap, } /// Wrapper struct to display a package as an inline table in the lock file (matching the @@ -135,6 +174,7 @@ impl DependencyGraph { &root_path, dependency_cache, &mut external_requests, + &mut BTreeMap::new(), progress_output, ) .with_context(|| { @@ -150,10 +190,19 @@ impl DependencyGraph { to, resolver, pkg_path, + overrides, } in external_requests { graph - .resolve_externally(mode, from, to, resolver, &pkg_path, progress_output) + .resolve_externally( + mode, + from, + to, + resolver, + &pkg_path, + &overrides, + progress_output, + ) .with_context(|| { format!( "Failed to resolve dependencies for package '{}'", @@ -202,6 +251,7 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, }, ); } @@ -219,6 +269,7 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, }, ); } @@ -255,6 +306,7 @@ impl DependencyGraph { kind: source.kind, version: source.version, resolver: None, + overridden_path: false, }; match package_table.entry(pkg_name) { @@ -287,6 +339,7 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, }, ); } @@ -304,6 +357,7 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, }, ); } @@ -385,15 +439,30 @@ impl DependencyGraph { Ok(()) } - /// Add the graph in `extension` to `self` consuming it in the process. Assumes the root of - /// `extension` is the only shared node between the two, and fails if this is not the case. - /// Labels packages coming from `extension` as being resolved by `resolver`. + /// A "root" function responsible for adding the graph in `extension` to `self` (the core of the + /// merging process is implemented recursively in the `merge_pkg` function). Packages can be + /// shared between the two as long as either: + /// - they are consistent (have the same name and the same set of dependencies) + /// - if a valid override exists for the otherwise conflicting packages + /// + /// Merging starts by creating an edge from the package containing the extension as its + /// dependency (`from` argument) to the package being the "root" of the extension + /// (`merged_pkg_name` argument). During merge, which happens on a per-package basis in the + /// `merge_pkg` function, packages coming from `extension` are labeled as being resolved by + /// `resolver`. /// /// It is an error to attempt to merge into `self` after its `always_deps` (the set of packages /// that are always transitive dependencies of its root, regardless of mode) has been /// calculated. This usually happens when the graph is created, so this function is intended /// primarily for internal use, but is exposed for testing. - pub fn merge(&mut self, extension: DependencyGraph, resolver: Symbol) -> Result<()> { + pub fn merge( + &mut self, + from: PM::PackageName, + merged_pkg_name: PM::PackageName, + extension: DependencyGraph, + resolver: Symbol, + overrides: &BTreeMap, + ) -> Result<()> { let DependencyGraph { root_package: ext_root, package_graph: ext_graph, @@ -415,45 +484,86 @@ impl DependencyGraph { bail!("Merging dependencies into a graph after calculating its 'always' dependencies"); } - for (ext_name, mut ext_pkg) in ext_table { - ext_pkg.resolver = Some(resolver); + if ext_table.is_empty() { + // the external graph is effectively empty - nothing to merge + return Ok(()); + } - // The root package is not present in the package table (because it doesn't have a - // source). If it appears in the other table, it indicates a cycle. - if ext_name == self.root_package { - bail!( - "Conflicting dependencies found:\n{0} = 'root'\n{0} = {1}", - ext_name, - PackageWithResolverTOML(&ext_pkg), - ); - } + // unwrap safe as the table must have the package if the graph has it + let merged_pkg = ext_table.get(&merged_pkg_name).unwrap(); + self.merge_pkg( + merged_pkg.clone(), + merged_pkg_name, + &ext_graph, + &ext_table, + resolver, + overrides, + )?; + // unwrap is safe as all edges have a Dependency weight + let merged_dep = ext_graph.edge_weight(from, merged_pkg_name).unwrap(); + self.package_graph + .add_edge(from, merged_pkg_name, merged_dep.clone()); - match self.package_table.entry(ext_name) { - Entry::Vacant(entry) => { - entry.insert(ext_pkg); - } + Ok(()) + } - // Seeing the same package in `extension` is OK only if it has the same set of - // dependencies as the existing one.i - Entry::Occupied(_) => { - let (self_deps, ext_deps) = - pkg_deps_equal(ext_name, &self.package_graph, &ext_graph); - if self_deps != ext_deps { - bail!( - "Conflicting dependencies found for '{ext_name}' during external resolution by '{resolver}':\n{}{}", - format_deps("\nExternal dependencies not found:", self_deps), - format_deps("\nNew external dependencies:", ext_deps), - ); - } - } - } + /// Recursively merge package from an `extension` graph (resolved by an external resolver) to + /// `self`. The extension graph is traversed in a depth-first manner, successively adding + /// packages and their connecting edges to `self` via the `process_graph_entry` + /// function. Additionally, during traversal the algorithm detects which of the sub-graph's + /// packages need to be overridden (in which case their dependencies in `extension` should no + /// longer be inserted into `self`). + fn merge_pkg( + &mut self, + mut ext_pkg: Package, + ext_name: PM::PackageName, + ext_graph: &DiGraphMap, + ext_table: &BTreeMap, + resolver: Symbol, + overrides: &BTreeMap, + ) -> Result<()> { + ext_pkg.resolver = Some(resolver); + + // The root package is not present in the package table (because it doesn't have a + // source). If it appears in the other table, it indicates a cycle. + if ext_name == self.root_package { + bail!( + "Conflicting dependencies found:\n{0} = 'root'\n{0} = {1}", + ext_name, + PackageWithResolverTOML(&ext_pkg), + ); } - // Because all the packages in `extensions`'s package table didn't exist in `self`'s, all - // `ext_graph`'s edges are known to not occur in `self.package_graph` and can be added - // without worrying about introducing duplicate edges. - for (from, to, dep) in ext_graph.all_edges() { - self.package_graph.add_edge(from, to, dep.clone()); + if self + .process_graph_entry( + &ext_pkg, + ext_name, + overrides, + Some(ext_graph), + Some(resolver), + )? + .is_some() + { + // existing entry was found + return Ok(()); + } + + // if we are here, it means that a new package has been inserted into the graph - we need to + // process its dependencies and add appropriate edges to them + for dst in ext_graph.neighbors_directed(ext_name, Direction::Outgoing) { + // unwrap safe as the table must have the package if the graph has it + let dst_pkg = ext_table.get(&dst).unwrap(); + self.merge_pkg( + dst_pkg.clone(), + dst, + ext_graph, + ext_table, + resolver, + overrides, + )?; + // unwrap is safe as all edges have a Dependency weight + let ext_dep = ext_graph.edge_weight(ext_name, dst).unwrap(); + self.package_graph.add_edge(ext_name, dst, ext_dep.clone()); } Ok(()) @@ -493,55 +603,169 @@ impl DependencyGraph { package_path: &Path, dependency_cache: &mut DependencyCache, external_requests: &mut Vec, + overrides: &mut BTreeMap, progress_output: &mut Progress, ) -> Result<()> { let from = package.package.name; - for (to, dep) in &package.dependencies { - match dep { - PM::Dependency::External(resolver) => external_requests.push(ExternalRequest { - mode: DependencyMode::Always, - from, - to: *to, - resolver: *resolver, - pkg_path: package_path.to_path_buf(), - }), - PM::Dependency::Internal(dep) => self.resolve_internally( - DependencyMode::Always, - from, - *to, - parent, - dep.clone(), - dependency_cache, - external_requests, - progress_output, - )?, + + self.extend_with_dependencies( + DependencyMode::Always, + &package.dependencies, + from, + parent, + package_path, + dependency_cache, + external_requests, + overrides, + progress_output, + )?; + + self.extend_with_dependencies( + DependencyMode::DevOnly, + &package.dev_dependencies, + from, + parent, + package_path, + dependency_cache, + external_requests, + overrides, + progress_output, + )?; + + Ok(()) + } + + /// Iterate over the set of a given package's dependencies (overridden dependencies first). to + /// add them to the dependency graph. + fn extend_with_dependencies( + &mut self, + mode: DependencyMode, + dependencies: &PM::Dependencies, + from: Symbol, + parent: &PM::DependencyKind, + package_path: &Path, + dependency_cache: &mut DependencyCache, + external_requests: &mut Vec, + overrides: &mut BTreeMap, + progress_output: &mut Progress, + ) -> Result<()> { + // partition dep into overrides and not + let (overridden_deps, deps): (Vec<_>, Vec<_>) = + dependencies.iter().partition(|(_, dep)| { + matches!( + dep, + PM::Dependency::Internal(PM::InternalDependency { + dep_override: true, + .. + }) + ) + }); + + // Process overrides first to include them in processing of non-overridden deps. It is + // important to do so as a dependency override may "prune" portions of a dependency graph + // that would otherwise prevent other dependencies from kicking in. In other words, a given + // override may be the dominant one only if another override eliminates some graph + // edges. See diamond_problem_dep_transitive_nested_override for an example (in tests) of + // such situation. + // + // It's also pretty important that we do not extend overrides with the override being + // currently processed. The reason for it is that in order to detect incorrect overrides + // (such that do not dominate all package "uses") we rely on the package being reachable via + // different paths: + // - if it's reached via an overridden path again for the same override, it's OK + // - if it's reached via an overridden path again for a different override, it's an error + // - if it's reached via a non-overridden path, it's an error (insufficient override) + // + // While the first type of error could still be detected if we injected the currently + // processed override into the overrides set, the second one would not. Consider + // diamond_problem_dep_incorrect_override_occupied example (in tests) to see a situation + // when a non-overridden path is chosen first to insert the package and then insufficient + // override could be considered correct if we injected it into the overrides set (as we will + // not have another path to explore that would disqualify it). + let mut local_overrides = BTreeMap::new(); + for (to, dep) in overridden_deps { + let inserted_pkg = self.extend_with_dep( + mode, + from, + *to, + dep, + parent, + package_path, + dependency_cache, + external_requests, + overrides, + progress_output, + )?; + // do not include already overridden overrides + if let Some(pkg) = inserted_pkg { + if !overrides.contains_key(to) { + local_overrides.insert(*to, pkg); + } } } - for (to, dep) in &package.dev_dependencies { - match dep { - PM::Dependency::External(resolver) => external_requests.push(ExternalRequest { - mode: DependencyMode::DevOnly, + // add new overrides to the set + overrides.extend(local_overrides.clone()); + + for (to, dep) in deps { + self.extend_with_dep( + mode, + from, + *to, + dep, + parent, + package_path, + dependency_cache, + external_requests, + overrides, + progress_output, + )?; + } + // remove locally added overrides from the set + overrides.retain(|k, _| !local_overrides.contains_key(k)); + Ok(()) + } + + /// Extend the dependency graph with a single dependent package. + fn extend_with_dep( + &mut self, + mode: DependencyMode, + from: Symbol, + to: Symbol, + dep: &PM::Dependency, + parent: &PM::DependencyKind, + package_path: &Path, + dependency_cache: &mut DependencyCache, + external_requests: &mut Vec, + overrides: &mut BTreeMap, + progress_output: &mut Progress, + ) -> Result> { + let inserted_pkg = match dep { + PM::Dependency::External(resolver) => { + external_requests.push(ExternalRequest { + mode, from, - to: *to, + to, resolver: *resolver, pkg_path: package_path.to_path_buf(), - }), - - PM::Dependency::Internal(dep) => self.resolve_internally( - DependencyMode::DevOnly, - from, - *to, - parent, - dep.clone(), - dependency_cache, - external_requests, - progress_output, - )?, + overrides: overrides.clone(), + }); + None } - } - Ok(()) + PM::Dependency::Internal(dep) => Some(self.resolve_internally( + mode, + from, + to, + parent, + dep.clone(), + dependency_cache, + external_requests, + overrides, + progress_output, + )?), + }; + Ok(inserted_pkg) } /// Resolve the packages described at dependency `to` of package `from` with manifest at path @@ -558,6 +782,7 @@ impl DependencyGraph { to: PM::PackageName, resolver: Symbol, package_path: &Path, + overrides: &BTreeMap, progress_output: &mut Progress, ) -> Result<()> { let mode_label = if mode == DependencyMode::DevOnly { @@ -614,9 +839,10 @@ impl DependencyGraph { format!("Parsing response from '{resolver}' for dependency '{to}' of package '{from}'") })?; - self.merge(sub_graph, resolver).with_context(|| { - format!("Adding dependencies from {resolver} for dependency '{to}' in '{from}'") - })?; + self.merge(from, to, sub_graph, resolver, overrides) + .with_context(|| { + format!("Adding dependencies from {resolver} for dependency '{to}' in '{from}'") + })?; Ok(()) } @@ -636,27 +862,33 @@ impl DependencyGraph { dep: PM::InternalDependency, dependency_cache: &mut DependencyCache, external_requests: &mut Vec, + overrides: &mut BTreeMap, progress_output: &mut Progress, - ) -> Result<()> { + ) -> Result { let PM::InternalDependency { kind, version, subst, digest, + dep_override, } = dep; + // are there active overrides for this path in the graph? + let overridden_path = !overrides.is_empty(); let mut pkg = Package { kind, version, resolver: None, + overridden_path, }; pkg.kind.reroot(parent)?; - self.process_dependency( + let inserted_pkg = self.process_dependency( pkg, to, dependency_cache, external_requests, + overrides, progress_output, )?; self.package_graph.add_edge( @@ -666,42 +898,32 @@ impl DependencyGraph { mode, subst, digest, + dep_override, }, ); - - Ok(()) + Ok(inserted_pkg) } - /// Ensures that package `pkg_name` and all its transitive dependencies are present in the - /// graph, all sourced from their respective packages, `pkg`. Fails if any of the packages in - /// the dependency sub-graph rooted at `pkg_name` are already present in `self` but sourced from - /// a different dependency. + /// Ensure that package `pkg_name` and all its transitive dependencies are present in the graph, + /// all sourced from their respective packages, `pkg`. Fails if any of the packages in the + /// dependency sub-graph rooted at `pkg_name` are already present in `self` but sourced from a + /// different dependency. fn process_dependency( &mut self, pkg: Package, name: PM::PackageName, dependency_cache: &mut DependencyCache, external_requests: &mut Vec, + overrides: &mut BTreeMap, progress_output: &mut Progress, - ) -> Result<()> { - let pkg = match self.package_table.entry(name) { - Entry::Vacant(entry) => entry.insert(pkg), - - // Seeing the same package again, pointing to the same dependency: OK, return early. - Entry::Occupied(entry) if entry.get() == &pkg => { - return Ok(()); - } - - // Seeing the same package again, but pointing to a different dependency: Not OK. - Entry::Occupied(entry) => { - bail!( - "Conflicting dependencies found:\n{0} = {1}\n{0} = {2}", - name, - PackageWithResolverTOML(entry.get()), - PackageWithResolverTOML(&pkg), - ); - } - }; + ) -> Result { + if let Some(existing_entry) = self.process_graph_entry( + &pkg, name, overrides, /* external_subgraph */ None, /* resolver */ None, + )? { + // existing entry was found + return Ok(existing_entry); + } + // a package has been inserted into the graph - process its dependencies dependency_cache .download_and_update_if_remote(name, &pkg.kind, progress_output) @@ -711,6 +933,7 @@ impl DependencyGraph { let manifest = parse_move_manifest_from_file(&pkg_path) .with_context(|| format!("Parsing manifest for '{}'", name))?; + let inserted_pkg = pkg.clone(); let kind = pkg.kind.clone(); self.extend_graph( &kind, @@ -718,9 +941,149 @@ impl DependencyGraph { &pkg_path, dependency_cache, external_requests, + overrides, progress_output, ) - .with_context(|| format!("Resolving dependencies for package '{}'", name)) + .with_context(|| format!("Resolving dependencies for package '{}'", name))?; + Ok(inserted_pkg) + } + + /// Attempt to insert a newly encountered package to the graph which may or may not already + /// contain an entry for the same package name: + /// - if no package exists in the graph, insert it + /// - if a conflicting package already exists in the graph, override it if an override can be + /// found in the set (if it does not, report an error) + /// - if the same package already exists in the graph, and this package is on the "override + /// path" keep checking its dependencies to make sure that previously used overrides are + /// correct (dominate all uses of the package); a package is marked to be on the "override + /// path" if it is inserted into the graph while the overrides set is non-empty, making this + /// mark into a coarse indicator of whether portions of the graph need to be (re)validated. + fn process_graph_entry( + &mut self, + pkg: &Package, + name: PM::PackageName, + overrides: &BTreeMap, + external_subgraph: Option<&DiGraphMap>, + resolver: Option, + ) -> Result> { + match self.package_table.entry(name) { + Entry::Vacant(entry) => { + // Note that we simply insert a dependent package here without checking the + // overrides set. The reason for it is that if there was an override for this entry, + // it would have already been inserted as the overrides are processed before + // non-overridden dependencies (and only after they are processed, the overrides set + // is populated). + entry.insert(pkg.clone()); + Ok(None) + } + + // Seeing the same package again, pointing to the same dependency: OK, return early but + // only if seeing a package that was not on an "override path" (was created when no + // override was active); otherwise we need to keep inspecting the graph to make sure + // that the overrides introduced on this path correctly dominate all "uses" of a given + // package + Entry::Occupied(entry) if entry.get() == pkg => { + if let Some(ext_graph) = external_subgraph { + // when trying to insert a package into the graph as part of merging an external + // subgraph it's not enough to check for package equality as it does not capture + // dependencies that may differ between the internally and externally resolved + // packages. + let (self_deps, ext_deps) = + pkg_deps_equal(name, &self.package_graph, ext_graph); + if self_deps != ext_deps { + bail!( + "Conflicting dependencies found for '{name}' during external resolution by '{}':\n{}{}", + resolver.unwrap(), // safe because external_subgraph exists + format_deps("\nExternal dependencies not found:", self_deps), + format_deps("\nNew external dependencies:", ext_deps), + ); + } + } + if entry.get().overridden_path { + // check if acyclic to avoid infinite recursion - see the + // diamond_problem_dep_incorrect_override_cycle (in tests) for an example of + // such situation + self.check_acyclic()?; + // inspect the rest of the graph and report error if a problem is found + self.override_verify(pkg, name, overrides)?; + } + Ok(Some(pkg.clone())) + } + + // Seeing the same package again, but pointing to a different dependency: Not OK unless + // there is an override. + Entry::Occupied(mut entry) => { + if let Some(overridden_pkg) = overrides.get(&name) { + // override found - use it and return - its dependencies have already been + // processed the first time override pkg was processed (before it was inserted + // into overrides set) + if overridden_pkg != entry.get() { + entry.insert(overridden_pkg.clone()); + } + Ok(Some(overridden_pkg.clone())) + } else { + bail!( + "Conflicting dependencies found:\n{0} = {1}\n{0} = {2}", + name, + PackageWithResolverTOML(entry.get()), + PackageWithResolverTOML(pkg), + ); + } + } + } + } + + /// Inspect a portion of the graph by simply following existing nodes and edges. If during + /// inspection we encounter a package inserted as a result of an override but this override is + /// not in the current overrides set (or a different override for the same package is in the + /// overrides set), then the previously used override was incorrect (insufficient) and an error + /// must be reported. + fn override_verify( + &self, + pkg: &Package, + name: PM::PackageName, + overrides: &BTreeMap, + ) -> Result<()> { + // check if any (should be 0 or 1) edges are the overrides of pkg + let pkg_overrides: Vec<_> = self + .package_graph + .neighbors_directed(name, Direction::Incoming) + .filter(|src| { + // unwrap is safe as all edges have a Dependency weight + self.package_graph + .edge_weight(*src, name) + .unwrap() + .dep_override + }) + .collect(); + + if !pkg_overrides.is_empty() { + let Some(overridden_pkg) = overrides.get(&name) else { + bail!("Incorrect override of {} in {} (an override should dominate all uses of the overridden package)", name, pkg_overrides[0]); + }; + if overridden_pkg != pkg { + // This should never happen as we process overridden dependencies first. Since the + // overridden dependency is omitted from the set of all overrides (see a comment in + // extend_with_dependencies to see why), a conflicting override will be caught as a + // "simple" conflicting dependency + bail!( + "Incorrect override of {} in {} (conflicting overrides)", + name, + pkg_overrides[0] + ); + } + } + + // recursively check all other packages in the subgraph + for dst in self + .package_graph + .neighbors_directed(name, Direction::Outgoing) + { + // unwrap is safe as dst is in the graph so it must also be in package table + let dst_pkg = self.package_table.get(&dst).unwrap(); + self.override_verify(dst_pkg, dst, overrides)?; + } + Ok(()) } /// Check that every dependency in the graph, excluding the root package, is present in the @@ -797,6 +1160,7 @@ impl<'a> fmt::Display for PackageTOML<'a> { kind, version, resolver: _, + overridden_path: _, } = self.0; f.write_str("{ ")?; @@ -871,6 +1235,7 @@ impl<'a> fmt::Display for DependencyTOML<'a> { mode: _, subst, digest, + dep_override: _, }, ) = self; @@ -959,8 +1324,7 @@ fn format_deps(msg: &str, dependencies: Vec<(&Dependency, PM::PackageName)>) -> s } -/// Checks if dependencies of a given package in two different dependency graph maps are the -/// same. +/// Check if dependencies of a given package in two different dependency graph maps are the same. fn pkg_deps_equal<'a>( pkg_name: Symbol, pkg_graph: &'a DiGraphMap, diff --git a/external-crates/move/tools/move-package/src/source_package/manifest_parser.rs b/external-crates/move/tools/move-package/src/source_package/manifest_parser.rs index 25971a49227ff..da082852a27f3 100644 --- a/external-crates/move/tools/move-package/src/source_package/manifest_parser.rs +++ b/external-crates/move/tools/move-package/src/source_package/manifest_parser.rs @@ -334,6 +334,11 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result .transpose()?; let version = table.remove("version").map(parse_version).transpose()?; let digest = table.remove("digest").map(parse_digest).transpose()?; + let dep_override = table + .remove("override") + .map(parse_dep_override) + .transpose()? + .map_or(false, |o| o); let kind = match ( table.remove("local"), @@ -350,7 +355,10 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result bail!("Local source path not a string") }; - PM::DependencyKind::Local(local) + PM::DependencyKind::Local( + // with allow_cwd_parent set to true, it never fails + PM::normalize_path(local, true /* allow_cwd_parent */).unwrap(), + ) } (None, subdir, Some(git_url), None) => { @@ -433,6 +441,7 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result subst, version, digest, + dep_override, })) } @@ -502,6 +511,13 @@ fn parse_digest(tval: TV) -> Result { Ok(PM::PackageDigest::from(digest_str)) } +fn parse_dep_override(tval: TV) -> Result { + if !tval.is_bool() { + bail!("Invalid dependency override value"); + } + Ok(tval.as_bool().unwrap()) +} + // check that only recognized names are provided at the top-level fn warn_if_unknown_field_names(table: &toml::map::Map, known_names: &[&str]) { let mut unknown_names = BTreeSet::new(); diff --git a/external-crates/move/tools/move-package/src/source_package/parsed_manifest.rs b/external-crates/move/tools/move-package/src/source_package/parsed_manifest.rs index 1337d9113b676..7ac1f38792bda 100644 --- a/external-crates/move/tools/move-package/src/source_package/parsed_manifest.rs +++ b/external-crates/move/tools/move-package/src/source_package/parsed_manifest.rs @@ -16,6 +16,7 @@ pub type NamedAddress = Symbol; pub type PackageName = Symbol; pub type FileName = Symbol; pub type PackageDigest = Symbol; +pub type DepOverride = bool; pub type AddressDeclarations = BTreeMap>; pub type DevAddressDeclarations = BTreeMap; @@ -55,6 +56,7 @@ pub struct InternalDependency { pub subst: Option, pub version: Option, pub digest: Option, + pub dep_override: DepOverride, } #[derive(Debug, Clone, Eq, PartialEq)] @@ -154,7 +156,7 @@ impl Default for DependencyKind { /// or is prefixed by accesses to parent directories when `allow_cwd_parent` is false. /// /// Returns the normalized path on success. -fn normalize_path(path: impl AsRef, allow_cwd_parent: bool) -> Result { +pub fn normalize_path(path: impl AsRef, allow_cwd_parent: bool) -> Result { use Component::*; let mut stack = Vec::new(); diff --git a/external-crates/move/tools/move-package/tests/test_dependency_graph.rs b/external-crates/move/tools/move-package/tests/test_dependency_graph.rs index 2b19b1da94e6e..caded4fac8784 100644 --- a/external-crates/move/tools/move-package/tests/test_dependency_graph.rs +++ b/external-crates/move/tools/move-package/tests/test_dependency_graph.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use std::{ - collections::BTreeSet, + collections::{BTreeMap, BTreeSet}, fs::{self, File}, io::Write, path::PathBuf, @@ -184,7 +184,15 @@ fn merge_simple() { ) .expect("Reading inner"); - assert!(outer.merge(inner, Symbol::from("")).is_ok()); + assert!(outer + .merge( + Symbol::from("A"), + Symbol::from("A"), + inner, + Symbol::from(""), + &BTreeMap::new(), + ) + .is_ok()); assert_eq!( outer.topological_order(), @@ -214,7 +222,15 @@ fn merge_into_root() { ) .expect("Reading inner"); - assert!(outer.merge(inner, Symbol::from("")).is_ok()); + assert!(outer + .merge( + Symbol::from("Root"), + Symbol::from("A"), + inner, + Symbol::from(""), + &BTreeMap::new(), + ) + .is_ok()); assert_eq!( outer.topological_order(), @@ -243,7 +259,7 @@ fn merge_detached() { ) .expect("Reading inner"); - let Err(err) = outer.merge(inner, Symbol::from("")) else { + let Err(err) = outer.merge(Symbol::from("OtherDep"), Symbol::from("A"), inner, Symbol::from(""), &BTreeMap::new()) else { panic!("Inner's root is not part of outer's graph, so this should fail"); }; @@ -267,7 +283,7 @@ fn merge_after_calculating_always_deps() { ) .expect("Reading inner"); - let Err(err) = outer.merge(inner, Symbol::from("")) else { + let Err(err) = outer.merge(Symbol::from("A"),Symbol::from("A"), inner, Symbol::from(""), &BTreeMap::new()) else { panic!("Outer's always deps have already been calculated so this should fail"); }; @@ -295,7 +311,15 @@ fn merge_overlapping() { ) .expect("Reading inner"); - assert!(outer.merge(inner, Symbol::from("")).is_ok()); + assert!(outer + .merge( + Symbol::from("B"), + Symbol::from("A"), + inner, + Symbol::from(""), + &BTreeMap::new(), + ) + .is_ok()); } #[test] @@ -319,7 +343,7 @@ fn merge_overlapping_different_deps() { ) .expect("Reading inner"); - let Err(err) = outer.merge(inner, Symbol::from("")) else { + let Err(err) = outer.merge(Symbol::from("B"),Symbol::from("A"), inner, Symbol::from(""), &BTreeMap::new()) else { panic!("Outer and inner mention package A which has different dependencies in both."); }; @@ -347,7 +371,7 @@ fn merge_cyclic() { ) .expect("Reading inner"); - let Err(err) = outer.merge(inner, Symbol::from("")) else { + let Err(err) = outer.merge(Symbol::from("B"), Symbol::from("Root"), inner, Symbol::from(""), &BTreeMap::new()) else { panic!("Inner refers back to outer's root"); }; diff --git a/external-crates/move/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved index f5f4bc18b2d3a..5edc3e77e4210 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved @@ -69,6 +69,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "B": Package { kind: Local( @@ -76,6 +77,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "C": Package { kind: Local( @@ -83,6 +85,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "D": Package { kind: Local( @@ -90,6 +93,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -142,6 +146,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -154,6 +159,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -189,6 +195,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -266,21 +273,23 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, digest: None, + dep_override: false, }, ), "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -288,11 +297,12 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved index d9f0967f085f6..106a51f969f5d 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -117,6 +118,7 @@ ResolvedGraph { digest: Some( "6A88B7888D6049EB0121900E22B6FA2C0E702F042C8C8D4FD62AD5C990B9F9A8", ), + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved index 692aa398ff5bf..357edc8d63d2d 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved @@ -51,6 +51,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "B": Package { kind: Local( @@ -58,6 +59,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "C": Package { kind: Local( @@ -65,6 +67,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -123,6 +126,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -171,6 +175,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -238,17 +243,18 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, digest: None, + dep_override: false, }, ), "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: Some( { @@ -259,6 +265,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved new file mode 100644 index 0000000000000..c20fcea9f19af --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Conflicting dependencies found: +C = { local = "deps_only/C", version = "2.0.0" } +C = { local = "deps_only/C", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml new file mode 100644 index 0000000000000..69cc1e8ca1412 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000000..b4bded6d53fd6 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000000..1ee8a9c06d7d9 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml new file mode 100644 index 0000000000000..73ed83696146c --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "C" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved new file mode 100644 index 0000000000000..e4b751a0e3d80 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Adding dependencies from ../resolvers/successful.sh for dependency 'A' in 'Root': Conflicting dependencies found: +ADep = { local = "deps_only/ADep", version = "1.0.0" } +ADep = { local = "deps_only/ADep" } # Resolved by ../resolvers/successful.sh diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml new file mode 100644 index 0000000000000..3a04d8d3e69be --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml @@ -0,0 +1,13 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B" } + +[dependencies.A] +resolver = "../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000000..74ba633d5270d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml new file mode 100644 index 0000000000000..27032db1a45f4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "ADep" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000000..7b3d1f6cd2846 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.resolved new file mode 100644 index 0000000000000..9a30327390b15 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.resolved @@ -0,0 +1 @@ +Failed to resolve dependencies for package 'Root': Adding dependencies from ../../../resolvers/successful.sh for dependency 'A' in 'C': Incorrect override of ADep in B (an override should dominate all uses of the overridden package) diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.toml new file mode 100644 index 0000000000000..183e027601d78 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/Move.toml @@ -0,0 +1,22 @@ +# Dependency graph and and override (ov) +# C's dependency on A and ADep is externally resolved (override is incorrect) +# +# +----+ +# +---->| C |----+ +# | +----+ | +# | | +# +----+ | +---->+----+------>+-------+ +# |Root|----| | A | | ADep | +# +----+ | +---->+----+ +-->+-------+ +# | | | +# | +----+----+ ov(1) | +# +---->| B |-------------------+ +# +----+ + +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/A/Move.toml new file mode 100644 index 0000000000000..74ba633d5270d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/ADep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/ADep/Move.toml new file mode 100644 index 0000000000000..27032db1a45f4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/ADep/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "ADep" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/B/Move.toml new file mode 100644 index 0000000000000..08d399ad8e5b5 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/B/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +A = { local = "../A" } +ADep = { local = "../ADep", version = "1.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/C/Move.toml new file mode 100644 index 0000000000000..88e670eb24d9b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v1/deps_only/C/Move.toml @@ -0,0 +1,10 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies.A] +resolver = "../../../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.resolved new file mode 100644 index 0000000000000..e4b751a0e3d80 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Adding dependencies from ../resolvers/successful.sh for dependency 'A' in 'Root': Conflicting dependencies found: +ADep = { local = "deps_only/ADep", version = "1.0.0" } +ADep = { local = "deps_only/ADep" } # Resolved by ../resolvers/successful.sh diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.toml new file mode 100644 index 0000000000000..49ff712b99511 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/Move.toml @@ -0,0 +1,28 @@ +# Dependency graph and and override (ov) +# Root's dependency on A and ADep is externally resolved (override is incorrect) +# +# +----+ +# +---->| A |------+ +# | +----+ | +# | | +# +----+ | +---------------->+-------+ +# |Root|----| +---------------->| ADep | +# +----+ | | +--->+-------+ +# | ov(1) | | +# | +----+------+ +----+ | +# +---->| B |--------->| C |---+ +# +----+ +----+ + +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B" } + +[dependencies.A] +resolver = "../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/A/Move.toml new file mode 100644 index 0000000000000..74ba633d5270d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/ADep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/ADep/Move.toml new file mode 100644 index 0000000000000..27032db1a45f4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/ADep/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "ADep" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/B/Move.toml new file mode 100644 index 0000000000000..bf53f3f30b507 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/B/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep", version = "1.0.0", override = true } +C = { local = "../C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/C/Move.toml new file mode 100644 index 0000000000000..9c4cc80e09e32 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_incorrect_override_v2/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked new file mode 100644 index 0000000000000..1302689e4f633 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked @@ -0,0 +1,29 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "ADep" }, +] + +[[move.package]] +name = "ADep" +source = { local = "deps_only/ADep" } + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "ADep" }, +] diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved new file mode 100644 index 0000000000000..5d4a38380acb7 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved @@ -0,0 +1,236 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_external_no_conflict", + root_package: "Root", + package_graph: { + "Root": [ + ( + "B", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ], + "B": [ + ( + "ADep", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "ADep": [ + ( + "B", + Incoming, + ), + ( + "A", + Incoming, + ), + ], + "A": [ + ( + "ADep", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: Some( + "../resolvers/successful.sh", + ), + overridden_path: false, + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: None, + resolver: None, + overridden_path: false, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: false, + }, + }, + always_deps: { + "A", + "ADep", + "B", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "ADep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "ADep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": External( + "../resolvers/successful.sh", + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml new file mode 100644 index 0000000000000..3a04d8d3e69be --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml @@ -0,0 +1,13 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B" } + +[dependencies.A] +resolver = "../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000000..74ba633d5270d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml new file mode 100644 index 0000000000000..27032db1a45f4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "ADep" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000000..9829975c15e96 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked new file mode 100644 index 0000000000000..a2c2956e760f3 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked @@ -0,0 +1,30 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "ADep" }, + { name = "B" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "ADep" }, +] + +[[move.package]] +name = "ADep" +source = { local = "deps_only/ADep", version = "1.0.0" } + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "ADep" }, +] diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved new file mode 100644 index 0000000000000..708fb3ca06e21 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved @@ -0,0 +1,273 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_external_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "ADep", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ], + "ADep": [ + ( + "Root", + Incoming, + ), + ( + "B", + Incoming, + ), + ( + "A", + Incoming, + ), + ], + "B": [ + ( + "ADep", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "A": [ + ( + "ADep", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: Some( + "../resolvers/successful.sh", + ), + overridden_path: false, + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: true, + }, + }, + always_deps: { + "A", + "ADep", + "B", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "ADep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "ADep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": External( + "../resolvers/successful.sh", + ), + "ADep": Internal( + InternalDependency { + kind: Local( + "deps_only/ADep", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml new file mode 100644 index 0000000000000..ec66c555ab896 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml @@ -0,0 +1,14 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B" } +ADep = { local = "./deps_only/ADep", version = "1.0.0", override = true } + +[dependencies.A] +resolver = "../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml new file mode 100644 index 0000000000000..74ba633d5270d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml new file mode 100644 index 0000000000000..27032db1a45f4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "ADep" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml new file mode 100644 index 0000000000000..7b3d1f6cd2846 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.locked new file mode 100644 index 0000000000000..6baaa304eb164 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.locked @@ -0,0 +1,38 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "C" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A", version = "1.0.0" } + +dependencies = [ + { name = "ADep" }, +] + +[[move.package]] +name = "ADep" +source = { local = "deps_only/ADep" } + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "A" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C" } + +dependencies = [ + { name = "A" }, +] diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.resolved new file mode 100644 index 0000000000000..1df8add04cb6f --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.resolved @@ -0,0 +1,320 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_external_override_root", + root_package: "Root", + package_graph: { + "Root": [ + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ( + "C", + Outgoing, + ), + ], + "A": [ + ( + "ADep", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ( + "B", + Incoming, + ), + ( + "C", + Incoming, + ), + ], + "ADep": [ + ( + "A", + Incoming, + ), + ], + "B": [ + ( + "A", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "C": [ + ( + "Root", + Incoming, + ), + ( + "A", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: None, + resolver: None, + overridden_path: false, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: None, + resolver: None, + overridden_path: true, + }, + }, + always_deps: { + "A", + "ADep", + "B", + "C", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "ADep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "ADep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "../A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": External( + "../../../resolvers/successful.sh", + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "C": Internal( + InternalDependency { + kind: Local( + "deps_only/C", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.toml new file mode 100644 index 0000000000000..d67cc93e50ddd --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/Move.toml @@ -0,0 +1,23 @@ +# Dependency graph and and override (ov) +# C's dependency on A and ADep is externally resolved (override should kick in) +# +# +----+ +# +---->| C |----+ +# | +----+ | +# | | +# +----+ | ov(1) +---->+----+ +-------+ +# |Root|----+-------------------->| A |------>| ADep | +# +----+ | +---->+----+ +-------+ +# | | +# | +----+ | +# +---->| B |----+ +# +----+ + +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A", version = "1.0.0", override = true } +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/A/Move.toml new file mode 100644 index 0000000000000..74ba633d5270d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +ADep = { local = "../ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/ADep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/ADep/Move.toml new file mode 100644 index 0000000000000..27032db1a45f4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/ADep/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "ADep" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/B/Move.toml new file mode 100644 index 0000000000000..45e755ee23049 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +A = { local = "../A" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/C/Move.toml new file mode 100644 index 0000000000000..88e670eb24d9b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_external_override_root/deps_only/C/Move.toml @@ -0,0 +1,10 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies.A] +resolver = "../../../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.resolved new file mode 100644 index 0000000000000..d571d314713bf --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Conflicting dependencies found: +D = { local = "deps_only/D", version = "2.0.0" } +D = { local = "deps_only/D", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.toml new file mode 100644 index 0000000000000..780de5c60d2f1 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/Move.toml @@ -0,0 +1,20 @@ +# Dependency graph and and override (ov) - incorrect conflicting overrides. +# +# +----+ ov(3) +# +---->| B |----------------------+ +# | +----+----+ | +# | | | +# +----+ | | +----+ v1 +--->+----+ +# |Root|----+ +---->| C |---------->| D | +# +----+ | | +----+ +--->+----+ +# | | | +# | +----+----+ ov(2) | +# +---->| A |----------------------+ +# +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/A/Move.toml new file mode 100644 index 0000000000000..380fa3b664fe8 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/A/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D", version = "2.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/B/Move.toml new file mode 100644 index 0000000000000..d84c576b12150 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/B/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D", version = "3.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/C/Move.toml new file mode 100644 index 0000000000000..af684071a34e4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +D = { local = "../D", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/D/Move.toml new file mode 100644 index 0000000000000..c9cc6294601eb --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_conflicting_overrides/deps_only/D/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "D" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.resolved new file mode 100644 index 0000000000000..91218b07cac86 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.resolved @@ -0,0 +1 @@ +Failed to resolve dependencies for package 'Root': Found cycle between packages: D -> B -> C -> D diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.toml new file mode 100644 index 0000000000000..61b7959a76d31 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/Move.toml @@ -0,0 +1,27 @@ +# Dependency graph and override (ov) - when override is processed there is no entry in the graph +# yet (override is incorrect). This part is the same as in the +# diamond_problem_dep_incorrect_override_empty test. Additionally, a cycle introduced during graph +# construction interferes with part of the algorithm responsible for validating potentially +# incorrect overrides (dependency_graph::override_verify) and if not explicitly handled would +# trigger infinite recursion. +# +# +--------------------------------------------+ +# | | +# +---->+----+ | +# +---->| B |----+ | +# | +----+ | | +# | | | +# +----+ | | +----+ +----+--+ v1 +----+ +# |Root|----+ +---->| C |-------->| D |--------->| E | +# +----+ | | +----+ +----+ +--->+----+ +# | | | +# | +----+----+ ov(2) | +# +---->| A |------------------------------------+ +# +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/A/Move.toml new file mode 100644 index 0000000000000..d7457fe927682 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/A/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +E = { local = "../E", version = "2.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/B/Move.toml new file mode 100644 index 0000000000000..f3a7a12b0d29f --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/C/Move.toml new file mode 100644 index 0000000000000..af684071a34e4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +D = { local = "../D", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/D/Move.toml new file mode 100644 index 0000000000000..70eceb166c90c --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/D/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +B = { local = "../B" } +E = { local = "../E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/E/Move.toml new file mode 100644 index 0000000000000..dc97c6690fb60 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_cycle/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.resolved new file mode 100644 index 0000000000000..801ffc7a9a333 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.resolved @@ -0,0 +1 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Incorrect override of D in A (an override should dominate all uses of the overridden package) diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.toml new file mode 100644 index 0000000000000..24c3a4c93a8d7 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/Move.toml @@ -0,0 +1,20 @@ +# Dependency graph and and override (ov) - when override is processed there is no entry in the graph +# yet (override is incorrect). +# +----+ +# +---->| B |----+ +# | +----+ | +# | | +# +----+ | | +----+ v1 +----+ +# |Root|----+ +---->| C |-------->| D | +# +----+ | | +----+ +--->+----+ +# | | | +# | +----+----+ ov(2) | +# +---->| A |--------------------+ +# +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/A/Move.toml new file mode 100644 index 0000000000000..380fa3b664fe8 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/A/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D", version = "2.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/B/Move.toml new file mode 100644 index 0000000000000..f3a7a12b0d29f --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/C/Move.toml new file mode 100644 index 0000000000000..af684071a34e4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +D = { local = "../D", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/D/Move.toml new file mode 100644 index 0000000000000..c9cc6294601eb --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_empty/deps_only/D/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "D" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.resolved new file mode 100644 index 0000000000000..0e703bc74cd14 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Conflicting dependencies found: +D = { local = "deps_only/D", version = "1.0.0" } +D = { local = "deps_only/D", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.toml new file mode 100644 index 0000000000000..a46cda48364b5 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/Move.toml @@ -0,0 +1,20 @@ +# Dependency graph and and override (ov) - when override is processed there is already an entry in +# the graph (override is incorrect). +# +----+ ov(2) +# +---->| B |----------------------+ +# | +----+----+ | +# | | | +# +----+ | | +----+ v1 +--->+----+ +# |Root|----+ +---->| C |---------->| D | +# +----+ | | +----+ +----+ +# | | +# | +----+----+ +# +---->| A | +# +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/A/Move.toml new file mode 100644 index 0000000000000..58bf5ee785c03 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/B/Move.toml new file mode 100644 index 0000000000000..ae7378d6ea35e --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/B/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D", version = "2.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/C/Move.toml new file mode 100644 index 0000000000000..af684071a34e4 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +D = { local = "../D", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/D/Move.toml new file mode 100644 index 0000000000000..c9cc6294601eb --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_incorrect_override_occupied/deps_only/D/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "D" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved new file mode 100644 index 0000000000000..247d4179c7f2d --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'A': Resolving dependencies for package 'C': Resolving dependencies for package 'F': Conflicting dependencies found: +G = { local = "deps_only/G", version = "1.0.0" } +G = { local = "deps_only/G", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml new file mode 100644 index 0000000000000..953ff7046ea51 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml @@ -0,0 +1,24 @@ +# Dependency graph - conflicting dependencies. +# +# +----+ +# +---->| F |--------------+ +# | +----+ | +# | | +# +----+ +----+ | | +# +---->| A |---->| C |----+ | +# | +----+ +----+ | | +# | | | +# +----+ | | +----+ | +# |Root|----+ +---->| E |------+ | +# +----+ | +----+ | | +# | v1 | | +# | +----+ +----+ v3 +----+<-----+ | +# +---->| B +---->| D |--------->| G | v2 | +# +----+ +----+ +----+<-------------+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000000..a606d045834a6 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000000..b35ffc1bcece0 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +D = { local = "../D" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml new file mode 100644 index 0000000000000..02631391d76ef --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E" } +F = { local = "../F" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml new file mode 100644 index 0000000000000..f99eb1b327edd --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +G = { local = "../G", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml new file mode 100644 index 0000000000000..71ce2f2760c8e --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "E" +version = "0.0.0" + +[dependencies] +G = { local = "../G", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml new file mode 100644 index 0000000000000..b77155c25ee75 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "F" +version = "0.0.0" + +[dependencies] +G = { local = "../G", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml new file mode 100644 index 0000000000000..16e8cb4ef2d65 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "G" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked new file mode 100644 index 0000000000000..8e9e8edca788b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked @@ -0,0 +1,47 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "E" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "C" }, + { name = "D" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "D" +source = { local = "deps_only/D" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "E" +source = { local = "deps_only/E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved new file mode 100644 index 0000000000000..b1a9cb1f88f0b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved @@ -0,0 +1,420 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_nested_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "E", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "E": [ + ( + "Root", + Incoming, + ), + ( + "C", + Incoming, + ), + ( + "D", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "C": [ + ( + "E", + Outgoing, + ), + ( + "A", + Incoming, + ), + ], + "A": [ + ( + "C", + Outgoing, + ), + ( + "D", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "D": [ + ( + "E", + Outgoing, + ), + ( + "A", + Incoming, + ), + ], + "B": [ + ( + "E", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "D": Package { + kind: Local( + "deps_only/D", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "E": Package { + kind: Local( + "deps_only/E", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + }, + always_deps: { + "A", + "B", + "C", + "D", + "E", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "D": Internal( + InternalDependency { + kind: Local( + "../D", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 3, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "D": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "D", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "E": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "E", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "E": Internal( + InternalDependency { + kind: Local( + "deps_only/E", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml new file mode 100644 index 0000000000000..dae84db882000 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml @@ -0,0 +1,24 @@ +# Dependency graph and an override (ov) - override should succeed. +# +----+ +# +---->| C |--------------+ +# | +----+ | +# | | +# +----+ | | +# +---->| A |----+ | +# | +----+ | | +# | | | +# +----+ | ov(1) | +----+ | +# |Root|----+------------+ +---->| D |------+ | +# +----+ | | +----+ | | +# | | v1 | | +# | +----+ +------->+----+<-----+ | +# +---->| B |--------->| E | v2 | +# +----+ v3 +----+<-------------+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } +E = { local = "./deps_only/E", version = "1.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml new file mode 100644 index 0000000000000..a606d045834a6 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml new file mode 100644 index 0000000000000..c4ad219336f22 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml new file mode 100644 index 0000000000000..9c1c69cb1f529 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml new file mode 100644 index 0000000000000..5b594aae20725 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml new file mode 100644 index 0000000000000..dc97c6690fb60 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved new file mode 100644 index 0000000000000..da6f447a5c9f0 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Conflicting dependencies found: +E = { local = "deps_only/E", version = "1.0.0" } +E = { local = "deps_only/E", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml new file mode 100644 index 0000000000000..e907ab76b9c1a --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml @@ -0,0 +1,23 @@ +# Dependency graph and an (insufficient) override (ov) - override is incorrect. +# +----+ +# +---->| C |--------------+ +# | +----+ | +# | | +# +----+ | | +# +---->| A |----+ | +# | +----+ | | +# | | | | +# +----+ | | | +----+ | +# |Root|----+ |ov(1) +---->| D |------+ | +# +----+ | +----+ +----+ | | +# | | v1 | | +# | +----+ +------->+----+<-----+ | +# +---->| B |--------->| E | v2 | +# +----+ v3 +----+<-------------+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml new file mode 100644 index 0000000000000..ab913a367a6c7 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C"} +D = { local = "../D"} +E = { local = "../E", version = "1.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml new file mode 100644 index 0000000000000..c4ad219336f22 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml new file mode 100644 index 0000000000000..5aa35b1ac88e0 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml new file mode 100644 index 0000000000000..5b594aae20725 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml new file mode 100644 index 0000000000000..dc97c6690fb60 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked new file mode 100644 index 0000000000000..0ba7e9c31d18b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked @@ -0,0 +1,30 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "C" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "C" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "C" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved new file mode 100644 index 0000000000000..0b1398e329ceb --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved @@ -0,0 +1,285 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "C", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "C": [ + ( + "Root", + Incoming, + ), + ( + "A", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "A": [ + ( + "C", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "B": [ + ( + "C", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + }, + always_deps: { + "A", + "B", + "C", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "C": Internal( + InternalDependency { + kind: Local( + "deps_only/C", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml new file mode 100644 index 0000000000000..f624dd7f7aafe --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C", version = "1.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml new file mode 100644 index 0000000000000..b4bded6d53fd6 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml new file mode 100644 index 0000000000000..1ee8a9c06d7d9 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml new file mode 100644 index 0000000000000..73ed83696146c --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "C" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.locked new file mode 100644 index 0000000000000..9b23a9b0ca619 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.locked @@ -0,0 +1,43 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "C" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "B" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B1", version = "2.0.0" } + +[[move.package]] +name = "C" +source = { local = "deps_only/C" } + +dependencies = [ + { name = "D" }, + { name = "E" }, +] + +[[move.package]] +name = "D" +source = { local = "deps_only/D", version = "3.0.0" } + +[[move.package]] +name = "E" +source = { local = "deps_only/E" } + +dependencies = [ + { name = "D" }, +] diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.resolved new file mode 100644 index 0000000000000..9c4d47c7ba35a --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.resolved @@ -0,0 +1,406 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_transitive_nested_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "B", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "C", + Outgoing, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "A", + Incoming, + ), + ], + "A": [ + ( + "B", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "C": [ + ( + "D", + Outgoing, + ), + ( + "E", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "D": [ + ( + "C", + Incoming, + ), + ( + "E", + Incoming, + ), + ], + "E": [ + ( + "D", + Outgoing, + ), + ( + "C", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "B": Package { + kind: Local( + "deps_only/B1", + ), + version: Some( + ( + 2, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "D": Package { + kind: Local( + "deps_only/D", + ), + version: Some( + ( + 3, + 0, + 0, + ), + ), + resolver: None, + overridden_path: true, + }, + "E": Package { + kind: Local( + "deps_only/E", + ), + version: None, + resolver: None, + overridden_path: true, + }, + }, + always_deps: { + "A", + "B", + "C", + "D", + "E", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "B": Internal( + InternalDependency { + kind: Local( + "../B2", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "D": Internal( + InternalDependency { + kind: Local( + "../D", + ), + subst: None, + version: Some( + ( + 3, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "D": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "D", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "E": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "E", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "D": Internal( + InternalDependency { + kind: Local( + "../D", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B1", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + "C": Internal( + InternalDependency { + kind: Local( + "deps_only/C", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.toml new file mode 100644 index 0000000000000..ba57ab888d996 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/Move.toml @@ -0,0 +1,27 @@ +# Dependency graph and and override (ov) - both overrides should succeed as after ov(2) kicks in, C +# will dominate E and D (and this override will always kick in before any other dependencies are +# processed as overrides are processed first). +# +# +----+ ov(3) +----+ +# +------>| C |------------------------------>| D | +# | +----+----------+ +--->+----+ +# | | | v1 +# | +----+ | | +# +------>| A | | | +# | +----+ +---->+----+ | +# | | v1 +----+ | E |----+ +# +----+ | +----->| B2 |-------->+----+ +# |Root|----+ +----+ +# +----+ | +# | +# | ov(2) +----+ +# +------------->| B1 | +# +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B1", version = "2.0.0", override = true } +C = { local = "./deps_only/C" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/A/Move.toml new file mode 100644 index 0000000000000..e8d027ed1f9e6 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +B = { local = "../B2", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B1/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B1/Move.toml new file mode 100644 index 0000000000000..64596e5a35ef8 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B1/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "B" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B2/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B2/Move.toml new file mode 100644 index 0000000000000..0053de6d4598c --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/B2/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +E = { local = "../E" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/C/Move.toml new file mode 100644 index 0000000000000..b29c9c8691265 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/C/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E" } +D = { local = "../D", version ="3.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/D/Move.toml new file mode 100644 index 0000000000000..c9cc6294601eb --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/D/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "D" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/E/Move.toml new file mode 100644 index 0000000000000..32168607edeb6 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_transitive_nested_override/deps_only/E/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "E" +version = "0.0.0" + +[dependencies] +D = { local = "../D", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked new file mode 100644 index 0000000000000..6e5a86067625b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked @@ -0,0 +1,48 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "E" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "C" }, + { name = "D" }, + { name = "E" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "D" +source = { local = "deps_only/D" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "E" +source = { local = "deps_only/E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved new file mode 100644 index 0000000000000..ea534ce9fd320 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved @@ -0,0 +1,445 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_two_nested_overrides", + root_package: "Root", + package_graph: { + "Root": [ + ( + "E", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "E": [ + ( + "Root", + Incoming, + ), + ( + "A", + Incoming, + ), + ( + "C", + Incoming, + ), + ( + "D", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "A": [ + ( + "E", + Outgoing, + ), + ( + "C", + Outgoing, + ), + ( + "D", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "C": [ + ( + "E", + Outgoing, + ), + ( + "A", + Incoming, + ), + ], + "D": [ + ( + "E", + Outgoing, + ), + ( + "A", + Incoming, + ), + ], + "B": [ + ( + "E", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "D": Package { + kind: Local( + "deps_only/D", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "E": Package { + kind: Local( + "deps_only/E", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + }, + always_deps: { + "A", + "B", + "C", + "D", + "E", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "D": Internal( + InternalDependency { + kind: Local( + "../D", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 3, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "D": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "D", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "E": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "E", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "E": Internal( + InternalDependency { + kind: Local( + "deps_only/E", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml new file mode 100644 index 0000000000000..6fafbb4d5c441 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml @@ -0,0 +1,25 @@ +# Dependency graph and and override (ov) - only ov(1) should succeed. +# +----+ +# +---->| C |--------------+ +# | +----+ | +# | | +# +----+ | | +# +---->| A |--------+ | +# | +----+----+ | | +# | | | | +# +----+ | ov(1) | | +----+ | +# |Root|----+------------+ | +---->| D |------+ | +# +----+ | | | +----+ | | +# | | | ov2 v1 | | +# | +----+ | +-------->+----+<-----+ | +# +---->| B | +----------->| E | v2 | +# +----+------------->+----+<-------------+ +# v3 +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } +E = { local = "./deps_only/E", version = "1.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml new file mode 100644 index 0000000000000..f6105a6c14da3 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D" } +E = { local = "../E", version = "2.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml new file mode 100644 index 0000000000000..c4ad219336f22 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml new file mode 100644 index 0000000000000..9c1c69cb1f529 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml new file mode 100644 index 0000000000000..5b594aae20725 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml new file mode 100644 index 0000000000000..dc97c6690fb60 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.resolved new file mode 100644 index 0000000000000..a64bf95bb55dc --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.resolved @@ -0,0 +1,433 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_with_deps", + root_package: "Root", + package_graph: { + "Root": [ + ( + "C", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "C": [ + ( + "E", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ( + "A", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "E": [ + ( + "C", + Incoming, + ), + ( + "A", + Incoming, + ), + ( + "D", + Incoming, + ), + ], + "A": [ + ( + "E", + Outgoing, + ), + ( + "C", + Outgoing, + ), + ( + "D", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + "D": [ + ( + "E", + Outgoing, + ), + ( + "A", + Incoming, + ), + ], + "B": [ + ( + "C", + Outgoing, + ), + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "C": Package { + kind: Local( + "deps_only/C2", + ), + version: None, + resolver: None, + overridden_path: false, + }, + "D": Package { + kind: Local( + "deps_only/D", + ), + version: None, + resolver: None, + overridden_path: true, + }, + "E": Package { + kind: Local( + "deps_only/E", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_path: false, + }, + }, + always_deps: { + "A", + "B", + "C", + "D", + "E", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C1", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "D": Internal( + InternalDependency { + kind: Local( + "../D", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C2", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "D": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "D", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "E": Internal( + InternalDependency { + kind: Local( + "../E", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "E": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "E", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "C": Internal( + InternalDependency { + kind: Local( + "deps_only/C2", + ), + subst: None, + version: None, + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.toml new file mode 100644 index 0000000000000..40d7b75ce2d1c --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/Move.toml @@ -0,0 +1,28 @@ +# Dependency graph and two overrides - one correct one (in Root) and the other one insufficient (in +# A). The correct override eliminates C1's dependency on E's version 2 and the insufficient override +# becomes unnecessary as the graph becomes consistent with all remaining dependencies on package E +# are for version 1. +# +# +----+ v2 +# +---->| C1 |-------+ +# | +----+ | +# | | +# +----+ | ov(1) | +# +---->| A |-----+--------------+ | +# | +----+ | | | +# | | | +->+----+ +# +----+ | ov(2) | +----+ v1 +----->| | +# |Root|----+-------------+ +-->| D |----------->| E | +# +----+ | | +----+ | | +# | | +----->+----+ +# | +----+ +->+----+ v1 | +# +---->| B |---->| C2 |---------+ +# +----+ +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C2", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/A/Move.toml new file mode 100644 index 0000000000000..ab5f1f86b0c10 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/A/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C1" } +D = { local = "../D" } +E = { local = "../E", version = "1.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/B/Move.toml new file mode 100644 index 0000000000000..50872e3a6b5b7 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C2" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C1/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C1/Move.toml new file mode 100644 index 0000000000000..9c1c69cb1f529 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C1/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C2/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C2/Move.toml new file mode 100644 index 0000000000000..5aa35b1ac88e0 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/C2/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/D/Move.toml new file mode 100644 index 0000000000000..3904311160ba3 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/E/Move.toml new file mode 100644 index 0000000000000..dc97c6690fb60 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.resolved new file mode 100644 index 0000000000000..371d9f642f781 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.resolved @@ -0,0 +1,3 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'A': Conflicting dependencies found: +E = { local = "deps_only/E", version = "1.0.0" } +E = { local = "deps_only/E", version = "3.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.toml new file mode 100644 index 0000000000000..8df8419ef04bb --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/Move.toml @@ -0,0 +1,27 @@ +# Dependency graph - conflicting dependencies. Even though override in Root eliminates C1's +# dependency on E's version 2, we still have a conflicting dependency on E from A, which is an +# override, but an insufficient one. +# +# +----+ v2 +# +---->| C1 |-------+ +# | +----+ | +# | | +# +----+ | ov(3) | +# +---->| A |-----+--------------+ | +# | +----+ | | | +# | | | +->+----+ +# +----+ | ov(2) | +----+ v1 +----->| | +# |Root|----+-------------+ +-->| D |----------->| E | +# +----+ | | +----+ | | +# | | +----->+----+ +# | +----+ +->+----+ v1 | +# +---->| B |---->| C2 |---------+ +# +----+ +----+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C2", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/A/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000000..5de29dc25579b --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/A/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C1" } +D = { local = "../D" } +E = { local = "../E", version = "3.0.0", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/B/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000000..50872e3a6b5b7 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +C = { local = "../C2" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C1/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C1/Move.toml new file mode 100644 index 0000000000000..9c1c69cb1f529 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C1/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C2/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C2/Move.toml new file mode 100644 index 0000000000000..5aa35b1ac88e0 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/C2/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/D/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/D/Move.toml new file mode 100644 index 0000000000000..3904311160ba3 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "1.0.0" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/E/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/E/Move.toml new file mode 100644 index 0000000000000..dc97c6690fb60 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_dep_with_deps_conflict/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved index d11ef21667295..00ca515691889 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved @@ -51,6 +51,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "B": Package { kind: Local( @@ -58,6 +59,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "C": Package { kind: Local( @@ -65,6 +67,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -123,6 +126,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -171,6 +175,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -238,7 +243,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: Some( { @@ -249,12 +254,13 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: Some( { @@ -265,6 +271,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/external/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/external/Move.locked index 687c1e5fcff22..2b7382a74e1da 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external/Move.locked +++ b/external-crates/move/tools/move-package/tests/test_sources/external/Move.locked @@ -9,7 +9,7 @@ dependencies = [ [[move.package]] name = "A" -source = { local = "./deps_only/A" } +source = { local = "deps_only/A" } dependencies = [ { name = "ADep" }, @@ -17,4 +17,4 @@ dependencies = [ [[move.package]] name = "ADep" -source = { local = "./deps_only/ADep" } +source = { local = "deps_only/ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/external/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/external/Move.resolved index 7f336d242ec67..873567ead433c 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/external/Move.resolved @@ -29,21 +29,23 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, "ADep": Package { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, }, always_deps: { @@ -95,6 +97,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.locked index 687c1e5fcff22..2b7382a74e1da 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.locked +++ b/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.locked @@ -9,7 +9,7 @@ dependencies = [ [[move.package]] name = "A" -source = { local = "./deps_only/A" } +source = { local = "deps_only/A" } dependencies = [ { name = "ADep" }, @@ -17,4 +17,4 @@ dependencies = [ [[move.package]] name = "ADep" -source = { local = "./deps_only/ADep" } +source = { local = "deps_only/ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved index ec09f7afc6fc2..d03823e289d67 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved @@ -1 +1 @@ -Resolving package 'ADep': Unable to find package manifest at "tests/test_sources/external_bad_dep/./deps_only/ADep": No such file or directory (os error 2) +Resolving package 'ADep': Unable to find package manifest at "tests/test_sources/external_bad_dep/deps_only/ADep": No such file or directory (os error 2) diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.locked index 0b79d343c4f95..566ce195a4be5 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.locked +++ b/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.locked @@ -13,7 +13,7 @@ dev-dependencies = [ [[move.package]] name = "A" -source = { local = "./deps_only/A" } +source = { local = "deps_only/A" } dependencies = [ { name = "ADep" }, @@ -21,11 +21,11 @@ dependencies = [ [[move.package]] name = "ADep" -source = { local = "./deps_only/ADep" } +source = { local = "deps_only/ADep" } [[move.package]] name = "B" -source = { local = "./deps_only/B" } +source = { local = "deps_only/B" } dependencies = [ { name = "BDep" }, @@ -33,4 +33,4 @@ dependencies = [ [[move.package]] name = "BDep" -source = { local = "./deps_only/BDep" } +source = { local = "deps_only/BDep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved index 2025f07a3e538..c9fd6e4d411f9 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved @@ -49,39 +49,43 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, "ADep": Package { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, "B": Package { kind: Local( - "./deps_only/B", + "deps_only/B", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, "BDep": Package { kind: Local( - "./deps_only/BDep", + "deps_only/BDep", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, }, always_deps: { @@ -133,6 +137,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -192,6 +197,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.locked index ba39cf1d165f6..0a60df86c5d83 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.locked +++ b/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.locked @@ -10,7 +10,7 @@ dependencies = [ [[move.package]] name = "A" -source = { local = "./deps_only/A" } +source = { local = "deps_only/A" } dependencies = [ { name = "ADep" }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.resolved index fab2c62e74c39..d753660c8d066 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/external_overlap/Move.resolved @@ -24,25 +24,26 @@ ResolvedGraph { ), ], "A": [ - ( - "Root", - Incoming, - ), ( "ADep", Outgoing, ), + ( + "Root", + Incoming, + ), ], }, package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_path: false, }, "ADep": Package { kind: Local( @@ -50,6 +51,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -101,6 +103,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -158,11 +161,12 @@ ResolvedGraph { "ADep": Internal( InternalDependency { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/external_silent/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/external_silent/Move.locked index 687c1e5fcff22..2b7382a74e1da 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/external_silent/Move.locked +++ b/external-crates/move/tools/move-package/tests/test_sources/external_silent/Move.locked @@ -9,7 +9,7 @@ dependencies = [ [[move.package]] name = "A" -source = { local = "./deps_only/A" } +source = { local = "deps_only/A" } dependencies = [ { name = "ADep" }, @@ -17,4 +17,4 @@ dependencies = [ [[move.package]] name = "ADep" -source = { local = "./deps_only/ADep" } +source = { local = "deps_only/ADep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved index bf37c21ed8089..fcd78e5e61b4e 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved @@ -33,6 +33,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "D": Package { kind: Local( @@ -40,6 +41,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -156,7 +158,7 @@ ResolvedGraph { "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: Some( { @@ -167,12 +169,13 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), "D": Internal( InternalDependency { kind: Local( - "./deps_only/D", + "deps_only/D", ), subst: Some( { @@ -183,6 +186,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved index 951f7f5ab100b..58c52690f3ff2 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved @@ -37,6 +37,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, "MoveStdlib": Package { kind: Git( @@ -48,6 +49,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -103,6 +105,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -184,6 +187,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.locked new file mode 100644 index 0000000000000..c8dbf13329092 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.locked @@ -0,0 +1,20 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "Nested" }, +] + +[[move.package]] +name = "More" +source = { local = "deps_only/nested/more" } + +[[move.package]] +name = "Nested" +source = { local = "deps_only/nested" } + +dependencies = [ + { name = "More" }, +] diff --git a/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.toml new file mode 100644 index 0000000000000..1cae9ebd2f842 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "NestedDeps" +version = "0.0.0" + +[dependencies] +Nested = { local = "./deps_only/nested" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml new file mode 100644 index 0000000000000..920c7bf302162 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "Nested" +version = "0.0.0" + +[dependencies] +More = { local = "./more", override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml new file mode 100644 index 0000000000000..83a2b21fa60d3 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "More" +version = "0.0.0" diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/one_dep/Move.resolved index 1436fe5ac3ddd..b8c718e05f217 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/one_dep/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -115,6 +116,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved index e01e2b394a95c..df43e52737980 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -100,7 +101,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -111,6 +112,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved index e6f93e7e9c78f..ec1609776c22c 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -115,6 +116,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.compiled b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.compiled new file mode 100644 index 0000000000000..848d6eee74471 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.compiled @@ -0,0 +1,26 @@ +CompiledPackageInfo { + package_name: "Root", + address_alias_instantiation: { + "A": 00000000000000000000000000000001, + }, + source_digest: Some( + "ELIDED_FOR_TEST", + ), + build_flags: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.locked b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.locked new file mode 100644 index 0000000000000..fb1915365ba19 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.locked @@ -0,0 +1,12 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "OtherDep", addr_subst = { "A" = "B" } }, +] + +[[move.package]] +name = "OtherDep" +source = { local = "deps_only/other_dep" } diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.resolved new file mode 100644 index 0000000000000..845cb91a60355 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.resolved @@ -0,0 +1,138 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/one_dep_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "OtherDep", + Outgoing, + ), + ], + "OtherDep": [ + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "OtherDep": Package { + kind: Local( + "deps_only/other_dep", + ), + version: None, + resolver: None, + overridden_path: false, + }, + }, + always_deps: { + "OtherDep", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "OtherDep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "OtherDep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: Some( + { + "B": None, + }, + ), + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: { + "B": 00000000000000000000000000000001, + }, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: Some( + { + "A": Some( + 00000000000000000000000000000001, + ), + }, + ), + dev_address_assignments: None, + build: None, + dependencies: { + "OtherDep": Internal( + InternalDependency { + kind: Local( + "deps_only/other_dep", + ), + subst: Some( + { + "A": RenameFrom( + "B", + ), + }, + ), + version: None, + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: { + "A": ( + "OtherDep", + "B", + ), + }, + resolved_table: { + "A": 00000000000000000000000000000001, + }, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.toml new file mode 100644 index 0000000000000..8b6a067ba5e21 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/Move.toml @@ -0,0 +1,9 @@ +[package] +name = "Root" +version = "0.0.0" + +[addresses] +A = "0x1" + +[dependencies] +OtherDep = { local = "./deps_only/other_dep", addr_subst = { "A" = "B" }, override = true } diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml new file mode 100644 index 0000000000000..e0af1caa59c2c --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "OtherDep" +version = "0.0.0" + +[addresses] +B = "_" diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move new file mode 100644 index 0000000000000..e49d694537c67 --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move @@ -0,0 +1,3 @@ +module B::B { + public fun foo() { } +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move new file mode 100644 index 0000000000000..41fd77fecf2cc --- /dev/null +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move @@ -0,0 +1,6 @@ +module A::OneDep { + use A::B; + public fun do_b() { + B::foo() + } +} diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved index b3415178859c4..8c9ed32b1ca53 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -106,7 +107,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -117,6 +118,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/external-crates/move/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved b/external-crates/move/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved index 358f2e1dea100..6a878dfce83ee 100644 --- a/external-crates/move/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved +++ b/external-crates/move/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_path: false, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -115,6 +116,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), },