Auto merge of #12914 - epage:metadata, r=weihanglo

fix(metadata): Stabilize id format as PackageIDSpec

### What does this PR try to resolve?

For tools integrating with cargo, `cargo metadata` is the primary interface.  Limitations include:
-  There isn't an unambiguous way to map a package entry from `cargo metadata`  to a parameter to pass to other `cargo` commands.  An `id` field exists but it is documented as an opaque string, useful only for comparisons with other `id`s within the document.
- There isn't an unambiguous way of taking user parameters (`--package`) and mapping them to `cargo metadata` entries.  `cargo pkgid` could help but it returns a `PackageIdSpec` which doesn't exist within the `cargo metadata` output.

This attempts to solve these problems by switching the `id` field from `PackageId` to `PackageIdSpec` which is a [publicly documented format](https://doc.rust-lang.org/cargo/reference/pkgid-spec.html), can be generated by `cargo pkgid`, and is accepted by most commands via the `--package` flag.

As the `"id"` field is documented as opaque, this technically isn't a breaking change though people could be parsing it.

For `cargo_metadata` they do [use a new type that documents it as opaque but publicly expose the inner `String`](https://docs.rs/cargo_metadata/latest/cargo_metadata/struct.PackageId.html).  The `String` wasn't publicly exposed due to a request by users but instead their `PackageId` type replaced using `String`s in the API in oli-obk/cargo_metadata#59 with no indication given as to why the `String` was still exposed.  However, you'll note that before that PR, they had `WorkspaceMember` that parsed `PackageId`.  This was introduced in oli-obk/cargo_metadata#26 without a motivation given.

**Note that `PackageIdSpec` has multiple representation that might uniquely identify a package and we can return any one of them.**

Fixes #7267

### How should we test and review this PR?

### Additional information

cc `@oli-obk`
This commit is contained in:
bors 2024-01-15 15:45:36 +00:00
commit 77f2da7b92
13 changed files with 353 additions and 319 deletions

View File

@ -22,7 +22,7 @@ use crate::core::compiler::{CompileKind, RustcTargetData};
use crate::core::dependency::DepKind;
use crate::core::resolver::features::ForceAllTargets;
use crate::core::resolver::{HasDevUnits, Resolve};
use crate::core::{Dependency, Manifest, PackageId, SourceId, Target};
use crate::core::{Dependency, Manifest, PackageId, PackageIdSpec, SourceId, Target};
use crate::core::{Summary, Workspace};
use crate::sources::source::{MaybePackage, SourceMap};
use crate::util::cache_lock::{CacheLock, CacheLockMode};
@ -82,7 +82,7 @@ impl PartialOrd for Package {
pub struct SerializedPackage {
name: InternedString,
version: Version,
id: PackageId,
id: PackageIdSpec,
license: Option<String>,
license_file: Option<String>,
description: Option<String>,
@ -239,7 +239,7 @@ impl Package {
SerializedPackage {
name: package_id.name(),
version: package_id.version().clone(),
id: package_id,
id: package_id.to_spec(),
license: manmeta.license.clone(),
license_file: manmeta.license_file.clone(),
description: manmeta.description.clone(),

View File

@ -3,7 +3,7 @@ use crate::core::compiler::{CompileKind, RustcTargetData};
use crate::core::dependency::DepKind;
use crate::core::package::SerializedPackage;
use crate::core::resolver::{features::CliFeatures, HasDevUnits, Resolve};
use crate::core::{Package, PackageId, Workspace};
use crate::core::{Package, PackageId, PackageIdSpec, Workspace};
use crate::ops::{self, Packages};
use crate::util::interning::InternedString;
use crate::util::CargoResult;
@ -42,8 +42,11 @@ pub fn output_metadata(ws: &Workspace<'_>, opt: &OutputMetadataOptions) -> Cargo
Ok(ExportInfo {
packages,
workspace_members: ws.members().map(|pkg| pkg.package_id()).collect(),
workspace_default_members: ws.default_members().map(|pkg| pkg.package_id()).collect(),
workspace_members: ws.members().map(|pkg| pkg.package_id().to_spec()).collect(),
workspace_default_members: ws
.default_members()
.map(|pkg| pkg.package_id().to_spec())
.collect(),
resolve,
target_directory: ws.target_dir().into_path_unlocked(),
version: VERSION,
@ -58,8 +61,8 @@ pub fn output_metadata(ws: &Workspace<'_>, opt: &OutputMetadataOptions) -> Cargo
#[derive(Serialize)]
pub struct ExportInfo {
packages: Vec<SerializedPackage>,
workspace_members: Vec<PackageId>,
workspace_default_members: Vec<PackageId>,
workspace_members: Vec<PackageIdSpec>,
workspace_default_members: Vec<PackageIdSpec>,
resolve: Option<MetadataResolve>,
target_directory: PathBuf,
version: u32,
@ -70,13 +73,13 @@ pub struct ExportInfo {
#[derive(Serialize)]
struct MetadataResolve {
nodes: Vec<MetadataResolveNode>,
root: Option<PackageId>,
root: Option<PackageIdSpec>,
}
#[derive(Serialize)]
struct MetadataResolveNode {
id: PackageId,
dependencies: Vec<PackageId>,
id: PackageIdSpec,
dependencies: Vec<PackageIdSpec>,
deps: Vec<Dep>,
features: Vec<InternedString>,
}
@ -86,7 +89,9 @@ struct Dep {
// TODO(bindeps): after -Zbindeps gets stabilized,
// mark this field as deprecated in the help manual of cargo-metadata
name: InternedString,
pkg: PackageId,
pkg: PackageIdSpec,
#[serde(skip)]
pkg_id: PackageId,
dep_kinds: Vec<DepKindInfo>,
}
@ -179,7 +184,7 @@ fn build_resolve_graph(
let mr = MetadataResolve {
nodes: node_map.into_iter().map(|(_pkg_id, node)| node).collect(),
root: ws.current_opt().map(|pkg| pkg.package_id()),
root: ws.current_opt().map(|pkg| pkg.package_id().to_spec()),
};
Ok((actual_packages, mr))
}
@ -301,18 +306,20 @@ fn build_resolve_graph_r(
dep_kinds.sort();
let pkg = normalize_id(dep_id);
let pkg_id = normalize_id(dep_id);
let dep = match (lib_target, dep_kinds.len()) {
(Some(target), _) => Dep {
name: extern_name(target)?,
pkg,
pkg: pkg_id.to_spec(),
pkg_id,
dep_kinds,
},
// No lib target exists but contains artifact deps.
(None, 1..) => Dep {
name: InternedString::new(""),
pkg,
pkg: pkg_id.to_spec(),
pkg_id,
dep_kinds,
},
// No lib or artifact dep exists.
@ -325,11 +332,10 @@ fn build_resolve_graph_r(
dep_metadatas
};
let dumb_deps: Vec<PackageId> = deps.iter().map(|dep| dep.pkg).collect();
let to_visit = dumb_deps.clone();
let to_visit: Vec<PackageId> = deps.iter().map(|dep| dep.pkg_id).collect();
let node = MetadataResolveNode {
id: normalize_id(pkg_id),
dependencies: dumb_deps,
id: normalize_id(pkg_id).to_spec(),
dependencies: to_visit.iter().map(|id| id.to_spec()).collect(),
deps,
features,
};

View File

@ -34,8 +34,8 @@ considersed as incompatible:
* **Adding new values for enum-like fields** — Same as adding new fields. It
keeps metadata evolving without stagnation.
* **Changing opaque representations** — The inner representations of some
fields are implementation details. For example, fields related to "Package ID"
or "Source ID" are treated as opaque identifiers to differentiate packages or
fields are implementation details. For example, fields related to
"Source ID" are treated as opaque identifiers to differentiate packages or
sources. Consumers shouldn't rely on those representations unless specified.
### JSON format
@ -53,10 +53,10 @@ The JSON output has the following format:
"name": "my-package",
/* The version of the package. */
"version": "0.1.0",
/* The Package ID, an opaque and unique identifier for referring to the
package. See "Compatibility" above for the stability guarantee.
/* The Package ID for referring to the
package within the document and as the `--package` argument to many commands
*/
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"id": "file:///path/to/my-package#0.1.0",
/* The license value from the manifest, or null. */
"license": "MIT/Apache-2.0",
/* The license-file value from the manifest, or null. */
@ -242,13 +242,13 @@ The JSON output has the following format:
Each entry is the Package ID for the package.
*/
"workspace_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
"file:///path/to/my-package#0.1.0",
],
/* Array of default members of the workspace.
Each entry is the Package ID for the package.
*/
"workspace_default_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
"file:///path/to/my-package#0.1.0",
],
// The resolved dependency graph for the entire workspace. The enabled
// features are based on the enabled features for the "current" package.
@ -266,10 +266,10 @@ The JSON output has the following format:
"nodes": [
{
/* The Package ID of this node. */
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"id": "file:///path/to/my-package#0.1.0",
/* The dependencies of this package, an array of Package IDs. */
"dependencies": [
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)"
"https://github.com/rust-lang/crates.io-index#bitflags@1.0.4"
],
/* The dependencies of this package. This is an alternative to
"dependencies" which contains additional information. In
@ -283,7 +283,7 @@ The JSON output has the following format:
*/
"name": "bitflags",
/* The Package ID of the dependency. */
"pkg": "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg": "https://github.com/rust-lang/crates.io-index#bitflags@1.0.4"
/* Array of dependency kinds. Added in Cargo 1.40. */
"dep_kinds": [
{
@ -309,7 +309,7 @@ The JSON output has the following format:
This is null if this is a virtual workspace. Otherwise it is
the Package ID of the root package.
*/
"root": "my-package 0.1.0 (path+file:///path/to/my-package)"
"root": "file:///path/to/my-package#0.1.0",
},
/* The absolute path to the build directory where Cargo places its output. */
"target_directory": "/path/to/my-package/target",
@ -331,6 +331,11 @@ The JSON output has the following format:
}
````
Notes:
- For `"id"` field syntax, see [Package ID Specifications] in the reference.
[Package ID Specifications]: ../reference/pkgid-spec.html
## OPTIONS
### Output Options

View File

@ -32,9 +32,9 @@ OUTPUT FORMAT
o Changing opaque representations — The inner representations of some
fields are implementation details. For example, fields related to
Package ID” or “Source ID” are treated as opaque identifiers
to differentiate packages or sources. Consumers shouldnt rely on
those representations unless specified.
“Source ID” are treated as opaque identifiers to differentiate
packages or sources. Consumers shouldnt rely on those
representations unless specified.
JSON format
The JSON output has the following format:
@ -49,10 +49,10 @@ OUTPUT FORMAT
"name": "my-package",
/* The version of the package. */
"version": "0.1.0",
/* The Package ID, an opaque and unique identifier for referring to the
package. See "Compatibility" above for the stability guarantee.
/* The Package ID for referring to the
package within the document and as the `--package` argument to many commands
*/
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"id": "file:///path/to/my-package#0.1.0",
/* The license value from the manifest, or null. */
"license": "MIT/Apache-2.0",
/* The license-file value from the manifest, or null. */
@ -238,13 +238,13 @@ OUTPUT FORMAT
Each entry is the Package ID for the package.
*/
"workspace_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
"file:///path/to/my-package#0.1.0",
],
/* Array of default members of the workspace.
Each entry is the Package ID for the package.
*/
"workspace_default_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
"file:///path/to/my-package#0.1.0",
],
// The resolved dependency graph for the entire workspace. The enabled
// features are based on the enabled features for the "current" package.
@ -262,10 +262,10 @@ OUTPUT FORMAT
"nodes": [
{
/* The Package ID of this node. */
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"id": "file:///path/to/my-package#0.1.0",
/* The dependencies of this package, an array of Package IDs. */
"dependencies": [
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)"
"https://github.com/rust-lang/crates.io-index#bitflags@1.0.4"
],
/* The dependencies of this package. This is an alternative to
"dependencies" which contains additional information. In
@ -279,7 +279,7 @@ OUTPUT FORMAT
*/
"name": "bitflags",
/* The Package ID of the dependency. */
"pkg": "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg": "https://github.com/rust-lang/crates.io-index#bitflags@1.0.4"
/* Array of dependency kinds. Added in Cargo 1.40. */
"dep_kinds": [
{
@ -305,7 +305,7 @@ OUTPUT FORMAT
This is null if this is a virtual workspace. Otherwise it is
the Package ID of the root package.
*/
"root": "my-package 0.1.0 (path+file:///path/to/my-package)"
"root": "file:///path/to/my-package#0.1.0",
},
/* The absolute path to the build directory where Cargo places its output. */
"target_directory": "/path/to/my-package/target",
@ -326,6 +326,12 @@ OUTPUT FORMAT
}
}
Notes:
o For "id" field syntax, see Package ID Specifications
<https://doc.rust-lang.org/cargo/reference/pkgid-spec.html> in the
reference.
OPTIONS
Output Options
--no-deps

View File

@ -34,8 +34,8 @@ considersed as incompatible:
* **Adding new values for enum-like fields** — Same as adding new fields. It
keeps metadata evolving without stagnation.
* **Changing opaque representations** — The inner representations of some
fields are implementation details. For example, fields related to "Package ID"
or "Source ID" are treated as opaque identifiers to differentiate packages or
fields are implementation details. For example, fields related to
"Source ID" are treated as opaque identifiers to differentiate packages or
sources. Consumers shouldn't rely on those representations unless specified.
### JSON format
@ -53,10 +53,10 @@ The JSON output has the following format:
"name": "my-package",
/* The version of the package. */
"version": "0.1.0",
/* The Package ID, an opaque and unique identifier for referring to the
package. See "Compatibility" above for the stability guarantee.
/* The Package ID for referring to the
package within the document and as the `--package` argument to many commands
*/
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"id": "file:///path/to/my-package#0.1.0",
/* The license value from the manifest, or null. */
"license": "MIT/Apache-2.0",
/* The license-file value from the manifest, or null. */
@ -242,13 +242,13 @@ The JSON output has the following format:
Each entry is the Package ID for the package.
*/
"workspace_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
"file:///path/to/my-package#0.1.0",
],
/* Array of default members of the workspace.
Each entry is the Package ID for the package.
*/
"workspace_default_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
"file:///path/to/my-package#0.1.0",
],
// The resolved dependency graph for the entire workspace. The enabled
// features are based on the enabled features for the "current" package.
@ -266,10 +266,10 @@ The JSON output has the following format:
"nodes": [
{
/* The Package ID of this node. */
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"id": "file:///path/to/my-package#0.1.0",
/* The dependencies of this package, an array of Package IDs. */
"dependencies": [
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)"
"https://github.com/rust-lang/crates.io-index#bitflags@1.0.4"
],
/* The dependencies of this package. This is an alternative to
"dependencies" which contains additional information. In
@ -283,7 +283,7 @@ The JSON output has the following format:
*/
"name": "bitflags",
/* The Package ID of the dependency. */
"pkg": "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg": "https://github.com/rust-lang/crates.io-index#bitflags@1.0.4"
/* Array of dependency kinds. Added in Cargo 1.40. */
"dep_kinds": [
{
@ -309,7 +309,7 @@ The JSON output has the following format:
This is null if this is a virtual workspace. Otherwise it is
the Package ID of the root package.
*/
"root": "my-package 0.1.0 (path+file:///path/to/my-package)"
"root": "file:///path/to/my-package#0.1.0",
},
/* The absolute path to the build directory where Cargo places its output. */
"target_directory": "/path/to/my-package/target",
@ -331,6 +331,11 @@ The JSON output has the following format:
}
````
Notes:
- For `"id"` field syntax, see [Package ID Specifications] in the reference.
[Package ID Specifications]: ../reference/pkgid-spec.html
## OPTIONS
### Output Options

View File

@ -36,8 +36,8 @@ keeps metadata evolving without stagnation.
.sp
.RS 4
\h'-04'\(bu\h'+02'\fBChanging opaque representations\fR \[em] The inner representations of some
fields are implementation details. For example, fields related to \[lq]Package ID\[rq]
or \[lq]Source ID\[rq] are treated as opaque identifiers to differentiate packages or
fields are implementation details. For example, fields related to
\[lq]Source ID\[rq] are treated as opaque identifiers to differentiate packages or
sources. Consumers shouldn\[cq]t rely on those representations unless specified.
.RE
.SS "JSON format"
@ -58,7 +58,7 @@ The JSON output has the following format:
/* The Package ID, an opaque and unique identifier for referring to the
package. See "Compatibility" above for the stability guarantee.
*/
"id": "my\-package 0.1.0 (path+file:///path/to/my\-package)",
"id": "file:///path/to/my\-package#0.1.0",
/* The license value from the manifest, or null. */
"license": "MIT/Apache\-2.0",
/* The license\-file value from the manifest, or null. */
@ -244,13 +244,13 @@ The JSON output has the following format:
Each entry is the Package ID for the package.
*/
"workspace_members": [
"my\-package 0.1.0 (path+file:///path/to/my\-package)",
"file:///path/to/my\-package#0.1.0",
],
/* Array of default members of the workspace.
Each entry is the Package ID for the package.
*/
"workspace_default_members": [
"my\-package 0.1.0 (path+file:///path/to/my\-package)",
"file:///path/to/my\-package#0.1.0",
],
// The resolved dependency graph for the entire workspace. The enabled
// features are based on the enabled features for the "current" package.
@ -268,10 +268,10 @@ The JSON output has the following format:
"nodes": [
{
/* The Package ID of this node. */
"id": "my\-package 0.1.0 (path+file:///path/to/my\-package)",
"id": "file:///path/to/my\-package#0.1.0",
/* The dependencies of this package, an array of Package IDs. */
"dependencies": [
"bitflags 1.0.4 (registry+https://github.com/rust\-lang/crates.io\-index)"
"https://github.com/rust\-lang/crates.io\-index#bitflags@1.0.4"
],
/* The dependencies of this package. This is an alternative to
"dependencies" which contains additional information. In
@ -285,7 +285,7 @@ The JSON output has the following format:
*/
"name": "bitflags",
/* The Package ID of the dependency. */
"pkg": "bitflags 1.0.4 (registry+https://github.com/rust\-lang/crates.io\-index)",
"pkg": "https://github.com/rust\-lang/crates.io\-index#bitflags@1.0.4"
/* Array of dependency kinds. Added in Cargo 1.40. */
"dep_kinds": [
{
@ -311,7 +311,7 @@ The JSON output has the following format:
This is null if this is a virtual workspace. Otherwise it is
the Package ID of the root package.
*/
"root": "my\-package 0.1.0 (path+file:///path/to/my\-package)"
"root": "file:///path/to/my\-package#0.1.0",
},
/* The absolute path to the build directory where Cargo places its output. */
"target_directory": "/path/to/my\-package/target",
@ -333,6 +333,12 @@ The JSON output has the following format:
}
.fi
.RE
.sp
Notes:
.sp
.RS 4
\h'-04'\(bu\h'+02'For \fB"id"\fR field syntax, see \fIPackage ID Specifications\fR <https://doc.rust\-lang.org/cargo/reference/pkgid\-spec.html> in the reference.
.RE
.SH "OPTIONS"
.SS "Output Options"
.sp

View File

@ -858,7 +858,7 @@ fn alt_reg_metadata() {
{
"name": "foo",
"version": "0.0.1",
"id": "foo 0.0.1 (path+file:[..]/foo)",
"id": "path+file:[..]/foo#0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -908,10 +908,10 @@ fn alt_reg_metadata() {
}
],
"workspace_members": [
"foo 0.0.1 (path+file:[..]/foo)"
"path+file:[..]/foo#0.0.1"
],
"workspace_default_members": [
"foo 0.0.1 (path+file:[..]/foo)"
"path+file:[..]/foo#0.0.1"
],
"resolve": null,
"target_directory": "[..]/foo/target",
@ -931,7 +931,7 @@ fn alt_reg_metadata() {
{
"name": "altdep",
"version": "0.0.1",
"id": "altdep 0.0.1 (registry+file:[..]/alternative-registry)",
"id": "registry+file:[..]/alternative-registry#altdep@0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -970,7 +970,7 @@ fn alt_reg_metadata() {
{
"name": "altdep2",
"version": "0.0.1",
"id": "altdep2 0.0.1 (registry+file:[..]/alternative-registry)",
"id": "registry+file:[..]/alternative-registry#altdep2@0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -996,7 +996,7 @@ fn alt_reg_metadata() {
{
"name": "bar",
"version": "0.0.1",
"id": "bar 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"id": "registry+https://github.com/rust-lang/crates.io-index#bar@0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -1022,7 +1022,7 @@ fn alt_reg_metadata() {
{
"name": "foo",
"version": "0.0.1",
"id": "foo 0.0.1 (path+file:[..]/foo)",
"id": "path+file:[..]/foo#0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -1073,7 +1073,7 @@ fn alt_reg_metadata() {
{
"name": "iodep",
"version": "0.0.1",
"id": "iodep 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"id": "registry+https://github.com/rust-lang/crates.io-index#iodep@0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -1111,10 +1111,10 @@ fn alt_reg_metadata() {
}
],
"workspace_members": [
"foo 0.0.1 (path+file:[..]/foo)"
"path+file:[..]/foo#0.0.1"
],
"workspace_default_members": [
"foo 0.0.1 (path+file:[..]/foo)"
"path+file:[..]/foo#0.0.1"
],
"resolve": "{...}",
"target_directory": "[..]/foo/target",
@ -1174,7 +1174,7 @@ fn unknown_registry() {
{
"name": "bar",
"version": "0.0.1",
"id": "bar 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"id": "registry+https://github.com/rust-lang/crates.io-index#bar@0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -1213,7 +1213,7 @@ fn unknown_registry() {
{
"name": "baz",
"version": "0.0.1",
"id": "baz 0.0.1 (registry+file://[..]/alternative-registry)",
"id": "registry+file://[..]/alternative-registry#baz@0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -1239,7 +1239,7 @@ fn unknown_registry() {
{
"name": "foo",
"version": "0.0.1",
"id": "foo 0.0.1 (path+file://[..]/foo)",
"id": "path+file://[..]/foo#0.0.1",
"license": null,
"license_file": null,
"description": null,
@ -1277,10 +1277,10 @@ fn unknown_registry() {
}
],
"workspace_members": [
"foo 0.0.1 (path+file://[..]/foo)"
"path+file://[..]/foo#0.0.1"
],
"workspace_default_members": [
"foo 0.0.1 (path+file://[..]/foo)"
"path+file://[..]/foo#0.0.1"
],
"resolve": "{...}",
"target_directory": "[..]/foo/target",

View File

@ -584,7 +584,7 @@ fn json_exposed() {
{
"name": "foo",
"version": "0.1.0",
"id": "foo 0.1.0 [..]",
"id": "[..]foo#0.1.0",
"license": null,
"license_file": null,
"description": null,

View File

@ -3271,7 +3271,7 @@ fn metadata_master_consistency() {
{
"name": "bar",
"version": "1.0.0",
"id": "bar 1.0.0 (__BAR_SOURCE__#__BAR_HASH__)",
"id": "__BAR_SOURCE__#1.0.0",
"license": null,
"license_file": null,
"description": null,
@ -3297,7 +3297,7 @@ fn metadata_master_consistency() {
{
"name": "foo",
"version": "0.1.0",
"id": "foo 0.1.0 [..]",
"id": "[..]foo#0.1.0",
"license": null,
"license_file": null,
"description": null,
@ -3335,28 +3335,28 @@ fn metadata_master_consistency() {
}
],
"workspace_members": [
"foo 0.1.0 [..]"
"[..]foo#0.1.0"
],
"workspace_default_members": [
"foo 0.1.0 [..]"
"[..]foo#0.1.0"
],
"resolve": {
"nodes": [
{
"id": "bar 1.0.0 (__BAR_SOURCE__#__BAR_HASH__)",
"id": "__BAR_SOURCE__#1.0.0",
"dependencies": [],
"deps": [],
"features": []
},
{
"id": "foo 0.1.0 [..]",
"id": "[..]foo#0.1.0",
"dependencies": [
"bar 1.0.0 (__BAR_SOURCE__#__BAR_HASH__)"
"__BAR_SOURCE__#1.0.0"
],
"deps": [
{
"name": "bar",
"pkg": "bar 1.0.0 (__BAR_SOURCE__#__BAR_HASH__)",
"pkg": "__BAR_SOURCE__#1.0.0",
"dep_kinds": [
{
"kind": null,
@ -3368,7 +3368,7 @@ fn metadata_master_consistency() {
"features": []
}
],
"root": "foo 0.1.0 [..]"
"root": "[..]foo#0.1.0"
},
"target_directory": "[..]",
"version": 1,

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@ fn manifest_output(readme_value: &str) -> String {
"repository": null,
"rust_version": null,
"version":"0.5.0",
"id":"foo[..]0.5.0[..](path+file://[..]/foo)",
"id":"path+file://[..]/foo#0.5.0",
"keywords": [],
"license": null,
"license_file": null,

View File

@ -1024,7 +1024,7 @@ fn cmd_metadata_with_embedded() {
"default_run": null,
"name": "script",
"version": "0.0.0",
"id": "script[..]",
"id": "path+file:[..]foo#script@0.0.0",
"keywords": [],
"source": null,
"dependencies": [],
@ -1062,18 +1062,18 @@ fn cmd_metadata_with_embedded() {
"publish": []
}
],
"workspace_members": ["script 0.0.0 (path+file:[..]foo)"],
"workspace_default_members": ["script 0.0.0 (path+file:[..]foo)"],
"workspace_members": ["path+file:[..]foo#script@0.0.0"],
"workspace_default_members": ["path+file:[..]foo#script@0.0.0"],
"resolve": {
"nodes": [
{
"dependencies": [],
"deps": [],
"features": [],
"id": "script 0.0.0 (path+file:[..]foo)"
"id": "path+file:[..]foo#script@0.0.0"
}
],
"root": "script 0.0.0 (path+file:[..]foo)"
"root": "path+file:[..]foo#script@0.0.0"
},
"target_directory": "[ROOT]/home/.cargo/target/[..]",
"version": 1,
@ -1112,7 +1112,7 @@ fn cmd_read_manifest_with_embedded() {
"repository": null,
"rust_version": null,
"version":"0.0.0",
"id":"script[..]0.0.0[..](path+file://[..]/foo)",
"id":"path+file://[..]/foo#script@0.0.0",
"keywords": [],
"license": null,
"license_file": null,

View File

@ -700,7 +700,7 @@ fn update_precise_first_run() {
"edition": "2015",
"features": {},
"homepage": null,
"id": "bar 0.0.1 (path+file://[..]/foo)",
"id": "path+file://[..]/foo#bar@0.0.1",
"keywords": [],
"license": null,
"license_file": null,
@ -741,7 +741,7 @@ fn update_precise_first_run() {
"edition": "2015",
"features": {},
"homepage": null,
"id": "serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"id": "registry+https://github.com/rust-lang/crates.io-index#serde@0.2.0",
"keywords": [],
"license": null,
"license_file": null,
@ -777,7 +777,7 @@ fn update_precise_first_run() {
"nodes": [
{
"dependencies": [
"serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)"
"registry+https://github.com/rust-lang/crates.io-index#serde@0.2.0"
],
"deps": [
{
@ -788,28 +788,28 @@ fn update_precise_first_run() {
}
],
"name": "serde",
"pkg": "serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)"
"pkg": "registry+https://github.com/rust-lang/crates.io-index#serde@0.2.0"
}
],
"features": [],
"id": "bar 0.0.1 (path+file://[..]/foo)"
"id": "path+file://[..]/foo#bar@0.0.1"
},
{
"dependencies": [],
"deps": [],
"features": [],
"id": "serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)"
"id": "registry+https://github.com/rust-lang/crates.io-index#serde@0.2.0"
}
],
"root": "bar 0.0.1 (path+file://[..]/foo)"
"root": "path+file://[..]/foo#bar@0.0.1"
},
"target_directory": "[..]/foo/target",
"version": 1,
"workspace_members": [
"bar 0.0.1 (path+file://[..]/foo)"
"path+file://[..]/foo#bar@0.0.1"
],
"workspace_default_members": [
"bar 0.0.1 (path+file://[..]/foo)"
"path+file://[..]/foo#bar@0.0.1"
],
"workspace_root": "[..]/foo",
"metadata": null