[13/x][move-package/lock] Externally resolved dependencies
Adds support for dependencies that are resolved by calling out to third-party binaries. The invocation is expected to return the transitive dependency sub-graph as a lock file, which is deserialized and merged into the main graph.
Externally resolved dependencies can appear in manifests but not lock files, and it is an error for a package to appear in the outputs of multiple resolvers (including the internal resolver). To differentiate this case from the previous case where the internal resolver encounters the same package via another path, packages in the DependencyGraph track their resolver via an optional field (None for internally resolved packages).
Another consequence of this change is that the check that a dependency's name matches its package name moves from the creation of DependencyGraph to the creation of ResolvedGraph, to pick up cases where the name mismatch occurs in an externally resolved dependency.
Clean-ups
- Also adds support for "progress" tests (snapshot tests for progress output).
- Stricter warnings during dependency parsing, e.g. warning when a
revfield is supplied for a local dependency and other similar cases. - Delete a stale (unused) snapshot file.
Test Plan
New tests, including unit tests for the merging operation, and snapshot tests for external resolution lock file and resolved graph output:
move/language/tools/move-package$ cargo nextest
Stack
- #741
- #745
- #753
- #754
- #759
- #760
- #765
- #784
- #785
- #786
- #787
- #788