diff --git a/language/tools/move-package/src/resolution/dependency_graph.rs b/language/tools/move-package/src/resolution/dependency_graph.rs index 50f7d2c27e..461de0c25a 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, @@ -67,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)] @@ -74,6 +82,10 @@ pub struct Dependency { pub mode: DependencyMode, pub subst: Option, pub digest: 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, } /// Indicates whether one package always depends on another, or only in dev-mode. @@ -98,6 +110,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); @@ -202,6 +215,8 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, + finalized: true, }, ); } @@ -219,6 +234,8 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, + finalized: true, }, ); } @@ -255,6 +272,7 @@ impl DependencyGraph { kind: source.kind, version: source.version, resolver: None, + overridden_in: None, }; match package_table.entry(pkg_name) { @@ -287,6 +305,8 @@ impl DependencyGraph { mode: DependencyMode::Always, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, + finalized: true, }, ); } @@ -304,6 +324,8 @@ impl DependencyGraph { mode: DependencyMode::DevOnly, subst: subst.map(parse_substitution).transpose()?, digest: digest.map(Symbol::from), + dep_override: false, + finalized: true, }, ); } @@ -385,9 +407,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 @@ -396,7 +417,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. @@ -415,6 +436,23 @@ impl DependencyGraph { bail!("Merging dependencies into a graph after calculating its 'always' dependencies"); } + // 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, + 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); @@ -432,37 +470,52 @@ impl DependencyGraph { 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), - ); + 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 + // 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 + let overridden_pkg = override_pkg( + self.package_graph.clone(), + self.root_package, + ext_name, + existing_pkg, + &ext_pkg, + )?; + if overridden_pkg == existing_pkg { + return Ok(()); + } + entry.insert(ext_pkg); } } } } - // Because all the packages in `extensions`'s package table didn't exist in `self`'s, all - // `ext_graph`'s edges are known to not occur in `self.package_graph` and can be added - // without worrying about introducing duplicate edges. - for (from, to, dep) in ext_graph.all_edges() { - self.package_graph.add_edge(from, to, dep.clone()); + // finalize all edges + for (_, _, e) in ext_graph.all_edges_mut() { + e.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. @@ -496,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. @@ -643,22 +731,19 @@ impl DependencyGraph { version, subst, digest, + 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)?; - self.process_dependency( - pkg, - to, - dependency_cache, - external_requests, - progress_output, - )?; self.package_graph.add_edge( from, to, @@ -666,8 +751,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(()) } @@ -693,13 +791,22 @@ impl DependencyGraph { } // 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}", + 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 + let overridden_pkg = override_pkg( + self.package_graph.clone(), + self.root_package, name, - PackageWithResolverTOML(entry.get()), - PackageWithResolverTOML(&pkg), - ); + existing_pkg, + &pkg, + )?; + if overridden_pkg == existing_pkg { + return Ok(()); + } + entry.insert(pkg); + entry.into_mut() } }; @@ -754,20 +861,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,12 +885,32 @@ 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 { kind, version, resolver: _, + overridden_in: _, } = self.0; f.write_str("{ ")?; @@ -871,6 +985,8 @@ impl<'a> fmt::Display for DependencyTOML<'a> { mode: _, subst, digest, + dep_override: _, + finalized: _, }, ) = self; @@ -969,12 +1085,125 @@ 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 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. +/// +/// 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 +/// 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 +/// +/// 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: &'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(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!( + "Conflicting dependencies found:\n{0} = {1}\n{0} = {2}", + pkg_name, + PackageWithResolverTOML(existing_pkg), + PackageWithResolverTOML(new_pkg), + ); +} + +/// 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, +) -> 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 + let pkg_dominators = all_dominators.strict_dominators(pkg_node).unwrap(); + // find dominator that contains a dependency override (the iterator goes over + // immediate dominators) + for d in pkg_dominators { + if node_override(graph, d, pkg_name, overridden_in) { + return true; + } + } + false +} + +/// Check if any of the overridden dependencies matches a given package. +fn node_override( + graph: &Graph, + node: NodeIndex, + pkg_name: &PM::PackageName, + overridden_in: &PM::PackageName, +) -> bool { + for e in graph.edges(node) { + if e.weight().dep_override + && overridden_in == graph.node_weight(e.source()).unwrap() + && pkg_name == graph.node_weight(e.target()).unwrap() + { + return true; + } + } + false +} 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..da082852a2 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,11 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result .transpose()?; let version = table.remove("version").map(parse_version).transpose()?; let digest = table.remove("digest").map(parse_digest).transpose()?; + let dep_override = table + .remove("override") + .map(parse_dep_override) + .transpose()? + .map_or(false, |o| o); let kind = match ( table.remove("local"), @@ -350,7 +355,10 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result bail!("Local source path not a string") }; - PM::DependencyKind::Local(local) + PM::DependencyKind::Local( + // with allow_cwd_parent set to true, it never fails + PM::normalize_path(local, true /* allow_cwd_parent */).unwrap(), + ) } (None, subdir, Some(git_url), None) => { @@ -433,6 +441,7 @@ pub fn parse_dependency(dep_name: &str, mut tval: TV) -> Result subst, version, digest, + dep_override, })) } @@ -502,6 +511,13 @@ fn parse_digest(tval: TV) -> Result { Ok(PM::PackageDigest::from(digest_str)) } +fn parse_dep_override(tval: TV) -> Result { + if !tval.is_bool() { + bail!("Invalid dependency override value"); + } + Ok(tval.as_bool().unwrap()) +} + // check that only recognized names are provided at the top-level fn warn_if_unknown_field_names(table: &toml::map::Map, known_names: &[&str]) { let mut unknown_names = BTreeSet::new(); diff --git a/language/tools/move-package/src/source_package/parsed_manifest.rs b/language/tools/move-package/src/source_package/parsed_manifest.rs index 1337d9113b..7ac1f38792 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,6 +56,7 @@ pub struct InternalDependency { pub subst: Option, pub version: Option, pub digest: Option, + pub dep_override: DepOverride, } #[derive(Debug, Clone, Eq, PartialEq)] @@ -154,7 +156,7 @@ impl Default for DependencyKind { /// or is prefixed by accesses to parent directories when `allow_cwd_parent` is false. /// /// Returns the normalized path on success. -fn normalize_path(path: impl AsRef, allow_cwd_parent: bool) -> Result { +pub fn normalize_path(path: impl AsRef, allow_cwd_parent: bool) -> Result { use Component::*; let mut stack = Vec::new(); diff --git a/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..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 @@ -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", @@ -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: { @@ -142,6 +146,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -154,6 +159,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -189,6 +195,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -266,21 +273,23 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, digest: None, + dep_override: false, }, ), "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -288,11 +297,12 @@ ResolvedGraph { "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..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 @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -117,6 +118,7 @@ ResolvedGraph { digest: Some( "6A88B7888D6049EB0121900E22B6FA2C0E702F042C8C8D4FD62AD5C990B9F9A8", ), + dep_override: false, }, ), }, diff --git a/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..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 @@ -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: { @@ -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: { @@ -123,6 +126,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -171,6 +175,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -238,17 +243,18 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: None, version: None, digest: None, + dep_override: false, }, ), "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: Some( { @@ -259,6 +265,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..e4b751a0e3 --- /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..1302689e4f --- /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..fcd5209456 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_no_conflict/Move.resolved @@ -0,0 +1,236 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_external_no_conflict", + root_package: "Root", + package_graph: { + "Root": [ + ( + "B", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ], + "B": [ + ( + "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", + ), + overridden_in: None, + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: None, + resolver: None, + overridden_in: None, + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_in: 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: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "ADep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "ADep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": External( + "../resolvers/successful.sh", + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/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..a2c2956e76 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.locked @@ -0,0 +1,30 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "ADep" }, + { name = "B" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "ADep" }, +] + +[[move.package]] +name = "ADep" +source = { local = "deps_only/ADep", version = "1.0.0" } + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "ADep" }, +] diff --git a/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..fed3bdfd05 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.resolved @@ -0,0 +1,275 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_external_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "ADep", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ], + "ADep": [ + ( + "Root", + Incoming, + ), + ( + "B", + Incoming, + ), + ( + "A", + Incoming, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "ADep", + Outgoing, + ), + ], + }, + package_table: { + "A": Package { + kind: Local( + "deps_only/A", + ), + version: None, + resolver: Some( + "../resolvers/successful.sh", + ), + overridden_in: None, + }, + "ADep": Package { + kind: Local( + "deps_only/ADep", + ), + version: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_in: Some( + "Root", + ), + }, + "B": Package { + kind: Local( + "deps_only/B", + ), + version: None, + resolver: None, + overridden_in: 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: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "ADep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "ADep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "ADep": Internal( + InternalDependency { + kind: Local( + "../ADep", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": External( + "../resolvers/successful.sh", + ), + "ADep": Internal( + InternalDependency { + kind: Local( + "deps_only/ADep", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/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..ec66c555ab --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_external_override/Move.toml @@ -0,0 +1,14 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +B = { local = "./deps_only/B" } +ADep = { local = "./deps_only/ADep", version = "1.0.0", override = true } + +[dependencies.A] +resolver = "../resolvers/successful.sh" + +[dependencies.A.packages] +Contains = "Anything" +Has = { No = "Schema" } diff --git a/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..8e9e8edca7 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.locked @@ -0,0 +1,47 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "E" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "C" }, + { name = "D" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "D" +source = { local = "deps_only/D" } + +dependencies = [ + { name = "E" }, +] + +[[move.package]] +name = "E" +source = { local = "deps_only/E", version = "1.0.0" } diff --git a/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..0a7cf16cd4 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.resolved @@ -0,0 +1,422 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_nested_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "E", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "E": [ + ( + "Root", + Incoming, + ), + ( + "C", + Incoming, + ), + ( + "D", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "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, + }, + ), + }, + 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_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..da86144aa2 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/Move.toml @@ -0,0 +1,24 @@ +# 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" } +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 new file mode 100644 index 0000000000..a606d04583 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/A/Move.toml @@ -0,0 +1,7 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C" } +D = { local = "../D" } diff --git a/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..c4ad219336 --- /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] +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 new file mode 100644 index 0000000000..9c1c69cb1f --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/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..5b594aae20 --- /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] +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 new file mode 100644 index 0000000000..dc97c6690f --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_nested_override/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/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..da6f447a5c --- /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': 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 new file mode 100644 index 0000000000..3a749942da --- /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) +# +----+ +# +---->| C |--------------+ +# | +----+ | +# | | +# +----+ | | +# +---->| A |----+ | +# | +----+ | | +# | | | | +# +----+ | | | +----+ | +# |Root|----+ |ov(1) +---->| D |------+ | +# +----+ | +----+ +----+ | | +# | | v1 | | +# | +----+ +------->+----+<-----+ | +# +---->| B |--------->| E | v2 | +# +----+ v3 +----+<-------------+ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } diff --git a/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..ab913a367a --- /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,8 @@ +[package] +name = "A" +version = "0.0.0" + +[dependencies] +C = { local = "../C"} +D = { local = "../D"} +E = { local = "../E", version = "1.0.0", override = true } diff --git a/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..c4ad219336 --- /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] +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 new file mode 100644 index 0000000000..5aa35b1ac8 --- /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,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +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 new file mode 100644 index 0000000000..5b594aae20 --- /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] +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 new file mode 100644 index 0000000000..dc97c6690f --- /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,3 @@ +[package] +name = "E" +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..0ba7e9c31d --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.locked @@ -0,0 +1,30 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 0 + +dependencies = [ + { name = "A" }, + { name = "B" }, + { name = "C" }, +] + +[[move.package]] +name = "A" +source = { local = "deps_only/A" } + +dependencies = [ + { name = "C" }, +] + +[[move.package]] +name = "B" +source = { local = "deps_only/B" } + +dependencies = [ + { name = "C" }, +] + +[[move.package]] +name = "C" +source = { local = "deps_only/C", version = "1.0.0" } diff --git a/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..f9e2d337d1 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.resolved @@ -0,0 +1,287 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/diamond_problem_dep_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "C", + Outgoing, + ), + ( + "A", + Outgoing, + ), + ( + "B", + Outgoing, + ), + ], + "C": [ + ( + "Root", + Incoming, + ), + ( + "A", + Incoming, + ), + ( + "B", + Incoming, + ), + ], + "A": [ + ( + "Root", + Incoming, + ), + ( + "C", + Outgoing, + ), + ], + "B": [ + ( + "Root", + Incoming, + ), + ( + "C", + 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: Some( + ( + 1, + 0, + 0, + ), + ), + resolver: None, + overridden_in: Some( + "Root", + ), + }, + }, + always_deps: { + "A", + "B", + "C", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "A": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "A", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C", + ), + subst: None, + version: Some( + ( + 2, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "B": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "B", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "C": Internal( + InternalDependency { + kind: Local( + "../C", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: false, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "C": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "C", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: None, + dev_address_assignments: None, + build: None, + dependencies: { + "A": Internal( + InternalDependency { + kind: Local( + "deps_only/A", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "B": Internal( + InternalDependency { + kind: Local( + "deps_only/B", + ), + subst: None, + version: None, + digest: None, + dep_override: false, + }, + ), + "C": Internal( + InternalDependency { + kind: Local( + "deps_only/C", + ), + subst: None, + version: Some( + ( + 1, + 0, + 0, + ), + ), + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: {}, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/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..f624dd7f7a --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_override/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "Root" +version = "0.0.0" + +[dependencies] +A = { local = "./deps_only/A" } +B = { local = "./deps_only/B" } +C = { local = "./deps_only/C", version = "1.0.0", override = true } diff --git a/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_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..0c76886663 --- /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..2237f68fa1 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/Move.toml @@ -0,0 +1,25 @@ +# 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_two_nested_overrides/deps_only/B/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml new file mode 100644 index 0000000000..c4ad219336 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/B/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "B" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "3.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml new file mode 100644 index 0000000000..9c1c69cb1f --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/C/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "C" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml new file mode 100644 index 0000000000..5b594aae20 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/D/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "D" +version = "0.0.0" + +[dependencies] +E = { local = "../E", version = "2.0.0" } diff --git a/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml new file mode 100644 index 0000000000..dc97c6690f --- /dev/null +++ b/language/tools/move-package/tests/test_sources/diamond_problem_dep_two_nested_overrides/deps_only/E/Move.toml @@ -0,0 +1,3 @@ +[package] +name = "E" +version = "0.0.0" diff --git a/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..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 @@ -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: { @@ -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: { @@ -123,6 +126,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -171,6 +175,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, @@ -238,7 +243,7 @@ ResolvedGraph { "A": Internal( InternalDependency { kind: Local( - "./deps_only/A", + "deps_only/A", ), subst: Some( { @@ -249,12 +254,13 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), "B": Internal( InternalDependency { kind: Local( - "./deps_only/B", + "deps_only/B", ), subst: Some( { @@ -265,6 +271,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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 7f336d242e..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,21 +29,23 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, }, always_deps: { @@ -95,6 +97,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, 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 2025f07a3e..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,39 +49,43 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "ADep": Package { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "B": Package { kind: Local( - "./deps_only/B", + "deps_only/B", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, "BDep": Package { kind: Local( - "./deps_only/BDep", + "deps_only/BDep", ), version: None, resolver: Some( "../resolvers/successful.sh", ), + overridden_in: None, }, }, always_deps: { @@ -133,6 +137,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -192,6 +197,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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 fab2c62e74..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,12 +37,13 @@ ResolvedGraph { package_table: { "A": Package { kind: Local( - "./deps_only/A", + "deps_only/A", ), version: None, 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: { @@ -101,6 +103,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -158,11 +161,12 @@ ResolvedGraph { "ADep": Internal( InternalDependency { kind: Local( - "./deps_only/ADep", + "deps_only/ADep", ), subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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/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 bf37c21ed8..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 @@ -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: { @@ -156,7 +158,7 @@ ResolvedGraph { "C": Internal( InternalDependency { kind: Local( - "./deps_only/C", + "deps_only/C", ), subst: Some( { @@ -167,12 +169,13 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), "D": Internal( InternalDependency { kind: Local( - "./deps_only/D", + "deps_only/D", ), subst: Some( { @@ -183,6 +186,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..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 @@ -10,14 +10,14 @@ ResolvedGraph { ), ], "MoveNursery": [ - ( - "MoveStdlib", - Outgoing, - ), ( "NestedDeps", Incoming, ), + ( + "MoveStdlib", + Outgoing, + ), ], "MoveStdlib": [ ( @@ -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: { @@ -103,6 +105,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, @@ -184,6 +187,7 @@ ResolvedGraph { subst: None, version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..c8dbf13329 --- /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" }, +] 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..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 @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -115,6 +116,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..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 @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -100,7 +101,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -111,6 +112,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..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 @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -115,6 +116,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..fb1915365b --- /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" } }, +] + +[[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..0f8f796e80 --- /dev/null +++ b/language/tools/move-package/tests/test_sources/one_dep_override/Move.resolved @@ -0,0 +1,140 @@ +ResolvedGraph { + graph: DependencyGraph { + root_path: "tests/test_sources/one_dep_override", + root_package: "Root", + package_graph: { + "Root": [ + ( + "OtherDep", + Outgoing, + ), + ], + "OtherDep": [ + ( + "Root", + Incoming, + ), + ], + }, + package_table: { + "OtherDep": Package { + kind: Local( + "deps_only/other_dep", + ), + version: None, + resolver: None, + overridden_in: Some( + "Root", + ), + }, + }, + always_deps: { + "OtherDep", + "Root", + }, + }, + build_options: BuildConfig { + dev_mode: true, + test_mode: false, + generate_docs: false, + generate_abis: false, + install_dir: Some( + "ELIDED_FOR_TEST", + ), + force_recompilation: false, + lock_file: Some( + "ELIDED_FOR_TEST", + ), + additional_named_addresses: {}, + architecture: None, + fetch_deps_only: false, + skip_fetch_latest_git_deps: false, + }, + package_table: { + "OtherDep": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "OtherDep", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: Some( + { + "B": None, + }, + ), + dev_address_assignments: None, + build: None, + dependencies: {}, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: {}, + resolved_table: { + "B": 00000000000000000000000000000001, + }, + source_digest: "ELIDED_FOR_TEST", + }, + "Root": Package { + source_package: SourceManifest { + package: PackageInfo { + name: "Root", + version: ( + 0, + 0, + 0, + ), + authors: [], + license: None, + custom_properties: {}, + }, + addresses: Some( + { + "A": Some( + 00000000000000000000000000000001, + ), + }, + ), + dev_address_assignments: None, + build: None, + dependencies: { + "OtherDep": Internal( + InternalDependency { + kind: Local( + "deps_only/other_dep", + ), + subst: Some( + { + "A": RenameFrom( + "B", + ), + }, + ), + version: None, + digest: None, + dep_override: true, + }, + ), + }, + dev_dependencies: {}, + }, + package_path: "ELIDED_FOR_TEST", + renaming: { + "A": ( + "OtherDep", + "B", + ), + }, + resolved_table: { + "A": 00000000000000000000000000000001, + }, + source_digest: "ELIDED_FOR_TEST", + }, + }, +} diff --git a/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..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 @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -106,7 +107,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -117,6 +118,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), }, diff --git a/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..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 @@ -23,6 +23,7 @@ ResolvedGraph { ), version: None, resolver: None, + overridden_in: None, }, }, always_deps: { @@ -104,7 +105,7 @@ ResolvedGraph { "OtherDep": Internal( InternalDependency { kind: Local( - "./deps_only/other_dep", + "deps_only/other_dep", ), subst: Some( { @@ -115,6 +116,7 @@ ResolvedGraph { ), version: None, digest: None, + dep_override: false, }, ), },