From 98570d044e534babb382cd5fce8842b15b7ff563 Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Sat, 4 Mar 2023 15:02:09 -0800 Subject: [PATCH 01/10] [move-package] Support dependency overrides --- .../src/resolution/dependency_graph.rs | 369 ++++++++++--- .../src/resolution/lock_file/schema.rs | 3 + .../src/source_package/manifest_parser.rs | 12 + .../src/source_package/parsed_manifest.rs | 19 +- .../dep_dev_dep_diamond/Move.resolved | 36 +- .../dep_good_digest/Move.resolved | 1 + .../Move.resolved | 20 +- .../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.locked | 29 + .../Move.resolved | 233 ++++++++ .../Move.toml | 13 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 6 + .../Move.locked | 29 + .../Move.resolved | 247 +++++++++ .../Move.toml | 13 + .../deps_only/A/Move.toml | 6 + .../deps_only/ADep/Move.toml | 3 + .../deps_only/B/Move.toml | 6 + .../Move.resolved | 3 + .../Move.toml | 23 + .../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 | 62 +++ .../Move.resolved | 502 ++++++++++++++++++ .../Move.toml | 23 + .../deps_only/A/Move.toml | 6 + .../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.resolved | 1 + .../Move.toml | 23 + .../deps_only/A/Move.toml | 6 + .../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.resolved | 3 + .../Move.toml | 23 + .../deps_only/A/Move.toml | 6 + .../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 + .../diamond_problem_dep_override/Move.locked | 29 + .../Move.resolved | 259 +++++++++ .../diamond_problem_dep_override/Move.toml | 7 + .../deps_only/A/Move.toml | 6 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 3 + .../Move.resolved | 1 + .../Move.toml | 8 + .../deps_only/A/Move.toml | 6 + .../deps_only/B/Move.toml | 6 + .../deps_only/C/Move.toml | 3 + .../diamond_problem_no_conflict/Move.resolved | 20 +- .../external_overlap/Move.resolved | 2 + .../{ADepOtherDep => ADepOther}/Move.toml | 0 .../multiple_deps_rename/Move.resolved | 2 + .../nested_deps_git_local/Move.resolved | 10 +- .../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 | 1 + .../one_dep_assigned_address/Move.resolved | 1 + .../Move.resolved | 1 + .../one_dep_override/Move.compiled | 26 + .../test_sources/one_dep_override/Move.locked | 12 + .../one_dep_override/Move.resolved | 139 +++++ .../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 | 1 + .../Move.resolved | 1 + 98 files changed, 2446 insertions(+), 97 deletions(-) create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/D/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/B/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml rename language/tools/move-package/tests/test_sources/external_overlap_fail_symmetric/deps_only/{ADepOtherDep => ADepOther}/Move.toml (100%) create mode 100644 language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/nested_deps_override/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/Move.compiled create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move create mode 100644 language/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 50f7d2c27e..f3798dc8da 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -4,7 +4,13 @@ use anyhow::{bail, Context, Result}; use colored::Colorize; use move_symbol_pool::Symbol; -use petgraph::{algo, prelude::DiGraphMap, Direction}; +use petgraph::{ + algo, + graph::node_index, + prelude::{DiGraphMap, Graph, NodeIndex}, + visit::{EdgeRef, NodeIndexable}, + Direction, +}; use std::{ collections::{btree_map::Entry, BTreeMap, BTreeSet}, fmt, @@ -74,6 +80,10 @@ pub struct Dependency { pub mode: DependencyMode, pub subst: Option, pub digest: Option, + pub dep_override: Option, + // during dependency graph construction we need to add edges early (e.g., to allow dominator + // computation) but we also need to know when their target node insertion is finalized + pub finalized: bool, } /// Indicates whether one package always depends on another, or only in dev-mode. @@ -98,6 +108,7 @@ pub struct ExternalRequest { /// currently support serializing types as inline tables. struct PackageTOML<'a>(&'a Package); struct PackageWithResolverTOML<'a>(&'a Package); + struct DependencyTOML<'a>(PM::PackageName, &'a Dependency); struct SubstTOML<'a>(&'a PM::Substitution); @@ -193,6 +204,7 @@ impl DependencyGraph { name, subst, digest, + dep_override, } in packages.root_dependencies.into_iter().flatten() { package_graph.add_edge( @@ -202,6 +214,8 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: dep_override.map(bool::from), + finalized: true, }, ); } @@ -210,6 +224,7 @@ impl DependencyGraph { name, subst, digest, + dep_override, } in packages.root_dev_dependencies.into_iter().flatten() { package_graph.add_edge( @@ -219,6 +234,8 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: dep_override.map(bool::from), + finalized: true, }, ); } @@ -278,6 +295,7 @@ impl DependencyGraph { name: dep_name, subst, digest, + dep_override, } in dependencies.into_iter().flatten() { package_graph.add_edge( @@ -287,6 +305,8 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: dep_override.map(bool::from), + finalized: true, }, ); } @@ -295,6 +315,7 @@ impl DependencyGraph { name: dep_name, subst, digest, + dep_override, } in dev_dependencies.into_iter().flatten() { package_graph.add_edge( @@ -304,6 +325,8 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: dep_override.map(bool::from), + finalized: true, }, ); } @@ -415,6 +438,23 @@ impl DependencyGraph { bail!("Merging dependencies into a graph after calculating its 'always' dependencies"); } + // 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, + Dependency { + mode: dep.mode, + subst: dep.subst.clone(), + digest: dep.digest, + dep_override: dep.dep_override, + finalized: false, + }, + ); + } + for (ext_name, mut ext_pkg) in ext_table { ext_pkg.resolver = Some(resolver); @@ -428,41 +468,53 @@ impl DependencyGraph { ); } - match self.package_table.entry(ext_name) { - Entry::Vacant(entry) => { - entry.insert(ext_pkg); - } - - // 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), - ); + let pkg = match self.package_table.get(&ext_name) { + None => ext_pkg, + Some(existing_pkg) => { + if existing_pkg.version == ext_pkg.version && existing_pkg.kind == ext_pkg.kind + { + // Seeing the same package in `extension` is OK only if it has the same + // set of dependencies as the existing one. + 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), + ); + } + continue; + } else { + // Seeing the same package name again, but it's a different package: Not OK + // unless a package can be chosen due to user-specified override in a manifest file + override_pkg( + self.package_graph.clone(), + self.root_package, + ext_name, + existing_pkg, + &ext_pkg, + )? } } - } + }; + self.package_table.insert(ext_name, 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()); + // finalize all edges + for (from, to, _) in ext_graph.all_edges() { + self.package_graph + .edge_weight_mut(from, to) + .unwrap() + .finalized = true; } - Ok(()) } /// Return packages in the graph in topological order (a package is ordered before its /// dependencies). /// - /// The ordering is agnostic to dependency mode (dev-mode or not) and contains all packagesd + /// The ordering is agnostic to dependency mode (dev-mode or not) and contains all packages /// (including packages that are exclusively dev-mode-only). /// /// Guaranteed to succeed because `DependencyGraph` instances cannot contain cycles. @@ -643,6 +695,7 @@ impl DependencyGraph { version, subst, digest, + dep_override, } = dep; let mut pkg = Package { @@ -652,13 +705,6 @@ impl DependencyGraph { }; pkg.kind.reroot(parent)?; - self.process_dependency( - pkg, - to, - dependency_cache, - external_requests, - progress_output, - )?; self.package_graph.add_edge( from, to, @@ -666,8 +712,21 @@ impl DependencyGraph { mode, subst, digest, + dep_override, + finalized: false, }, ); + self.process_dependency( + pkg, + to, + dependency_cache, + external_requests, + progress_output, + )?; + self.package_graph + .edge_weight_mut(from, to) + .unwrap() + .finalized = true; Ok(()) } @@ -684,22 +743,24 @@ impl DependencyGraph { external_requests: &mut Vec, progress_output: &mut Progress, ) -> Result<()> { - let pkg = match self.package_table.entry(name) { - Entry::Vacant(entry) => entry.insert(pkg), + let pkg = match self.package_table.get(&name) { + None => pkg, - // Seeing the same package again, pointing to the same dependency: OK, return early. - Entry::Occupied(entry) if entry.get() == &pkg => { - return Ok(()); - } + Some(existing_pkg) => { + if existing_pkg == &pkg { + // Seeing the same package again, pointing to the same dependency: OK, return early. + 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}", + // Seeing the same package name again, but it's a different package: Not OK + // unless a package can be chosen due to user-specified override in a manifest file + override_pkg( + self.package_graph.clone(), + self.root_package, name, - PackageWithResolverTOML(entry.get()), - PackageWithResolverTOML(&pkg), - ); + existing_pkg, + &pkg, + )? } }; @@ -712,6 +773,9 @@ impl DependencyGraph { .with_context(|| format!("Parsing manifest for '{}'", name))?; let kind = pkg.kind.clone(); + + self.package_table.insert(name, pkg); + self.extend_graph( &kind, &manifest, @@ -754,20 +818,7 @@ impl DependencyGraph { /// Check that there isn't a cycle between packages in the dependency graph. Returns `Ok(())` /// if there is not, or an error describing the cycle if there is. fn check_acyclic(&self) -> Result<()> { - let mut cyclic_components = algo::kosaraju_scc(&self.package_graph) - .into_iter() - .filter(|scc| scc.len() != 1 || self.package_graph.contains_edge(scc[0], scc[0])); - - let Some(scc) = cyclic_components.next() else { - return Ok(()) - }; - - // Duplicate start of the node at end for display - // SAFETY: Strongly connected components can't be empty - let mut cycle: Vec<_> = scc.iter().map(Symbol::as_str).collect(); - cycle.push(cycle[0]); - - bail!("Found cycle between packages: {}", cycle.join(" -> ")); + check_acyclic_graphmap(&self.package_graph) } /// Add the transitive closure of `DependencyMode::Always` edges reachable from the root package @@ -791,6 +842,25 @@ impl DependencyGraph { } } +/// Check that there isn't a cycle in the package_graph part of the dependency graph. Returns +/// `Ok(())` if there is not, or an error describing the cycle if there is. +fn check_acyclic_graphmap(package_graph: &DiGraphMap) -> Result<()> { + let mut cyclic_components = algo::kosaraju_scc(package_graph) + .into_iter() + .filter(|scc| scc.len() != 1 || package_graph.contains_edge(scc[0], scc[0])); + + let Some(scc) = cyclic_components.next() else { + return Ok(()) + }; + + // Duplicate start of the node at end for display + // SAFETY: Strongly connected components can't be empty + let mut cycle: Vec<_> = scc.iter().map(Symbol::as_str).collect(); + cycle.push(cycle[0]); + + bail!("Found cycle between packages: {}", cycle.join(" -> ")); +} + impl<'a> fmt::Display for PackageTOML<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let Package { @@ -871,6 +941,8 @@ impl<'a> fmt::Display for DependencyTOML<'a> { mode: _, subst, digest, + dep_override, + finalized: _, }, ) = self; @@ -888,6 +960,10 @@ impl<'a> fmt::Display for DependencyTOML<'a> { write!(f, ", addr_subst = {}", SubstTOML(subst))?; } + if let Some(dep_override) = dep_override { + write!(f, ", override = {}", dep_override)?; + } + f.write_str(" }")?; Ok(()) } @@ -969,12 +1045,183 @@ fn pkg_deps_equal<'a>( Vec<(&'a Dependency, PM::PackageName)>, Vec<(&'a Dependency, PM::PackageName)>, ) { - let pkg_edges = BTreeSet::from_iter(pkg_graph.edges(pkg_name).map(|(_, pkg, dep)| (dep, pkg))); + // consider only finalized edges so that we don't include edges that otherwise should be missing + // from the graph + let pkg_edges = BTreeSet::from_iter(pkg_graph.edges(pkg_name).filter_map(|(_, pkg, dep)| { + if dep.finalized { + Some((dep, pkg)) + } else { + None + } + })); + let other_edges = - BTreeSet::from_iter(other_graph.edges(pkg_name).map(|(_, pkg, dep)| (dep, pkg))); + BTreeSet::from_iter(other_graph.edges(pkg_name).filter_map(|(_, pkg, dep)| { + if dep.finalized { + Some((dep, pkg)) + } else { + None + } + })); let (pkg_deps, other_deps): (Vec<_>, Vec<_>) = pkg_edges .symmetric_difference(&other_edges) .partition(|dep| pkg_edges.contains(dep)); (pkg_deps, other_deps) } + +/// In presence of dependency overrides, returns a "winning" package if any (in which case it +/// returns an error). The algorithm relies on the fact that this check is performed when a new +/// package is added to the graph already containing package with the same name - this allows us to +/// resolve the conflicts pair-wise even if ultimately a package with a given name is a dependency +/// of more than two other packages. +/// +/// First, we try to locate the earliest override dominating a package in question (and bail if not +/// found). Then we traverse dependency graph starting with the override to see if we reach the +/// conflicting package through more than one edge. If conflicting package is indeed reachable via +/// more than one edge than the override is insufficient to resolve conflict (and reported as such), +/// otherwise the "winning" package is returned. +/// +/// This only works because when trying to add a conflicting package through a new dependency edge, +/// we add this edge early in an non-finalized state (before the package is fully processed), +/// finalizing the edges only after package processing is done. +fn override_pkg( + graphmap: DiGraphMap, + root_pkg_name: PM::PackageName, + pkg_name: PM::PackageName, + existing_pkg: &Package, + new_pkg: &Package, +) -> Result { + let root_node: NodeIndex = node_index(graphmap.to_index(root_pkg_name)); + let pkg_node: NodeIndex = node_index(graphmap.to_index(pkg_name)); + let graph = graphmap.into_graph(); + if let Some(override_node) = find_override(&graph, root_node, pkg_node)? { + let mut pkg_found = vec![]; + find_override_reachable_pkgs( + &graph, + override_node, + override_node, + &pkg_name, + existing_pkg, + new_pkg, + &mut pkg_found, + )?; + if pkg_found.len() == 1 { + return Ok(pkg_found[0].clone()); + } + } + bail!( + "Conflicting dependencies found:\n{0} = {1}\n{0} = {2}", + pkg_name, + PackageWithResolverTOML(existing_pkg), + PackageWithResolverTOML(new_pkg), + ); +} + +/// Find the closest valid (dominating) override for a given package. +fn find_override( + graph: &Graph, + root_node: NodeIndex, + pkg_node: NodeIndex, +) -> Result> { + let all_dominators = algo::dominators::simple_fast(&graph, root_node); + // at the very least root package dominates (it's guaranteed by graph construction) all so + // unwrap is safe + let pkg_dominators = all_dominators.strict_dominators(pkg_node).unwrap(); + // find closest dominator that contains a dependency override (the iterator goes over + // immediate dominators) + for d in pkg_dominators { + let overrides = node_overrides(graph, d)?; + // node_overrides guarantees that there is 0 or 1 overrides + if overrides.is_empty() { + continue; + } + return Ok(Some(d)); + } + Ok(None) +} + +/// Traverse the graph starting with an override found previously to discover which package +/// (existing or new, or both) is reachable from the override. Returns the single "winning" package +/// in pkg_found or, both packages in case they are both reachable. +fn find_override_reachable_pkgs<'a>( + graph: &Graph, + override_node: NodeIndex, + node: NodeIndex, + pkg_name: &PM::PackageName, + existing_pkg: &'a Package, + new_pkg: &'a Package, + pkg_found: &mut Vec<&'a Package>, +) -> Result<()> { + // just in case - this function should report error before this condition is violated here + assert!(pkg_found.len() <= 1); + for e in graph.edges(node) { + let target_name = graph.node_weight(e.target()).unwrap(); + if target_name == pkg_name { + // we reached the conflicting package in the graph through one of the edges, either + // already existing one or the non-finalized one that was inserted before processing + // a conflicting dependency + let pkg = if e.weight().finalized { + existing_pkg + } else { + new_pkg + }; + if !pkg_found.contains(&pkg) { + pkg_found.push(pkg); + } + if pkg_found.len() > 1 { + // we reached the same node via two different paths + let override_node_name = graph.node_weight(override_node).unwrap(); + bail!("Insufficient override in '{}'", override_node_name); + } + } + } + + let overrides = node_overrides(graph, node)?; + // node_overrides guarantees that there is 0 or 1 overrides + if !overrides.is_empty() { + // search through overridden edge only + find_override_reachable_pkgs( + graph, + override_node, + overrides[0], + pkg_name, + existing_pkg, + new_pkg, + pkg_found, + )?; + } else { + // search through all edges + for e in graph.edges(node) { + find_override_reachable_pkgs( + graph, + override_node, + e.target(), + pkg_name, + existing_pkg, + new_pkg, + pkg_found, + )?; + } + } + Ok(()) +} + +fn node_overrides(graph: &Graph, node: NodeIndex) -> Result> { + let edges = graph.edges(node); + let overrides: Vec = edges + .filter_map(|e| { + let o = e.weight().dep_override; + if o.is_some() && o.unwrap() { + Some(e.target()) + } else { + None + } + }) + .collect(); + if overrides.len() > 1 { + let override_node_name = graph.node_weight(node).unwrap(); + bail!("Multiple overrides found in '{}'", override_node_name); + } + Ok(overrides) +} diff --git a/language/tools/move-package/src/resolution/lock_file/schema.rs b/language/tools/move-package/src/resolution/lock_file/schema.rs index cea15a1fbc..fc2b61c44a 100644 --- a/language/tools/move-package/src/resolution/lock_file/schema.rs +++ b/language/tools/move-package/src/resolution/lock_file/schema.rs @@ -58,6 +58,9 @@ pub struct Dependency { /// Expected hash for the source and manifest of the package being depended upon. pub digest: Option, + + /// Optional dependency override to handle dependency conflicts. + pub dep_override: Option, } #[derive(Serialize, Deserialize)] diff --git a/language/tools/move-package/src/source_package/manifest_parser.rs b/language/tools/move-package/src/source_package/manifest_parser.rs index 25971a4922..663d60fb35 100644 --- a/language/tools/move-package/src/source_package/manifest_parser.rs +++ b/language/tools/move-package/src/source_package/manifest_parser.rs @@ -334,6 +334,10 @@ 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()?; let kind = match ( table.remove("local"), @@ -433,6 +437,7 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result subst, version, digest, + dep_override, })) } @@ -502,6 +507,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/language/tools/move-package/src/source_package/parsed_manifest.rs b/language/tools/move-package/src/source_package/parsed_manifest.rs index 1337d9113b..4499e3c0a4 100644 --- a/language/tools/move-package/src/source_package/parsed_manifest.rs +++ b/language/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,15 +56,31 @@ pub struct InternalDependency { pub subst: Option, pub version: Option, pub digest: Option, + pub dep_override: Option, } -#[derive(Debug, Clone, Eq, PartialEq)] +#[derive(Debug, Clone, Eq)] pub enum DependencyKind { Local(PathBuf), Git(GitInfo), Custom(CustomDepInfo), } +/// Custom implementation to normalize local paths +impl PartialEq for DependencyKind { + fn eq(&self, other: &Self) -> bool { + match (self, other) { + (&DependencyKind::Local(ref p), &DependencyKind::Local(ref op)) => { + normalize_path(p, true).unwrap() == normalize_path(op, true).unwrap() + } + + (&DependencyKind::Git(ref i), &DependencyKind::Git(ref iv)) => i == iv, + (&DependencyKind::Custom(ref i), &DependencyKind::Custom(ref iv)) => i == iv, + _ => false, + } + } +} + #[derive(Debug, Clone, Eq, PartialEq)] pub struct GitInfo { /// The git clone url to download from diff --git a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved index f5f4bc18b2..e4835de976 100644 --- a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved @@ -17,38 +17,38 @@ ResolvedGraph { Outgoing, ), ], - "B": [ + "A": [ ( - "C", - Outgoing, + "Root", + Incoming, ), ( - "A", - Incoming, + "B", + Outgoing, ), ( - "Root", - Incoming, + "D", + Outgoing, ), ], - "C": [ + "B": [ ( - "B", + "A", Incoming, ), + ( + "C", + Outgoing, + ), ( "Root", Incoming, ), ], - "A": [ + "C": [ ( "B", - Outgoing, - ), - ( - "D", - Outgoing, + Incoming, ), ( "Root", @@ -142,6 +142,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -154,6 +155,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -189,6 +191,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -271,6 +274,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), "C": Internal( @@ -281,6 +285,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -293,6 +298,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved index d9f0967f08..63fd52c106 100644 --- a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved @@ -117,6 +117,7 @@ ResolvedGraph { digest: Some( "6A88B7888D6049EB0121900E22B6FA2C0E702F042C8C8D4FD62AD5C990B9F9A8", ), + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved index 692aa398ff..86eec360c8 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved @@ -14,14 +14,14 @@ ResolvedGraph { ), ], "A": [ - ( - "C", - Outgoing, - ), ( "Root", Incoming, ), + ( + "C", + Outgoing, + ), ], "C": [ ( @@ -34,14 +34,14 @@ ResolvedGraph { ), ], "B": [ - ( - "C", - Outgoing, - ), ( "Root", Incoming, ), + ( + "C", + Outgoing, + ), ], }, package_table: { @@ -123,6 +123,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, @@ -171,6 +172,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, @@ -243,6 +245,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), "B": Internal( @@ -259,6 +262,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.resolved new file mode 100644 index 0000000000..c20fcea9f1 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/Move.toml new file mode 100644 index 0000000000..69cc1e8ca1 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000..b4bded6d53 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000..1ee8a9c06d --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_conflict/deps_only/C/Move.toml new file mode 100644 index 0000000000..73ed836961 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved new file mode 100644 index 0000000000..fec6cae831 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.toml new file mode 100644 index 0000000000..3a04d8d3e6 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000..74ba633d52 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/ADep/Move.toml new file mode 100644 index 0000000000..27032db1a4 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000..7b3d1f6cd2 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked new file mode 100644 index 0000000000..e560eaba1d --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved new file mode 100644 index 0000000000..87b49f28ba --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved @@ -0,0 +1,233 @@ +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": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], + "ADep": [ + ( + "B", + Incoming, + ), + ( + "A", + Incoming, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "./deps_only/A", + ), + version: None, + resolver: Some( + "../resolvers/successful.sh", + ), + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: None, + resolver: None, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + }, + }, + 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: None, + }, + ), + }, + 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: None, + }, + ), + }, + 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: None, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.toml new file mode 100644 index 0000000000..3a04d8d3e6 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000..74ba633d52 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/ADep/Move.toml new file mode 100644 index 0000000000..27032db1a4 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000..9829975c15 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked new file mode 100644 index 0000000000..6a1223090e --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/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", override = true }, +] + +[[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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved new file mode 100644 index 0000000000..73228a4142 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved @@ -0,0 +1,247 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_external_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "B", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], + "ADep": [ + ( + "B", + Incoming, + ), + ( + "A", + Incoming, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "./deps_only/A", + ), + version: None, + resolver: Some( + "../resolvers/successful.sh", + ), + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + }, + }, + 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: None, + }, + ), + }, + 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: None, + }, + ), + }, + 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: Some( + true, + ), + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml new file mode 100644 index 0000000000..a455331123 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml @@ -0,0 +1,13 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B", override = true } + +[dependencies.A] +resolver = "../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/A/Move.toml new file mode 100644 index 0000000000..74ba633d52 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/ADep/Move.toml new file mode 100644 index 0000000000..27032db1a4 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/deps_only/B/Move.toml new file mode 100644 index 0000000000..7b3d1f6cd2 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.resolved new file mode 100644 index 0000000000..247d4179c7 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml new file mode 100644 index 0000000000..4a610c9108 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/Move.toml @@ -0,0 +1,23 @@ +# Dependency graph +# +----+ +# +---->| 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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/A/Move.toml new file mode 100644 index 0000000000..a606d04583 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/B/Move.toml new file mode 100644 index 0000000000..b35ffc1bce --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/C/Move.toml new file mode 100644 index 0000000000..02631391d7 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/D/Move.toml new file mode 100644 index 0000000000..f99eb1b327 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/E/Move.toml new file mode 100644 index 0000000000..71ce2f2760 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/F/Move.toml new file mode 100644 index 0000000000..b77155c25e --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_conflict/deps_only/G/Move.toml new file mode 100644 index 0000000000..16e8cb4ef2 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked new file mode 100644 index 0000000000..9f33739149 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked @@ -0,0 +1,62 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A", override = true }, + { name = "B" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "C" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "D" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C" } + +dependencies = [ + { name = "E", override = true }, + { name = "F" }, +] + +[[move.package]] +name = "D" +source = { local = "deps_only/D" } + +dependencies = [ + { name = "G" }, +] + +[[move.package]] +name = "E" +source = { local = "deps_only/E" } + +dependencies = [ + { name = "G" }, +] + +[[move.package]] +name = "F" +source = { local = "deps_only/F" } + +dependencies = [ + { name = "G" }, +] + +[[move.package]] +name = "G" +source = { local = "deps_only/G", version = "1.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved new file mode 100644 index 0000000000..3fe174d7d2 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved @@ -0,0 +1,502 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_nested_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "C", + Outgoing, + ), + ], + "C": [ + ( + "A", + Incoming, + ), + ( + "E", + Outgoing, + ), + ( + "F", + Outgoing, + ), + ], + "E": [ + ( + "C", + Incoming, + ), + ( + "G", + Outgoing, + ), + ], + "G": [ + ( + "E", + Incoming, + ), + ( + "F", + Incoming, + ), + ( + "D", + Incoming, + ), + ], + "F": [ + ( + "C", + Incoming, + ), + ( + "G", + Outgoing, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "D", + Outgoing, + ), + ], + "D": [ + ( + "B", + Incoming, + ), + ( + "G", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: None, + resolver: None, + }, + "D": Package { + kind: Local( + "deps_only/D", + ), + version: None, + resolver: None, + }, + "E": Package { + kind: Local( + "deps_only/E", + ), + version: None, + resolver: None, + }, + "F": Package { + kind: Local( + "deps_only/F", + ), + version: None, + resolver: None, + }, + "G": Package { + kind: Local( + "deps_only/G", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + }, + }, + always_deps: { + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "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: None, + }, + ), + }, + 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: { + "D": Internal( + InternalDependency { + kind: Local( + "../D", + ), + subst: None, + version: None, + digest: None, + dep_override: None, + }, + ), + }, + 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: None, + digest: None, + dep_override: Some( + true, + ), + }, + ), + "F": Internal( + InternalDependency { + kind: Local( + "../F", + ), + subst: None, + version: None, + digest: None, + dep_override: None, + }, + ), + }, + 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: { + "G": Internal( + InternalDependency { + kind: Local( + "../G", + ), + subst: None, + version: Some( + ( + 3, + 0, + 0, + ), + ), + digest: None, + dep_override: None, + }, + ), + }, + 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: { + "G": Internal( + InternalDependency { + kind: Local( + "../G", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: None, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "F": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "F", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "G": Internal( + InternalDependency { + kind: Local( + "../G", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: None, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "G": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "G", + 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: Some( + true, + ), + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "./deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: None, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml new file mode 100644 index 0000000000..8b925e653c --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml @@ -0,0 +1,23 @@ +# Dependency graph and overrides (ov) +# +----+ +# +---->| F |--------------+ +# | +----+ | +# | | +# ov +----+ ov +----+ | | +# +---->| A |---->| C |----+ | +# | +----+ +----+ | | +# | | | +# +----+ | | +----+ | +# |Root|----+ +---->| E |------+ | +# +----+ | +----+ | | +# | v1 | | +# | +----+ +---+ v3 +----+<-----+ | +# +---->| B +---->| D |---------->| G | v2 | +# +----+ +---+ +----+<-------------+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A", override = true } +B = { local = "./deps_only/B" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml new file mode 100644 index 0000000000..58bf5ee785 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml new file mode 100644 index 0000000000..b35ffc1bce --- /dev/null +++ b/language/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] +D = { local = "../D" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml new file mode 100644 index 0000000000..11813b36dd --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", override = true } +F = { local = "../F" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml new file mode 100644 index 0000000000..f99eb1b327 --- /dev/null +++ b/language/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] +G = { local = "../G", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml new file mode 100644 index 0000000000..71ce2f2760 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml new file mode 100644 index 0000000000..b77155c25e --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml new file mode 100644 index 0000000000..16e8cb4ef2 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "G" +version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved new file mode 100644 index 0000000000..e46e00fc86 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved @@ -0,0 +1 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'A': Resolving dependencies for package 'C': Resolving dependencies for package 'F': Insufficient override in 'Root' diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml new file mode 100644 index 0000000000..0a33e68980 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml @@ -0,0 +1,23 @@ +# Dependency graph and an (insufficient) override (ov) +# +----+ +# +---->| F |--------------+ +# | +----+ | +# | | +# ov +----+ +----+ | | +# +---->| A |---->| C |----+ | +# | +----+ +----+ | | +# | | | +# +----+ | | +----+ | +# |Root|----+ +---->| E |------+ | +# +----+ | +----+ | | +# | v1 | | +# | +----+ +---+ v3 +----+<-----+ | +# +---->| B +---->| D |---------->| G | v2 | +# +----+ +---+ +----+<-------------+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A", override = true } +B = { local = "./deps_only/B" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml new file mode 100644 index 0000000000..58bf5ee785 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml new file mode 100644 index 0000000000..b35ffc1bce --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +D = { local = "../D" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/C/Move.toml new file mode 100644 index 0000000000..02631391d7 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/D/Move.toml new file mode 100644 index 0000000000..f99eb1b327 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml new file mode 100644 index 0000000000..71ce2f2760 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml new file mode 100644 index 0000000000..b77155c25e --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml new file mode 100644 index 0000000000..16e8cb4ef2 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "G" +version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved new file mode 100644 index 0000000000..c354ea9396 --- /dev/null +++ b/language/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': Resolving dependencies for package 'D': Conflicting dependencies found: +G = { local = "deps_only/G", version = "1.0.0" } +G = { local = "deps_only/G", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml new file mode 100644 index 0000000000..9110fd785f --- /dev/null +++ b/language/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) +# +----+ +# +---->| F |--------------+ +# | +----+ | +# | | +# +----+ ov +----+ | | +# +---->| 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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml new file mode 100644 index 0000000000..ed64422092 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C"} diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml new file mode 100644 index 0000000000..b35ffc1bce --- /dev/null +++ b/language/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] +D = { local = "../D" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml new file mode 100644 index 0000000000..df2b8db319 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", override = true } +F = { local = "../F" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml new file mode 100644 index 0000000000..f99eb1b327 --- /dev/null +++ b/language/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] +G = { local = "../G", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml new file mode 100644 index 0000000000..71ce2f2760 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml new file mode 100644 index 0000000000..b77155c25e --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml new file mode 100644 index 0000000000..16e8cb4ef2 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "G" +version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked new file mode 100644 index 0000000000..5688226d4f --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/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", override = true }, +] + +[[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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved new file mode 100644 index 0000000000..87e80cf386 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved @@ -0,0 +1,259 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "C", + Outgoing, + ), + ], + "C": [ + ( + "A", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "C", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + }, + }, + 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: None, + }, + ), + }, + 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: None, + }, + ), + }, + 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: None, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "./deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: Some( + true, + ), + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml new file mode 100644 index 0000000000..7331119495 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B", override = true } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/A/Move.toml new file mode 100644 index 0000000000..b4bded6d53 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/B/Move.toml new file mode 100644 index 0000000000..1ee8a9c06d --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/deps_only/C/Move.toml new file mode 100644 index 0000000000..73ed836961 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved new file mode 100644 index 0000000000..2bd7e30c34 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved @@ -0,0 +1 @@ +Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Multiple overrides found in 'Root' diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml new file mode 100644 index 0000000000..94a6f071f5 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +# should error +A = { local = "./deps_only/A", override = true } +B = { local = "./deps_only/B", override = true } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml new file mode 100644 index 0000000000..b4bded6d53 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/B/Move.toml new file mode 100644 index 0000000000..1ee8a9c06d --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml new file mode 100644 index 0000000000..73ed836961 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "C" +version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved index d11ef21667..e50be1229d 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved @@ -14,14 +14,14 @@ ResolvedGraph { ), ], "A": [ - ( - "C", - Outgoing, - ), ( "Root", Incoming, ), + ( + "C", + Outgoing, + ), ], "C": [ ( @@ -34,14 +34,14 @@ ResolvedGraph { ), ], "B": [ - ( - "C", - Outgoing, - ), ( "Root", Incoming, ), + ( + "C", + Outgoing, + ), ], }, package_table: { @@ -123,6 +123,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, @@ -171,6 +172,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, @@ -249,6 +251,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), "B": Internal( @@ -265,6 +268,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved index fab2c62e74..08f605a4e0 100644 --- a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved @@ -101,6 +101,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -163,6 +164,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/external_overlap_fail_symmetric/deps_only/ADepOtherDep/Move.toml b/language/tools/move-package/tests/test_sources/external_overlap_fail_symmetric/deps_only/ADepOther/Move.toml similarity index 100% rename from language/tools/move-package/tests/test_sources/external_overlap_fail_symmetric/deps_only/ADepOtherDep/Move.toml rename to language/tools/move-package/tests/test_sources/external_overlap_fail_symmetric/deps_only/ADepOther/Move.toml diff --git a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved index bf37c21ed8..cc93c2efb0 100644 --- a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved +++ b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved @@ -167,6 +167,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), "D": Internal( @@ -183,6 +184,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved b/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved index 951f7f5ab1..ad81a1a0db 100644 --- a/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved +++ b/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved @@ -10,14 +10,14 @@ ResolvedGraph { ), ], "MoveNursery": [ - ( - "MoveStdlib", - Outgoing, - ), ( "NestedDeps", Incoming, ), + ( + "MoveStdlib", + Outgoing, + ), ], "MoveStdlib": [ ( @@ -103,6 +103,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -184,6 +185,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked b/language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked new file mode 100644 index 0000000000..9ff5f07a18 --- /dev/null +++ b/language/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", override = true }, +] diff --git a/language/tools/move-package/tests/test_sources/nested_deps_override/Move.toml b/language/tools/move-package/tests/test_sources/nested_deps_override/Move.toml new file mode 100644 index 0000000000..1cae9ebd2f --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml b/language/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/Move.toml new file mode 100644 index 0000000000..920c7bf302 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml b/language/tools/move-package/tests/test_sources/nested_deps_override/deps_only/nested/more/Move.toml new file mode 100644 index 0000000000..83a2b21fa6 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/one_dep/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved index 1436fe5ac3..2ea69da093 100644 --- a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved @@ -115,6 +115,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved index e01e2b394a..e06182c987 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved @@ -111,6 +111,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved index e6f93e7e9c..7635b93b91 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved @@ -115,6 +115,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.compiled b/language/tools/move-package/tests/test_sources/one_dep_override/Move.compiled new file mode 100644 index 0000000000..848d6eee74 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/one_dep_override/Move.locked b/language/tools/move-package/tests/test_sources/one_dep_override/Move.locked new file mode 100644 index 0000000000..cba066873b --- /dev/null +++ b/language/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" }, override = true }, +] + +[[move.package]] +name = "OtherDep" +source = { local = "deps_only/other_dep" } diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved new file mode 100644 index 0000000000..f6c99a27c2 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved @@ -0,0 +1,139 @@ +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, + }, + }, + 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: Some( + true, + ), + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: { + "A": ( + "OtherDep", + "B", + ), + }, + resolved_table: { + "A": 00000000000000000000000000000001, + }, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.toml b/language/tools/move-package/tests/test_sources/one_dep_override/Move.toml new file mode 100644 index 0000000000..8b6a067ba5 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml b/language/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/Move.toml new file mode 100644 index 0000000000..e0af1caa59 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move b/language/tools/move-package/tests/test_sources/one_dep_override/deps_only/other_dep/sources/B.move new file mode 100644 index 0000000000..e49d694537 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move b/language/tools/move-package/tests/test_sources/one_dep_override/sources/OneDep.move new file mode 100644 index 0000000000..41fd77fecf --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved index b341517885..420c034091 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved @@ -117,6 +117,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved index 358f2e1dea..088657cb75 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved @@ -115,6 +115,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: None, }, ), }, From eb54a5c3c1fd9afaf3a39ca1bcf40cbf8564a5ff Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Sat, 4 Mar 2023 15:32:40 -0800 Subject: [PATCH 02/10] Updated test outputs --- .../move-package/tests/test_sources/external/Move.resolved | 1 + .../tests/test_sources/external_dev_dep/Move.resolved | 2 ++ 2 files changed, 3 insertions(+) diff --git a/language/tools/move-package/tests/test_sources/external/Move.resolved b/language/tools/move-package/tests/test_sources/external/Move.resolved index 7f336d242e..fdf400eef5 100644 --- a/language/tools/move-package/tests/test_sources/external/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external/Move.resolved @@ -95,6 +95,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved index 2025f07a3e..8f9f2ef665 100644 --- a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved @@ -133,6 +133,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, @@ -192,6 +193,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: None, }, ), }, From bd139e93ea7274799f1028a9d2b1a58fa5070dea Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Mon, 6 Mar 2023 18:08:50 -0800 Subject: [PATCH 03/10] Brought back graph entries --- .../src/resolution/dependency_graph.rs | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index f3798dc8da..32488a443b 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -468,9 +468,12 @@ impl DependencyGraph { ); } - let pkg = match self.package_table.get(&ext_name) { - None => ext_pkg, - Some(existing_pkg) => { + match self.package_table.entry(ext_name) { + Entry::Vacant(entry) => { + entry.insert(ext_pkg); + } + Entry::Occupied(mut entry) => { + let existing_pkg = entry.get(); if existing_pkg.version == ext_pkg.version && existing_pkg.kind == ext_pkg.kind { // Seeing the same package in `extension` is OK only if it has the same @@ -488,17 +491,17 @@ impl DependencyGraph { } else { // Seeing the same package name again, but it's a different package: Not OK // unless a package can be chosen due to user-specified override in a manifest file - override_pkg( + let overridden_pkg = override_pkg( self.package_graph.clone(), self.root_package, ext_name, existing_pkg, &ext_pkg, - )? + )?; + entry.insert(overridden_pkg); } } - }; - self.package_table.insert(ext_name, pkg); + } } // finalize all edges @@ -743,24 +746,31 @@ impl DependencyGraph { external_requests: &mut Vec, progress_output: &mut Progress, ) -> Result<()> { - let pkg = match self.package_table.get(&name) { - None => pkg, + let pkg = match self.package_table.entry(name) { + Entry::Vacant(entry) => entry.insert(pkg), - Some(existing_pkg) => { - if existing_pkg == &pkg { - // Seeing the same package again, pointing to the same dependency: OK, return early. - return Ok(()); - } + // 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(mut entry) => { + let existing_pkg = entry.get(); // Seeing the same package name again, but it's a different package: Not OK // unless a package can be chosen due to user-specified override in a manifest file - override_pkg( + let overridden_pkg = override_pkg( self.package_graph.clone(), self.root_package, name, existing_pkg, &pkg, - )? + )?; + if &overridden_pkg == existing_pkg { + return Ok(()); + } + entry.insert(overridden_pkg); + entry.into_mut() } }; @@ -773,9 +783,6 @@ impl DependencyGraph { .with_context(|| format!("Parsing manifest for '{}'", name))?; let kind = pkg.kind.clone(); - - self.package_table.insert(name, pkg); - self.extend_graph( &kind, &manifest, From 8f938e13de59b1a3cfefebcf5017d8d72ef3ad9e Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Mon, 6 Mar 2023 18:40:47 -0800 Subject: [PATCH 04/10] Dependency override does not have to be an option --- .../src/resolution/dependency_graph.rs | 15 ++++++------- .../src/source_package/manifest_parser.rs | 3 ++- .../src/source_package/parsed_manifest.rs | 2 +- .../dep_dev_dep_diamond/Move.resolved | 12 +++++----- .../dep_good_digest/Move.resolved | 2 +- .../Move.resolved | 8 +++---- .../Move.resolved | 6 ++--- .../Move.resolved | 8 +++---- .../Move.resolved | 22 ++++++++----------- .../Move.resolved | 10 ++++----- .../diamond_problem_no_conflict/Move.resolved | 8 +++---- .../external_overlap/Move.resolved | 4 ++-- .../multiple_deps_rename/Move.resolved | 4 ++-- .../nested_deps_git_local/Move.resolved | 4 ++-- .../tests/test_sources/one_dep/Move.resolved | 2 +- .../one_dep_assigned_address/Move.resolved | 2 +- .../Move.resolved | 2 +- .../one_dep_override/Move.resolved | 4 +--- .../one_dep_reassigned_address/Move.resolved | 2 +- .../Move.resolved | 2 +- 20 files changed, 56 insertions(+), 66 deletions(-) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 32488a443b..801060eb73 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -80,7 +80,7 @@ pub struct Dependency { pub mode: DependencyMode, pub subst: Option, pub digest: Option, - pub dep_override: Option, + pub dep_override: PM::DepOverride, // during dependency graph construction we need to add edges early (e.g., to allow dominator // computation) but we also need to know when their target node insertion is finalized pub finalized: bool, @@ -214,7 +214,7 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map(bool::from), + dep_override: dep_override.map_or(false, |o| o), finalized: true, }, ); @@ -234,7 +234,7 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map(bool::from), + dep_override: dep_override.map_or(false, |o| o), finalized: true, }, ); @@ -305,7 +305,7 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map(bool::from), + dep_override: dep_override.map_or(false, |o| o), finalized: true, }, ); @@ -325,7 +325,7 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map(bool::from), + dep_override: dep_override.map_or(false, |o| o), finalized: true, }, ); @@ -967,7 +967,7 @@ impl<'a> fmt::Display for DependencyTOML<'a> { write!(f, ", addr_subst = {}", SubstTOML(subst))?; } - if let Some(dep_override) = dep_override { + if *dep_override { write!(f, ", override = {}", dep_override)?; } @@ -1218,8 +1218,7 @@ fn node_overrides(graph: &Graph, node: NodeIndex) -> Result< let edges = graph.edges(node); let overrides: Vec = edges .filter_map(|e| { - let o = e.weight().dep_override; - if o.is_some() && o.unwrap() { + if e.weight().dep_override { Some(e.target()) } else { None diff --git a/language/tools/move-package/src/source_package/manifest_parser.rs b/language/tools/move-package/src/source_package/manifest_parser.rs index 663d60fb35..9b81316ff0 100644 --- a/language/tools/move-package/src/source_package/manifest_parser.rs +++ b/language/tools/move-package/src/source_package/manifest_parser.rs @@ -337,7 +337,8 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result let dep_override = table .remove("override") .map(parse_dep_override) - .transpose()?; + .transpose()? + .map_or(false, |o| o); let kind = match ( table.remove("local"), diff --git a/language/tools/move-package/src/source_package/parsed_manifest.rs b/language/tools/move-package/src/source_package/parsed_manifest.rs index 4499e3c0a4..a74f912e9e 100644 --- a/language/tools/move-package/src/source_package/parsed_manifest.rs +++ b/language/tools/move-package/src/source_package/parsed_manifest.rs @@ -56,7 +56,7 @@ pub struct InternalDependency { pub subst: Option, pub version: Option, pub digest: Option, - pub dep_override: Option, + pub dep_override: DepOverride, } #[derive(Debug, Clone, Eq)] diff --git a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved index e4835de976..9541cc011c 100644 --- a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved @@ -142,7 +142,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -155,7 +155,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -191,7 +191,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -274,7 +274,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), "C": Internal( @@ -285,7 +285,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -298,7 +298,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved index 63fd52c106..f7b870c46d 100644 --- a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved @@ -117,7 +117,7 @@ ResolvedGraph { digest: Some( "6A88B7888D6049EB0121900E22B6FA2C0E702F042C8C8D4FD62AD5C990B9F9A8", ), - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved index 86eec360c8..cffe541ce8 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved @@ -123,7 +123,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -172,7 +172,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -245,7 +245,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), "B": Internal( @@ -262,7 +262,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved index 87b49f28ba..d490969fe4 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved @@ -119,7 +119,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -179,7 +179,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -218,7 +218,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved index 73228a4142..fc31fbb673 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved @@ -125,7 +125,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -191,7 +191,7 @@ ResolvedGraph { ), ), digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -230,9 +230,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: Some( - true, - ), + dep_override: true, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved index 3fe174d7d2..375a5cf31d 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved @@ -203,7 +203,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -239,7 +239,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -275,9 +275,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: Some( - true, - ), + dep_override: true, }, ), "F": Internal( @@ -288,7 +286,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -330,7 +328,7 @@ ResolvedGraph { ), ), digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -372,7 +370,7 @@ ResolvedGraph { ), ), digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -414,7 +412,7 @@ ResolvedGraph { ), ), digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -474,9 +472,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: Some( - true, - ), + dep_override: true, }, ), "B": Internal( @@ -487,7 +483,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved index 87e80cf386..e7233e2bca 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved @@ -129,7 +129,7 @@ ResolvedGraph { ), ), digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -171,7 +171,7 @@ ResolvedGraph { ), ), digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -231,7 +231,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), "B": Internal( @@ -242,9 +242,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: Some( - true, - ), + dep_override: true, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved index e50be1229d..56cf8e3a38 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved @@ -123,7 +123,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -172,7 +172,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -251,7 +251,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), "B": Internal( @@ -268,7 +268,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved index 08f605a4e0..d39c8ff1f6 100644 --- a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved @@ -101,7 +101,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -164,7 +164,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved index cc93c2efb0..a94df360fd 100644 --- a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved +++ b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved @@ -167,7 +167,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), "D": Internal( @@ -184,7 +184,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved b/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved index ad81a1a0db..ff4a0958f5 100644 --- a/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved +++ b/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved @@ -103,7 +103,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -185,7 +185,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved index 2ea69da093..469e087056 100644 --- a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved @@ -115,7 +115,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved index e06182c987..76837b76ba 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved @@ -111,7 +111,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved index 7635b93b91..eb20cbb296 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved @@ -115,7 +115,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved index f6c99a27c2..d9cc61c772 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved @@ -115,9 +115,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: Some( - true, - ), + dep_override: true, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved index 420c034091..30c1b17f61 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved @@ -117,7 +117,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved index 088657cb75..429f261966 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved @@ -115,7 +115,7 @@ ResolvedGraph { ), version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, From 2bcfc51f0881927be7ee2ebba3413b7a540e0cd9 Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Mon, 6 Mar 2023 18:44:07 -0800 Subject: [PATCH 05/10] Cosmetic Rust cleanup --- .../move-package/src/resolution/dependency_graph.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 801060eb73..1b702c9e38 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -419,7 +419,7 @@ impl DependencyGraph { pub fn merge(&mut self, extension: DependencyGraph, resolver: Symbol) -> Result<()> { let DependencyGraph { root_package: ext_root, - package_graph: ext_graph, + package_graph: mut ext_graph, package_table: ext_table, // Unnecessary in the context of the larger graph. @@ -505,11 +505,8 @@ impl DependencyGraph { } // finalize all edges - for (from, to, _) in ext_graph.all_edges() { - self.package_graph - .edge_weight_mut(from, to) - .unwrap() - .finalized = true; + for (_, _, e) in ext_graph.all_edges_mut() { + e.finalized = true; } Ok(()) } From 2f0f791c437a1ea3de59556e848cd6d584e4b8fd Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Tue, 7 Mar 2023 10:48:03 -0800 Subject: [PATCH 06/10] Updated test output --- .../move-package/tests/test_sources/external/Move.resolved | 2 +- .../tests/test_sources/external_dev_dep/Move.resolved | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/language/tools/move-package/tests/test_sources/external/Move.resolved b/language/tools/move-package/tests/test_sources/external/Move.resolved index fdf400eef5..3d1b6666a6 100644 --- a/language/tools/move-package/tests/test_sources/external/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external/Move.resolved @@ -95,7 +95,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved index 8f9f2ef665..e85f75aba0 100644 --- a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved @@ -133,7 +133,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, @@ -193,7 +193,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: None, + dep_override: false, }, ), }, From e1b18b55d404f53118b64d425453c4c3898c74f7 Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Tue, 7 Mar 2023 13:12:06 -0800 Subject: [PATCH 07/10] Remove dependency overrides from lock files --- .../src/resolution/dependency_graph.rs | 29 +++++++------------ .../src/resolution/lock_file/schema.rs | 3 -- .../Move.locked | 2 +- .../Move.locked | 4 +-- .../diamond_problem_dep_override/Move.locked | 2 +- .../nested_deps_override/Move.locked | 2 +- .../test_sources/one_dep_override/Move.locked | 2 +- 7 files changed, 16 insertions(+), 28 deletions(-) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 1b702c9e38..8b563ce453 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -204,7 +204,6 @@ impl DependencyGraph { name, subst, digest, - dep_override, } in packages.root_dependencies.into_iter().flatten() { package_graph.add_edge( @@ -214,7 +213,7 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map_or(false, |o| o), + dep_override: false, finalized: true, }, ); @@ -224,7 +223,6 @@ impl DependencyGraph { name, subst, digest, - dep_override, } in packages.root_dev_dependencies.into_iter().flatten() { package_graph.add_edge( @@ -234,7 +232,7 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map_or(false, |o| o), + dep_override: false, finalized: true, }, ); @@ -295,7 +293,6 @@ impl DependencyGraph { name: dep_name, subst, digest, - dep_override, } in dependencies.into_iter().flatten() { package_graph.add_edge( @@ -305,7 +302,7 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map_or(false, |o| o), + dep_override: false, finalized: true, }, ); @@ -315,7 +312,6 @@ impl DependencyGraph { name: dep_name, subst, digest, - dep_override, } in dev_dependencies.into_iter().flatten() { package_graph.add_edge( @@ -325,7 +321,7 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), - dep_override: dep_override.map_or(false, |o| o), + dep_override: false, finalized: true, }, ); @@ -408,9 +404,8 @@ 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`. + /// Add the graph in `extension` to `self` consuming it in the process. Labels packages coming + /// from `extension` 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 @@ -438,9 +433,9 @@ impl DependencyGraph { bail!("Merging dependencies into a graph after calculating its 'always' dependencies"); } - // 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. + // We can temporary addition duplicate edges here but these would never be finalized. A + // subgraph introducing duplicate edges would also introduce conflicts and, as such, will be + // rejected by the checks below. for (from, to, dep) in ext_graph.all_edges() { self.package_graph.add_edge( from, @@ -945,7 +940,7 @@ impl<'a> fmt::Display for DependencyTOML<'a> { mode: _, subst, digest, - dep_override, + dep_override: _, finalized: _, }, ) = self; @@ -964,10 +959,6 @@ impl<'a> fmt::Display for DependencyTOML<'a> { write!(f, ", addr_subst = {}", SubstTOML(subst))?; } - if *dep_override { - write!(f, ", override = {}", dep_override)?; - } - f.write_str(" }")?; Ok(()) } diff --git a/language/tools/move-package/src/resolution/lock_file/schema.rs b/language/tools/move-package/src/resolution/lock_file/schema.rs index fc2b61c44a..cea15a1fbc 100644 --- a/language/tools/move-package/src/resolution/lock_file/schema.rs +++ b/language/tools/move-package/src/resolution/lock_file/schema.rs @@ -58,9 +58,6 @@ pub struct Dependency { /// Expected hash for the source and manifest of the package being depended upon. pub digest: Option, - - /// Optional dependency override to handle dependency conflicts. - pub dep_override: Option, } #[derive(Serialize, Deserialize)] diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked index 6a1223090e..ae58bf80ea 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked @@ -5,7 +5,7 @@ version = 0 dependencies = [ { name = "A" }, - { name = "B", override = true }, + { name = "B" }, ] [[move.package]] diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked index 9f33739149..9156410709 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked @@ -4,7 +4,7 @@ version = 0 dependencies = [ - { name = "A", override = true }, + { name = "A" }, { name = "B" }, ] @@ -29,7 +29,7 @@ name = "C" source = { local = "deps_only/C" } dependencies = [ - { name = "E", override = true }, + { name = "E" }, { name = "F" }, ] diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked index 5688226d4f..65a9a9fb6e 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked @@ -5,7 +5,7 @@ version = 0 dependencies = [ { name = "A" }, - { name = "B", override = true }, + { name = "B" }, ] [[move.package]] diff --git a/language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked b/language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked index 9ff5f07a18..c8dbf13329 100644 --- a/language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/nested_deps_override/Move.locked @@ -16,5 +16,5 @@ name = "Nested" source = { local = "deps_only/nested" } dependencies = [ - { name = "More", override = true }, + { name = "More" }, ] diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.locked b/language/tools/move-package/tests/test_sources/one_dep_override/Move.locked index cba066873b..fb1915365b 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/one_dep_override/Move.locked @@ -4,7 +4,7 @@ version = 0 dependencies = [ - { name = "OtherDep", addr_subst = { "A" = "B" }, override = true }, + { name = "OtherDep", addr_subst = { "A" = "B" } }, ] [[move.package]] From 8c71fe445b1b5cb83ffdc39a86633fc4bd6cfa9e Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Tue, 7 Mar 2023 19:40:16 -0800 Subject: [PATCH 08/10] A solution for explicitly defined overrides --- .../src/resolution/dependency_graph.rs | 288 ++++++----- .../dep_dev_dep_diamond/Move.resolved | 4 + .../dep_good_digest/Move.resolved | 1 + .../Move.resolved | 3 + .../Move.resolved | 3 + .../Move.locked | 1 + .../Move.resolved | 46 +- .../Move.toml | 3 +- .../Move.locked | 25 +- .../Move.resolved | 196 +++----- .../Move.toml | 36 +- .../deps_only/A/Move.toml | 1 + .../deps_only/B/Move.toml | 2 +- .../deps_only/C/Move.toml | 3 +- .../deps_only/D/Move.toml | 2 +- .../deps_only/E/Move.toml | 3 - .../deps_only/F/Move.toml | 6 - .../deps_only/G/Move.toml | 3 - .../Move.resolved | 1 - .../Move.toml | 23 - .../deps_only/A/Move.toml | 6 - .../deps_only/B/Move.toml | 6 - .../deps_only/E/Move.toml | 6 - .../deps_only/F/Move.toml | 6 - .../deps_only/G/Move.toml | 3 - .../Move.resolved | 6 +- .../Move.toml | 30 +- .../deps_only/A/Move.toml | 3 + .../deps_only/B/Move.toml | 2 +- .../deps_only/C/Move.toml | 3 +- .../deps_only/D/Move.toml | 2 +- .../deps_only/E/Move.toml | 3 - .../deps_only/F/Move.toml | 6 - .../diamond_problem_dep_override/Move.locked | 1 + .../Move.resolved | 44 +- .../diamond_problem_dep_override/Move.toml | 3 +- .../Move.resolved | 1 - .../Move.toml | 8 - .../deps_only/A/Move.toml | 6 - .../deps_only/C/Move.toml | 3 - .../Move.locked | 48 ++ .../Move.resolved | 447 ++++++++++++++++++ .../Move.toml | 26 + .../deps_only/A/Move.toml | 8 + .../deps_only/B/Move.toml | 2 +- .../deps_only/C/Move.toml | 3 +- .../deps_only/D/Move.toml | 2 +- .../deps_only/E}/Move.toml | 2 +- .../diamond_problem_no_conflict/Move.resolved | 3 + .../tests/test_sources/external/Move.resolved | 2 + .../external_dev_dep/Move.resolved | 4 + .../external_overlap/Move.resolved | 2 + .../multiple_deps_rename/Move.resolved | 2 + .../nested_deps_git_local/Move.resolved | 2 + .../tests/test_sources/one_dep/Move.resolved | 1 + .../one_dep_assigned_address/Move.resolved | 1 + .../Move.resolved | 1 + .../one_dep_override/Move.resolved | 3 + .../one_dep_reassigned_address/Move.resolved | 1 + .../Move.resolved | 1 + 60 files changed, 896 insertions(+), 463 deletions(-) delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml delete mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml create mode 100644 language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml rename language/tools/move-package/tests/test_sources/{diamond_problem_dep_override_both => diamond_problem_dep_two_nested_overrides}/deps_only/B/Move.toml (56%) rename language/tools/move-package/tests/test_sources/{diamond_problem_dep_nested_override_insufficient_high => diamond_problem_dep_two_nested_overrides}/deps_only/C/Move.toml (54%) rename language/tools/move-package/tests/test_sources/{diamond_problem_dep_nested_override_insufficient_high => diamond_problem_dep_two_nested_overrides}/deps_only/D/Move.toml (56%) rename language/tools/move-package/tests/test_sources/{diamond_problem_dep_nested_override_insufficient_low/deps_only/G => diamond_problem_dep_two_nested_overrides/deps_only/E}/Move.toml (71%) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 8b563ce453..b846df103a 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -73,6 +73,8 @@ pub struct Package { pub version: Option, /// Optional field set if the package was externally resolved. resolver: Option, + /// Optional field set if the package was inserted into a graph as a result of an override. + overridden_in: Option, } #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] @@ -270,6 +272,7 @@ impl DependencyGraph { kind: source.kind, version: source.version, resolver: None, + overridden_in: None, }; match package_table.entry(pkg_name) { @@ -493,7 +496,10 @@ impl DependencyGraph { existing_pkg, &ext_pkg, )?; - entry.insert(overridden_pkg); + if overridden_pkg == existing_pkg { + return Ok(()); + } + entry.insert(ext_pkg); } } } @@ -543,54 +549,89 @@ impl DependencyGraph { 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, - )?, + // make sure that we process dependencies with overrides first + let mut deps_overrides_first: Vec<_> = package.dependencies.iter().collect(); + deps_overrides_first.sort_by_key(|(_, dep)| { + if let PM::Dependency::Internal(d) = dep { + !d.dep_override + } else { + true } + }); + for (to, dep) in deps_overrides_first { + self.extend_with_dep( + parent, + package_path, + dependency_cache, + external_requests, + progress_output, + DependencyMode::Always, + from, + *to, + dep, + )?; } - for (to, dep) in &package.dev_dependencies { - match dep { - PM::Dependency::External(resolver) => external_requests.push(ExternalRequest { - mode: DependencyMode::DevOnly, - from, - 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, - )?, + let mut dev_deps_overrides_first: Vec<_> = package.dev_dependencies.iter().collect(); + dev_deps_overrides_first.sort_by_key(|(_, dep)| { + if let PM::Dependency::Internal(d) = dep { + !d.dep_override + } else { + true } + }); + for (to, dep) in dev_deps_overrides_first { + self.extend_with_dep( + parent, + package_path, + dependency_cache, + external_requests, + progress_output, + DependencyMode::DevOnly, + from, + *to, + dep, + )?; } Ok(()) } + fn extend_with_dep( + &mut self, + parent: &PM::DependencyKind, + package_path: &Path, + dependency_cache: &mut DependencyCache, + external_requests: &mut Vec, + progress_output: &mut Progress, + mode: DependencyMode, + from: Symbol, + to: Symbol, + dep: &PM::Dependency, + ) -> Result<()> { + match dep { + PM::Dependency::External(resolver) => external_requests.push(ExternalRequest { + mode, + from, + to, + resolver: *resolver, + pkg_path: package_path.to_path_buf(), + }), + + PM::Dependency::Internal(dep) => self.resolve_internally( + mode, + from, + to, + parent, + dep.clone(), + dependency_cache, + external_requests, + progress_output, + )?, + } + Ok(()) + } + /// Resolve the packages described at dependency `to` of package `from` with manifest at path /// `package_path` by running the binary `resolver. `mode` decides whether the resulting /// packages are added to `self` as dependencies of `package_name` or dev-dependencies. @@ -693,10 +734,13 @@ impl DependencyGraph { dep_override, } = dep; + let overridden_in = if dep_override { Some(from) } else { None }; + let mut pkg = Package { kind, version, resolver: None, + overridden_in, }; pkg.kind.reroot(parent)?; @@ -758,10 +802,10 @@ impl DependencyGraph { existing_pkg, &pkg, )?; - if &overridden_pkg == existing_pkg { + if overridden_pkg == existing_pkg { return Ok(()); } - entry.insert(overridden_pkg); + entry.insert(pkg); entry.into_mut() } }; @@ -866,6 +910,7 @@ impl<'a> fmt::Display for PackageTOML<'a> { kind, version, resolver: _, + overridden_in: _, } = self.0; f.write_str("{ ")?; @@ -1071,38 +1116,44 @@ fn pkg_deps_equal<'a>( /// resolve the conflicts pair-wise even if ultimately a package with a given name is a dependency /// of more than two other packages. /// -/// First, we try to locate the earliest override dominating a package in question (and bail if not -/// found). Then we traverse dependency graph starting with the override to see if we reach the -/// conflicting package through more than one edge. If conflicting package is indeed reachable via -/// more than one edge than the override is insufficient to resolve conflict (and reported as such), -/// otherwise the "winning" package is returned. +/// First we check if package already existing in the graph has been inserted there as a result of +/// an override. If it was, then either: +/// - the new package is dominated by the same override +/// or +/// - no valid override can be found and error must be reported +/// +/// Because the overridden dependencies are processed first for each package, it is guaranteed that +/// when searching for overrides for a child (new package), a correct override will be found if it +/// exists because by construction it must be already present in the graph. /// -/// This only works because when trying to add a conflicting package through a new dependency edge, -/// we add this edge early in an non-finalized state (before the package is fully processed), -/// finalizing the edges only after package processing is done. -fn override_pkg( +/// If package already existing in the graph has not been inserted as a result of an override then +/// either: +/// - the new package has been inserted as a result of an override and: +/// - it's dominating override for the existing package then new package is the winner +/// - it's not a dominating override for the existing package then an error must be reported +/// or +/// - the new package has not been inserted as a result of an override and an error must be reported +/// +/// Correctly finding dominators only works because when trying to add a conflicting package through +/// a new dependency edge, we add this edge early in an non-finalized state (before the package is +/// fully processed), finalizing the edges only after package processing is done. +fn override_pkg<'a>( graphmap: DiGraphMap, root_pkg_name: PM::PackageName, pkg_name: PM::PackageName, - existing_pkg: &Package, - new_pkg: &Package, -) -> Result { + existing_pkg: &'a Package, + new_pkg: &'a Package, +) -> Result<&'a Package> { let root_node: NodeIndex = node_index(graphmap.to_index(root_pkg_name)); let pkg_node: NodeIndex = node_index(graphmap.to_index(pkg_name)); let graph = graphmap.into_graph(); - if let Some(override_node) = find_override(&graph, root_node, pkg_node)? { - let mut pkg_found = vec![]; - find_override_reachable_pkgs( - &graph, - override_node, - override_node, - &pkg_name, - existing_pkg, - new_pkg, - &mut pkg_found, - )?; - if pkg_found.len() == 1 { - return Ok(pkg_found[0].clone()); + if let Some(existing_override) = existing_pkg.overridden_in { + if find_override(&graph, &pkg_name, &existing_override, root_node, pkg_node) { + return Ok(existing_pkg); + } + } else if let Some(existing_override) = new_pkg.overridden_in { + if find_override(&graph, &pkg_name, &existing_override, root_node, pkg_node) { + return Ok(new_pkg); } } bail!( @@ -1113,109 +1164,42 @@ fn override_pkg( ); } -/// Find the closest valid (dominating) override for a given package. +/// Check if matching dominating override for a given package can be found. fn find_override( graph: &Graph, + pkg_name: &PM::PackageName, + overridden_in: &PM::PackageName, root_node: NodeIndex, pkg_node: NodeIndex, -) -> Result> { +) -> bool { let all_dominators = algo::dominators::simple_fast(&graph, root_node); // at the very least root package dominates (it's guaranteed by graph construction) all so // unwrap is safe let pkg_dominators = all_dominators.strict_dominators(pkg_node).unwrap(); - // find closest dominator that contains a dependency override (the iterator goes over + // find dominator that contains a dependency override (the iterator goes over // immediate dominators) for d in pkg_dominators { - let overrides = node_overrides(graph, d)?; - // node_overrides guarantees that there is 0 or 1 overrides - if overrides.is_empty() { - continue; + if node_override(graph, d, pkg_name, overridden_in) { + return true; } - return Ok(Some(d)); } - Ok(None) + false } -/// Traverse the graph starting with an override found previously to discover which package -/// (existing or new, or both) is reachable from the override. Returns the single "winning" package -/// in pkg_found or, both packages in case they are both reachable. -fn find_override_reachable_pkgs<'a>( +/// Check if any of the overridden dependencies matches a given package. +fn node_override( graph: &Graph, - override_node: NodeIndex, node: NodeIndex, pkg_name: &PM::PackageName, - existing_pkg: &'a Package, - new_pkg: &'a Package, - pkg_found: &mut Vec<&'a Package>, -) -> Result<()> { - // just in case - this function should report error before this condition is violated here - assert!(pkg_found.len() <= 1); + overridden_in: &PM::PackageName, +) -> bool { for e in graph.edges(node) { - let target_name = graph.node_weight(e.target()).unwrap(); - if target_name == pkg_name { - // we reached the conflicting package in the graph through one of the edges, either - // already existing one or the non-finalized one that was inserted before processing - // a conflicting dependency - let pkg = if e.weight().finalized { - existing_pkg - } else { - new_pkg - }; - if !pkg_found.contains(&pkg) { - pkg_found.push(pkg); - } - if pkg_found.len() > 1 { - // we reached the same node via two different paths - let override_node_name = graph.node_weight(override_node).unwrap(); - bail!("Insufficient override in '{}'", override_node_name); - } - } - } - - let overrides = node_overrides(graph, node)?; - // node_overrides guarantees that there is 0 or 1 overrides - if !overrides.is_empty() { - // search through overridden edge only - find_override_reachable_pkgs( - graph, - override_node, - overrides[0], - pkg_name, - existing_pkg, - new_pkg, - pkg_found, - )?; - } else { - // search through all edges - for e in graph.edges(node) { - find_override_reachable_pkgs( - graph, - override_node, - e.target(), - pkg_name, - existing_pkg, - new_pkg, - pkg_found, - )?; + if e.weight().dep_override + && overridden_in == graph.node_weight(e.source()).unwrap() + && pkg_name == graph.node_weight(e.target()).unwrap() + { + return true; } } - Ok(()) -} - -fn node_overrides(graph: &Graph, node: NodeIndex) -> Result> { - let edges = graph.edges(node); - let overrides: Vec = edges - .filter_map(|e| { - if e.weight().dep_override { - Some(e.target()) - } else { - None - } - }) - .collect(); - if overrides.len() > 1 { - let override_node_name = graph.node_weight(node).unwrap(); - bail!("Multiple overrides found in '{}'", override_node_name); - } - Ok(overrides) + false } diff --git a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved index 9541cc011c..db7893f2c8 100644 --- a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved @@ -69,6 +69,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "B": Package { kind: Local( @@ -76,6 +77,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "C": Package { kind: Local( @@ -83,6 +85,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "D": Package { kind: Local( @@ -90,6 +93,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved index f7b870c46d..83fef89c40 100644 --- a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved index cffe541ce8..a88438ffa0 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved @@ -51,6 +51,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "B": Package { kind: Local( @@ -58,6 +59,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "C": Package { kind: Local( @@ -65,6 +67,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved index d490969fe4..57f17aa910 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved @@ -53,6 +53,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( @@ -60,6 +61,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "B": Package { kind: Local( @@ -67,6 +69,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked index ae58bf80ea..e0e1876946 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked @@ -5,6 +5,7 @@ version = 0 dependencies = [ { name = "A" }, + { name = "ADep" }, { name = "B" }, ] diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved index fc31fbb673..7b13a0f6d0 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved @@ -4,6 +4,10 @@ ResolvedGraph { root_package: "Root", package_graph: { "Root": [ + ( + "ADep", + Outgoing, + ), ( "B", Outgoing, @@ -13,17 +17,11 @@ ResolvedGraph { Outgoing, ), ], - "B": [ + "ADep": [ ( "Root", Incoming, ), - ( - "ADep", - Outgoing, - ), - ], - "ADep": [ ( "B", Incoming, @@ -33,6 +31,16 @@ ResolvedGraph { Incoming, ), ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], "A": [ ( "Root", @@ -53,6 +61,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( @@ -66,6 +75,9 @@ ResolvedGraph { ), ), resolver: None, + overridden_in: Some( + "Root", + ), }, "B": Package { kind: Local( @@ -73,6 +85,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -222,6 +235,23 @@ ResolvedGraph { "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( @@ -230,7 +260,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: true, + dep_override: false, }, ), }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml index a455331123..ec66c555ab 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml @@ -3,7 +3,8 @@ name = "Root" version = "0.0.0" [dependencies] -B = { local = "./deps_only/B", override = true } +B = { local = "./deps_only/B" } +ADep = { local = "./deps_only/ADep", version = "1.0.0", override = true } [dependencies.A] resolver = "../resolvers/successful.sh" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked index 9156410709..8e9e8edca7 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked @@ -6,6 +6,7 @@ version = 0 dependencies = [ { name = "A" }, { name = "B" }, + { name = "E" }, ] [[move.package]] @@ -14,6 +15,7 @@ source = { local = "deps_only/A" } dependencies = [ { name = "C" }, + { name = "D" }, ] [[move.package]] @@ -21,7 +23,7 @@ name = "B" source = { local = "deps_only/B" } dependencies = [ - { name = "D" }, + { name = "E" }, ] [[move.package]] @@ -30,7 +32,6 @@ source = { local = "deps_only/C" } dependencies = [ { name = "E" }, - { name = "F" }, ] [[move.package]] @@ -38,25 +39,9 @@ name = "D" source = { local = "deps_only/D" } dependencies = [ - { name = "G" }, + { name = "E" }, ] [[move.package]] name = "E" -source = { local = "deps_only/E" } - -dependencies = [ - { name = "G" }, -] - -[[move.package]] -name = "F" -source = { local = "deps_only/F" } - -dependencies = [ - { name = "G" }, -] - -[[move.package]] -name = "G" -source = { local = "deps_only/G", version = "1.0.0" } +source = { local = "deps_only/E", version = "1.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved index 375a5cf31d..7e8c06aae3 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved @@ -4,6 +4,10 @@ ResolvedGraph { root_package: "Root", package_graph: { "Root": [ + ( + "E", + Outgoing, + ), ( "A", Outgoing, @@ -13,81 +17,65 @@ ResolvedGraph { Outgoing, ), ], - "A": [ + "E": [ ( "Root", Incoming, ), ( "C", - Outgoing, - ), - ], - "C": [ - ( - "A", Incoming, ), ( - "E", - Outgoing, - ), - ( - "F", - Outgoing, - ), - ], - "E": [ - ( - "C", + "D", Incoming, ), ( - "G", - Outgoing, + "B", + Incoming, ), ], - "G": [ + "A": [ ( - "E", + "Root", Incoming, ), ( - "F", - Incoming, + "C", + Outgoing, ), ( "D", - Incoming, + Outgoing, ), ], - "F": [ + "C": [ ( - "C", + "A", Incoming, ), ( - "G", + "E", Outgoing, ), ], - "B": [ + "D": [ ( - "Root", + "A", Incoming, ), ( - "D", + "E", Outgoing, ), ], - "D": [ + "B": [ ( - "B", + "Root", Incoming, ), ( - "G", + "E", Outgoing, ), ], @@ -99,6 +87,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "B": Package { kind: Local( @@ -106,6 +95,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "C": Package { kind: Local( @@ -113,6 +103,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "D": Package { kind: Local( @@ -120,25 +111,12 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "E": Package { kind: Local( "deps_only/E", ), - version: None, - resolver: None, - }, - "F": Package { - kind: Local( - "deps_only/F", - ), - version: None, - resolver: None, - }, - "G": Package { - kind: Local( - "deps_only/G", - ), version: Some( ( 1, @@ -147,6 +125,9 @@ ResolvedGraph { ), ), resolver: None, + overridden_in: Some( + "Root", + ), }, }, always_deps: { @@ -155,8 +136,6 @@ ResolvedGraph { "C", "D", "E", - "F", - "G", "Root", }, }, @@ -206,31 +185,6 @@ ResolvedGraph { 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: { "D": Internal( InternalDependency { kind: Local( @@ -250,10 +204,10 @@ ResolvedGraph { resolved_table: {}, source_digest: "ELIDED_FOR_TEST", }, - "C": Package { + "B": Package { source_package: SourceManifest { package: PackageInfo { - name: "C", + name: "B", version: ( 0, 0, @@ -273,53 +227,6 @@ ResolvedGraph { "../E", ), subst: None, - version: None, - digest: None, - dep_override: true, - }, - ), - "F": Internal( - InternalDependency { - kind: Local( - "../F", - ), - 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: { - "G": Internal( - InternalDependency { - kind: Local( - "../G", - ), - subst: None, version: Some( ( 3, @@ -339,10 +246,10 @@ ResolvedGraph { resolved_table: {}, source_digest: "ELIDED_FOR_TEST", }, - "E": Package { + "C": Package { source_package: SourceManifest { package: PackageInfo { - name: "E", + name: "C", version: ( 0, 0, @@ -356,15 +263,15 @@ ResolvedGraph { dev_address_assignments: None, build: None, dependencies: { - "G": Internal( + "E": Internal( InternalDependency { kind: Local( - "../G", + "../E", ), subst: None, version: Some( ( - 1, + 2, 0, 0, ), @@ -381,10 +288,10 @@ ResolvedGraph { resolved_table: {}, source_digest: "ELIDED_FOR_TEST", }, - "F": Package { + "D": Package { source_package: SourceManifest { package: PackageInfo { - name: "F", + name: "D", version: ( 0, 0, @@ -398,10 +305,10 @@ ResolvedGraph { dev_address_assignments: None, build: None, dependencies: { - "G": Internal( + "E": Internal( InternalDependency { kind: Local( - "../G", + "../E", ), subst: None, version: Some( @@ -423,10 +330,10 @@ ResolvedGraph { resolved_table: {}, source_digest: "ELIDED_FOR_TEST", }, - "G": Package { + "E": Package { source_package: SourceManifest { package: PackageInfo { - name: "G", + name: "E", version: ( 0, 0, @@ -472,7 +379,7 @@ ResolvedGraph { subst: None, version: None, digest: None, - dep_override: true, + dep_override: false, }, ), "B": Internal( @@ -486,6 +393,23 @@ ResolvedGraph { 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: {}, }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml index 8b925e653c..cc6748c674 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml @@ -1,23 +1,25 @@ -# Dependency graph and overrides (ov) -# +----+ -# +---->| F |--------------+ -# | +----+ | -# | | -# ov +----+ ov +----+ | | -# +---->| A |---->| C |----+ | -# | +----+ +----+ | | -# | | | -# +----+ | | +----+ | -# |Root|----+ +---->| E |------+ | -# +----+ | +----+ | | -# | v1 | | -# | +----+ +---+ v3 +----+<-----+ | -# +---->| B +---->| D |---------->| G | v2 | -# +----+ +---+ +----+<-------------+ +# Dependency graph and and override (ov) +# +----+ +# +---->| C |--------------+ +# | +----+ | +# | | +# +----+ | | +# +---->| A |----+ | +# | +----+ | | +# | | | +# +----+ | ov(1) | +----+ | +# |Root|----+------------+ +---->| D |------+ | +# +----+ | | +----+ | | +# | | v1 | | +# | +----+ +------->+----+<-----+ | +# +---->| B |--------->| E | v2 | +# +----+ v3 +----+<-------------+ [package] name = "Root" version = "0.0.0" [dependencies] -A = { local = "./deps_only/A", override = true } +A = { local = "./deps_only/A" } B = { local = "./deps_only/B" } +E = { local = "./deps_only/E", version = "1.0.0", override = true } + diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml index 58bf5ee785..a606d04583 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml @@ -4,3 +4,4 @@ version = "0.0.0" [dependencies] C = { local = "../C" } +D = { local = "../D" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml index b35ffc1bce..c4ad219336 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/B/Move.toml @@ -3,4 +3,4 @@ name = "B" version = "0.0.0" [dependencies] -D = { local = "../D" } +E = { local = "../E", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml index 11813b36dd..9c1c69cb1f 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml @@ -3,5 +3,4 @@ name = "C" version = "0.0.0" [dependencies] -E = { local = "../E", override = true } -F = { local = "../F" } +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml index f99eb1b327..5b594aae20 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/D/Move.toml @@ -3,4 +3,4 @@ name = "D" version = "0.0.0" [dependencies] -G = { local = "../G", version = "3.0.0" } +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml index 71ce2f2760..dc97c6690f 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml @@ -1,6 +1,3 @@ [package] name = "E" version = "0.0.0" - -[dependencies] -G = { local = "../G", version = "1.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml deleted file mode 100644 index b77155c25e..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/F/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "F" -version = "0.0.0" - -[dependencies] -G = { local = "../G", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml deleted file mode 100644 index 16e8cb4ef2..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/G/Move.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "G" -version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved deleted file mode 100644 index e46e00fc86..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.resolved +++ /dev/null @@ -1 +0,0 @@ -Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'A': Resolving dependencies for package 'C': Resolving dependencies for package 'F': Insufficient override in 'Root' diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml deleted file mode 100644 index 0a33e68980..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/Move.toml +++ /dev/null @@ -1,23 +0,0 @@ -# Dependency graph and an (insufficient) override (ov) -# +----+ -# +---->| F |--------------+ -# | +----+ | -# | | -# ov +----+ +----+ | | -# +---->| A |---->| C |----+ | -# | +----+ +----+ | | -# | | | -# +----+ | | +----+ | -# |Root|----+ +---->| E |------+ | -# +----+ | +----+ | | -# | v1 | | -# | +----+ +---+ v3 +----+<-----+ | -# +---->| B +---->| D |---------->| G | v2 | -# +----+ +---+ +----+<-------------+ -[package] -name = "Root" -version = "0.0.0" - -[dependencies] -A = { local = "./deps_only/A", override = true } -B = { local = "./deps_only/B" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml deleted file mode 100644 index 58bf5ee785..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/A/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "A" -version = "0.0.0" - -[dependencies] -C = { local = "../C" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml deleted file mode 100644 index b35ffc1bce..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/B/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "B" -version = "0.0.0" - -[dependencies] -D = { local = "../D" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml deleted file mode 100644 index 71ce2f2760..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/E/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "E" -version = "0.0.0" - -[dependencies] -G = { local = "../G", version = "1.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml deleted file mode 100644 index b77155c25e..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/F/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "F" -version = "0.0.0" - -[dependencies] -G = { local = "../G", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml deleted file mode 100644 index 16e8cb4ef2..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/G/Move.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "G" -version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved index c354ea9396..da6f447a5c 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.resolved @@ -1,3 +1,3 @@ -Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Resolving dependencies for package 'D': Conflicting dependencies found: -G = { local = "deps_only/G", version = "1.0.0" } -G = { local = "deps_only/G", version = "3.0.0" } +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/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml index 9110fd785f..3a749942da 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/Move.toml @@ -1,19 +1,19 @@ # Dependency graph and an (insufficient) override (ov) -# +----+ -# +---->| F |--------------+ -# | +----+ | -# | | -# +----+ ov +----+ | | -# +---->| A |---->| C |----+ | -# | +----+ +----+ | | -# | | | -# +----+ | | +----+ | -# |Root|----+ +---->| E |------+ | -# +----+ | +----+ | | -# | v1 | | -# | +----+ +---+ v3 +----+<-----+ | -# +---->| B +---->| D |---------->| G | v2 | -# +----+ +---+ +----+<-------------+ +# +----+ +# +---->| C |--------------+ +# | +----+ | +# | | +# +----+ | | +# +---->| A |----+ | +# | +----+ | | +# | | | | +# +----+ | | | +----+ | +# |Root|----+ |ov(1) +---->| D |------+ | +# +----+ | +----+ +----+ | | +# | | v1 | | +# | +----+ +------->+----+<-----+ | +# +---->| B |--------->| E | v2 | +# +----+ v3 +----+<-------------+ [package] name = "Root" version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml index ed64422092..8da71235e1 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml @@ -4,3 +4,6 @@ version = "0.0.0" [dependencies] C = { local = "../C"} +D = { local = "../D"} +E = { local = "../E", version = "1.0.0", override = true } + diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml index b35ffc1bce..c4ad219336 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/B/Move.toml @@ -3,4 +3,4 @@ name = "B" version = "0.0.0" [dependencies] -D = { local = "../D" } +E = { local = "../E", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml index df2b8db319..5aa35b1ac8 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/C/Move.toml @@ -3,5 +3,4 @@ name = "C" version = "0.0.0" [dependencies] -E = { local = "../E", override = true } -F = { local = "../F" } +E = { local = "../E", version = "1.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml index f99eb1b327..5b594aae20 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/D/Move.toml @@ -3,4 +3,4 @@ name = "D" version = "0.0.0" [dependencies] -G = { local = "../G", version = "3.0.0" } +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml index 71ce2f2760..dc97c6690f 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/E/Move.toml @@ -1,6 +1,3 @@ [package] name = "E" version = "0.0.0" - -[dependencies] -G = { local = "../G", version = "1.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml deleted file mode 100644 index b77155c25e..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/F/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "F" -version = "0.0.0" - -[dependencies] -G = { local = "../G", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked index 65a9a9fb6e..0ba7e9c31d 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked @@ -6,6 +6,7 @@ version = 0 dependencies = [ { name = "A" }, { name = "B" }, + { name = "C" }, ] [[move.package]] diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved index e7233e2bca..05daad7275 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved @@ -4,6 +4,10 @@ ResolvedGraph { root_package: "Root", package_graph: { "Root": [ + ( + "C", + Outgoing, + ), ( "A", Outgoing, @@ -13,17 +17,11 @@ ResolvedGraph { Outgoing, ), ], - "A": [ + "C": [ ( "Root", Incoming, ), - ( - "C", - Outgoing, - ), - ], - "C": [ ( "A", Incoming, @@ -33,6 +31,16 @@ ResolvedGraph { Incoming, ), ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "C", + Outgoing, + ), + ], "B": [ ( "Root", @@ -51,6 +59,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "B": Package { kind: Local( @@ -58,6 +67,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "C": Package { kind: Local( @@ -71,6 +81,9 @@ ResolvedGraph { ), ), resolver: None, + overridden_in: Some( + "Root", + ), }, }, always_deps: { @@ -242,6 +255,23 @@ ResolvedGraph { 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, }, ), diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml index 7331119495..f624dd7f7a 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml @@ -4,4 +4,5 @@ version = "0.0.0" [dependencies] A = { local = "./deps_only/A" } -B = { local = "./deps_only/B", override = true } +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C", version = "1.0.0", override = true } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved deleted file mode 100644 index 2bd7e30c34..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.resolved +++ /dev/null @@ -1 +0,0 @@ -Failed to resolve dependencies for package 'Root': Resolving dependencies for package 'B': Multiple overrides found in 'Root' diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml deleted file mode 100644 index 94a6f071f5..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/Move.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "Root" -version = "0.0.0" - -[dependencies] -# should error -A = { local = "./deps_only/A", override = true } -B = { local = "./deps_only/B", override = true } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml deleted file mode 100644 index b4bded6d53..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/A/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "A" -version = "0.0.0" - -[dependencies] -C = { local = "../C", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml deleted file mode 100644 index 73ed836961..0000000000 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/C/Move.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "C" -version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.locked new file mode 100644 index 0000000000..6e5a860676 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved new file mode 100644 index 0000000000..ef470720b8 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved @@ -0,0 +1,447 @@ +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": [ + ( + "Root", + Incoming, + ), + ( + "E", + Outgoing, + ), + ( + "C", + Outgoing, + ), + ( + "D", + Outgoing, + ), + ], + "C": [ + ( + "A", + Incoming, + ), + ( + "E", + Outgoing, + ), + ], + "D": [ + ( + "A", + Incoming, + ), + ( + "E", + Outgoing, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "E", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: None, + overridden_in: None, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_in: None, + }, + "C": Package { + kind: Local( + "deps_only/C", + ), + version: None, + resolver: None, + overridden_in: None, + }, + "D": Package { + kind: Local( + "deps_only/D", + ), + version: None, + resolver: None, + overridden_in: None, + }, + "E": Package { + kind: Local( + "deps_only/E", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_in: Some( + "Root", + ), + }, + }, + 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/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml new file mode 100644 index 0000000000..52fc5722e6 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml @@ -0,0 +1,26 @@ +# Dependency graph and and override (ov) +# +----+ +# +---->| 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/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/A/Move.toml new file mode 100644 index 0000000000..f6105a6c14 --- /dev/null +++ b/language/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml similarity index 56% rename from language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/B/Move.toml rename to language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml index 1ee8a9c06d..c4ad219336 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override_both/deps_only/B/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml @@ -3,4 +3,4 @@ name = "B" version = "0.0.0" [dependencies] -C = { local = "../C", version = "1.0.0" } +E = { local = "../E", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml similarity index 54% rename from language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/C/Move.toml rename to language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml index 02631391d7..9c1c69cb1f 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/C/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml @@ -3,5 +3,4 @@ name = "C" version = "0.0.0" [dependencies] -E = { local = "../E" } -F = { local = "../F" } +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml similarity index 56% rename from language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/D/Move.toml rename to language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml index f99eb1b327..5b594aae20 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_high/deps_only/D/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml @@ -3,4 +3,4 @@ name = "D" version = "0.0.0" [dependencies] -G = { local = "../G", version = "3.0.0" } +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml similarity index 71% rename from language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml rename to language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml index 16e8cb4ef2..dc97c6690f 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/G/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml @@ -1,3 +1,3 @@ [package] -name = "G" +name = "E" version = "0.0.0" diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved index 56cf8e3a38..6b49b7c99a 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved @@ -51,6 +51,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "B": Package { kind: Local( @@ -58,6 +59,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "C": Package { kind: Local( @@ -65,6 +67,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/external/Move.resolved b/language/tools/move-package/tests/test_sources/external/Move.resolved index 3d1b6666a6..0af57bc888 100644 --- a/language/tools/move-package/tests/test_sources/external/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external/Move.resolved @@ -35,6 +35,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( @@ -44,6 +45,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved index e85f75aba0..88cf939149 100644 --- a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved @@ -55,6 +55,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( @@ -64,6 +65,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "B": Package { kind: Local( @@ -73,6 +75,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "BDep": Package { kind: Local( @@ -82,6 +85,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved index d39c8ff1f6..81fdfa98fa 100644 --- a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved @@ -43,6 +43,7 @@ ResolvedGraph { resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( @@ -50,6 +51,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved index a94df360fd..fc61632e51 100644 --- a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved +++ b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved @@ -33,6 +33,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "D": Package { kind: Local( @@ -40,6 +41,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved b/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved index ff4a0958f5..05e943ae86 100644 --- a/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved +++ b/language/tools/move-package/tests/test_sources/nested_deps_git_local/Move.resolved @@ -37,6 +37,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, "MoveStdlib": Package { kind: Git( @@ -48,6 +49,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved index 469e087056..5af34c7246 100644 --- a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved index 76837b76ba..4924d5c0fe 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved index eb20cbb296..266a115381 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved index d9cc61c772..306084d8b8 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved @@ -23,6 +23,9 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: Some( + "Root", + ), }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved index 30c1b17f61..c91cfaa236 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { diff --git a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved index 429f261966..2f0cb30b40 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { From b5f59d6f69a5e32bdabe96be49f108a6af76a0ed Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Tue, 7 Mar 2023 19:54:04 -0800 Subject: [PATCH 09/10] Normalized local paths when reading manifest --- .../src/resolution/dependency_graph.rs | 3 +++ .../src/source_package/manifest_parser.rs | 5 ++++- .../src/source_package/parsed_manifest.rs | 19 ++----------------- .../dep_dev_dep_diamond/Move.resolved | 6 +++--- .../dep_good_digest/Move.resolved | 2 +- .../Move.resolved | 4 ++-- .../Move.resolved | 2 +- .../Move.locked | 2 +- .../Move.resolved | 4 ++-- .../Move.locked | 2 +- .../Move.resolved | 6 +++--- .../Move.resolved | 6 +++--- .../Move.toml | 1 - .../deps_only/A/Move.toml | 1 - .../Move.resolved | 6 +++--- .../Move.resolved | 6 +++--- .../Move.toml | 3 +-- .../diamond_problem_no_conflict/Move.resolved | 4 ++-- .../tests/test_sources/external/Move.locked | 4 ++-- .../tests/test_sources/external/Move.resolved | 4 ++-- .../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 | 8 ++++---- .../test_sources/external_overlap/Move.locked | 2 +- .../external_overlap/Move.resolved | 4 ++-- .../test_sources/external_silent/Move.locked | 4 ++-- .../multiple_deps_rename/Move.resolved | 4 ++-- .../tests/test_sources/one_dep/Move.resolved | 2 +- .../one_dep_assigned_address/Move.resolved | 2 +- .../Move.resolved | 2 +- .../one_dep_override/Move.resolved | 2 +- .../one_dep_reassigned_address/Move.resolved | 2 +- .../Move.resolved | 2 +- 34 files changed, 63 insertions(+), 75 deletions(-) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index b846df103a..65aee3951a 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -1172,6 +1172,9 @@ fn find_override( root_node: NodeIndex, pkg_node: NodeIndex, ) -> bool { + // TODO: the current algorithm is arguably not the most efficient one due to the dominator info + // being recomputed each time a conflict is being resolved - should not matter performance-wise + // but perhaps a more elegant solution can be found in the future let all_dominators = algo::dominators::simple_fast(&graph, root_node); // at the very least root package dominates (it's guaranteed by graph construction) all so // unwrap is safe diff --git a/language/tools/move-package/src/source_package/manifest_parser.rs b/language/tools/move-package/src/source_package/manifest_parser.rs index 9b81316ff0..da082852a2 100644 --- a/language/tools/move-package/src/source_package/manifest_parser.rs +++ b/language/tools/move-package/src/source_package/manifest_parser.rs @@ -355,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) => { diff --git a/language/tools/move-package/src/source_package/parsed_manifest.rs b/language/tools/move-package/src/source_package/parsed_manifest.rs index a74f912e9e..7ac1f38792 100644 --- a/language/tools/move-package/src/source_package/parsed_manifest.rs +++ b/language/tools/move-package/src/source_package/parsed_manifest.rs @@ -59,28 +59,13 @@ pub struct InternalDependency { pub dep_override: DepOverride, } -#[derive(Debug, Clone, Eq)] +#[derive(Debug, Clone, Eq, PartialEq)] pub enum DependencyKind { Local(PathBuf), Git(GitInfo), Custom(CustomDepInfo), } -/// Custom implementation to normalize local paths -impl PartialEq for DependencyKind { - fn eq(&self, other: &Self) -> bool { - match (self, other) { - (&DependencyKind::Local(ref p), &DependencyKind::Local(ref op)) => { - normalize_path(p, true).unwrap() == normalize_path(op, true).unwrap() - } - - (&DependencyKind::Git(ref i), &DependencyKind::Git(ref iv)) => i == iv, - (&DependencyKind::Custom(ref i), &DependencyKind::Custom(ref iv)) => i == iv, - _ => false, - } - } -} - #[derive(Debug, Clone, Eq, PartialEq)] pub struct GitInfo { /// The git clone url to download from @@ -171,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/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved index db7893f2c8..35a13fc7bc 100644 --- a/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_dev_dep_diamond/Move.resolved @@ -273,7 +273,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, @@ -284,7 +284,7 @@ ResolvedGraph { "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: None, version: None, @@ -297,7 +297,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, diff --git a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved index 83fef89c40..81fd361176 100644 --- a/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved +++ b/language/tools/move-package/tests/test_sources/dep_good_digest/Move.resolved @@ -105,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved index a88438ffa0..265a722e61 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_backflow_resolution/Move.resolved @@ -243,7 +243,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, @@ -254,7 +254,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved index fec6cae831..e4b751a0e3 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_conflict/Move.resolved @@ -1,3 +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 +ADep = { local = "deps_only/ADep" } # Resolved by ../resolvers/successful.sh diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked index e560eaba1d..1302689e4f 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/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/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved index 57f17aa910..fcd5209456 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved @@ -47,7 +47,7 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( @@ -216,7 +216,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked index e0e1876946..a2c2956e76 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked @@ -11,7 +11,7 @@ dependencies = [ [[move.package]] name = "A" -source = { local = "./deps_only/A" } +source = { local = "deps_only/A" } dependencies = [ { name = "ADep" }, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved index 7b13a0f6d0..fed3bdfd05 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved @@ -55,7 +55,7 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( @@ -238,7 +238,7 @@ ResolvedGraph { "ADep": Internal( InternalDependency { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), subst: None, version: Some( @@ -255,7 +255,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved index 7e8c06aae3..0a7cf16cd4 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved @@ -374,7 +374,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, @@ -385,7 +385,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, @@ -396,7 +396,7 @@ ResolvedGraph { "E": Internal( InternalDependency { kind: Local( - "./deps_only/E", + "deps_only/E", ), subst: None, version: Some( diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml index cc6748c674..da86144aa2 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml @@ -22,4 +22,3 @@ version = "0.0.0" A = { local = "./deps_only/A" } B = { local = "./deps_only/B" } E = { local = "./deps_only/E", version = "1.0.0", override = true } - diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml index 8da71235e1..ab913a367a 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override_insufficient_low/deps_only/A/Move.toml @@ -6,4 +6,3 @@ version = "0.0.0" C = { local = "../C"} D = { local = "../D"} E = { local = "../E", version = "1.0.0", override = true } - diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved index 05daad7275..f9e2d337d1 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved @@ -239,7 +239,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, @@ -250,7 +250,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, @@ -261,7 +261,7 @@ ResolvedGraph { "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: None, version: Some( diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved index ef470720b8..0c76886663 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.resolved @@ -399,7 +399,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, @@ -410,7 +410,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, @@ -421,7 +421,7 @@ ResolvedGraph { "E": Internal( InternalDependency { kind: Local( - "./deps_only/E", + "deps_only/E", ), subst: None, version: Some( diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml index 52fc5722e6..2237f68fa1 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml @@ -14,7 +14,7 @@ # | +----+ | +-------->+----+<-----+ | # +---->| B | +----------->| E | v2 | # +----+------------->+----+<-------------+ -# v3 +# v3 [package] name = "Root" version = "0.0.0" @@ -23,4 +23,3 @@ version = "0.0.0" A = { local = "./deps_only/A" } B = { local = "./deps_only/B" } E = { local = "./deps_only/E", version = "1.0.0", override = true } - diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved index 6b49b7c99a..cf54716a72 100644 --- a/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved +++ b/language/tools/move-package/tests/test_sources/diamond_problem_no_conflict/Move.resolved @@ -243,7 +243,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: Some( { @@ -260,7 +260,7 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/external/Move.locked b/language/tools/move-package/tests/test_sources/external/Move.locked index 687c1e5fcf..2b7382a74e 100644 --- a/language/tools/move-package/tests/test_sources/external/Move.locked +++ b/language/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/language/tools/move-package/tests/test_sources/external/Move.resolved b/language/tools/move-package/tests/test_sources/external/Move.resolved index 0af57bc888..ec22e403f6 100644 --- a/language/tools/move-package/tests/test_sources/external/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external/Move.resolved @@ -29,7 +29,7 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( @@ -39,7 +39,7 @@ ResolvedGraph { }, "ADep": Package { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), version: None, resolver: Some( diff --git a/language/tools/move-package/tests/test_sources/external_bad_dep/Move.locked b/language/tools/move-package/tests/test_sources/external_bad_dep/Move.locked index 687c1e5fcf..2b7382a74e 100644 --- a/language/tools/move-package/tests/test_sources/external_bad_dep/Move.locked +++ b/language/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/language/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved b/language/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved index ec09f7afc6..d03823e289 100644 --- a/language/tools/move-package/tests/test_sources/external_bad_dep/Move.resolved +++ b/language/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/language/tools/move-package/tests/test_sources/external_dev_dep/Move.locked b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.locked index 0b79d343c4..566ce195a4 100644 --- a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.locked +++ b/language/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/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved index 88cf939149..68819e9f87 100644 --- a/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_dev_dep/Move.resolved @@ -49,7 +49,7 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( @@ -59,7 +59,7 @@ ResolvedGraph { }, "ADep": Package { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), version: None, resolver: Some( @@ -69,7 +69,7 @@ ResolvedGraph { }, "B": Package { kind: Local( - "./deps_only/B", + "deps_only/B", ), version: None, resolver: Some( @@ -79,7 +79,7 @@ ResolvedGraph { }, "BDep": Package { kind: Local( - "./deps_only/BDep", + "deps_only/BDep", ), version: None, resolver: Some( diff --git a/language/tools/move-package/tests/test_sources/external_overlap/Move.locked b/language/tools/move-package/tests/test_sources/external_overlap/Move.locked index ba39cf1d16..0a60df86c5 100644 --- a/language/tools/move-package/tests/test_sources/external_overlap/Move.locked +++ b/language/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/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved index 81fdfa98fa..ac1c16f26d 100644 --- a/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved +++ b/language/tools/move-package/tests/test_sources/external_overlap/Move.resolved @@ -37,7 +37,7 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( @@ -161,7 +161,7 @@ ResolvedGraph { "ADep": Internal( InternalDependency { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), subst: None, version: None, diff --git a/language/tools/move-package/tests/test_sources/external_silent/Move.locked b/language/tools/move-package/tests/test_sources/external_silent/Move.locked index 687c1e5fcf..2b7382a74e 100644 --- a/language/tools/move-package/tests/test_sources/external_silent/Move.locked +++ b/language/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/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved index fc61632e51..1082b0556d 100644 --- a/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved +++ b/language/tools/move-package/tests/test_sources/multiple_deps_rename/Move.resolved @@ -158,7 +158,7 @@ ResolvedGraph { "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: Some( { @@ -175,7 +175,7 @@ ResolvedGraph { "D": Internal( InternalDependency { kind: Local( - "./deps_only/D", + "deps_only/D", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved index 5af34c7246..b8ebe4d4ee 100644 --- a/language/tools/move-package/tests/test_sources/one_dep/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep/Move.resolved @@ -105,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved index 4924d5c0fe..a09db39a86 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_assigned_address/Move.resolved @@ -101,7 +101,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved index 266a115381..0acceac277 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_multiple_of_same_name/Move.resolved @@ -105,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved index 306084d8b8..0f8f796e80 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved @@ -107,7 +107,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved index c91cfaa236..af87b41c4c 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_reassigned_address/Move.resolved @@ -107,7 +107,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { diff --git a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved index 2f0cb30b40..6e22bfb05f 100644 --- a/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved +++ b/language/tools/move-package/tests/test_sources/one_dep_unification_across_local_renamings/Move.resolved @@ -105,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { From 4a80f06848a046dfd5136472f347595c97181301 Mon Sep 17 00:00:00 2001 From: Adam Welc Date: Tue, 7 Mar 2023 20:05:27 -0800 Subject: [PATCH 10/10] Cosmetic comment change --- language/tools/move-package/src/resolution/dependency_graph.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 65aee3951a..461de0c25a 100644 --- a/language/tools/move-package/src/resolution/dependency_graph.rs +++ b/language/tools/move-package/src/resolution/dependency_graph.rs @@ -1130,6 +1130,7 @@ fn pkg_deps_equal<'a>( /// either: /// - the new package has been inserted as a result of an override and: /// - it's dominating override for the existing package then new package is the winner +/// or /// - it's not a dominating override for the existing package then an error must be reported /// or /// - the new package has not been inserted as a result of an override and an error must be reported