Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(json-msg): use pkgid spec in in JSON messages #13311

Merged
merged 3 commits into from
Jan 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/cargo/core/compiler/custom_build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ fn emit_build_output(
.collect::<Vec<_>>();

let msg = machine_message::BuildScript {
package_id,
package_id: package_id.to_spec(),
linked_libs: &output.library_links,
linked_paths: &library_paths,
cfgs: &output.cfgs,
Expand Down
4 changes: 2 additions & 2 deletions src/cargo/core/compiler/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ fn link_targets(cx: &mut Context<'_, '_>, unit: &Unit, fresh: bool) -> CargoResu
};

let msg = machine_message::Artifact {
package_id,
package_id: package_id.to_spec(),
manifest_path,
target: &target,
profile: art_profile,
Expand Down Expand Up @@ -1766,7 +1766,7 @@ fn on_stderr_line_inner(
}

let msg = machine_message::FromCompiler {
package_id,
package_id: package_id.to_spec(),
manifest_path,
target,
message: compiler_message,
Expand Down
2 changes: 1 addition & 1 deletion src/cargo/core/compiler/timings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ impl<'cfg> Timings<'cfg> {
.extend(unlocked.iter().cloned().cloned());
if self.report_json {
let msg = machine_message::TimingInfo {
package_id: unit_time.unit.pkg.package_id(),
package_id: unit_time.unit.pkg.package_id().to_spec(),
target: &unit_time.unit.target,
mode: unit_time.unit.mode,
duration: unit_time.duration,
Expand Down
12 changes: 7 additions & 5 deletions src/cargo/util/machine_message.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
use std::path::{Path, PathBuf};

use cargo_util_schemas::core::PackageIdSpec;
use serde::ser;
use serde::Serialize;
use serde_json::{self, json, value::RawValue};

use crate::core::{compiler::CompileMode, PackageId, Target};
use crate::core::compiler::CompileMode;
use crate::core::Target;

pub trait Message: ser::Serialize {
fn reason(&self) -> &str;
Expand All @@ -19,7 +21,7 @@ pub trait Message: ser::Serialize {

#[derive(Serialize)]
pub struct FromCompiler<'a> {
pub package_id: PackageId,
pub package_id: PackageIdSpec,
pub manifest_path: &'a Path,
pub target: &'a Target,
pub message: Box<RawValue>,
Expand All @@ -33,7 +35,7 @@ impl<'a> Message for FromCompiler<'a> {

#[derive(Serialize)]
pub struct Artifact<'a> {
pub package_id: PackageId,
pub package_id: PackageIdSpec,
pub manifest_path: PathBuf,
pub target: &'a Target,
pub profile: ArtifactProfile,
Expand Down Expand Up @@ -71,7 +73,7 @@ pub enum ArtifactDebuginfo {

#[derive(Serialize)]
pub struct BuildScript<'a> {
pub package_id: PackageId,
pub package_id: PackageIdSpec,
pub linked_libs: &'a [String],
pub linked_paths: &'a [String],
pub cfgs: &'a [String],
Expand All @@ -87,7 +89,7 @@ impl<'a> Message for BuildScript<'a> {

#[derive(Serialize)]
pub struct TimingInfo<'a> {
pub package_id: PackageId,
pub package_id: PackageIdSpec,
pub target: &'a Target,
pub mode: CompileMode,
pub duration: f64,
Expand Down
6 changes: 3 additions & 3 deletions src/doc/man/cargo-metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,6 @@ 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
Expand Down Expand Up @@ -393,6 +391,8 @@ reproduction of the information within `Cargo.toml`.
cargo metadata --format-version=1

## SEE ALSO
{{man "cargo" 1}}, {{man "cargo-pkgid" 1}}, [Package ID Specifications]

{{man "cargo" 1}}, {{man "cargo-pkgid" 1}}, [Package ID Specifications], [JSON messages]

[Package ID Specifications]: ../reference/pkgid-spec.html
[JSON messages]: ../reference/external-tools.html#json-messages
11 changes: 8 additions & 3 deletions src/doc/man/cargo-pkgid.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ fetched.

A package specifier consists of a name, version, and source URL. You are
allowed to use partial specifiers to succinctly match a specific package as
long as it matches only one package. The format of a _spec_ can be one of the
following:
long as it matches only one package. This specifier is also used by other parts
in Cargo, such as {{man "cargo-metadata" 1}} and [JSON messages] emitted by Cargo.

The format of a _spec_ can be one of the following:

SPEC Structure | Example SPEC
---------------------------|--------------
Expand Down Expand Up @@ -88,6 +90,9 @@ Get the package ID for the given package instead of the current package.
cargo pkgid file:///path/to/local/package#foo

## SEE ALSO
{{man "cargo" 1}}, {{man "cargo-generate-lockfile" 1}}, {{man "cargo-metadata" 1}}, [Package ID Specifications]

{{man "cargo" 1}}, {{man "cargo-generate-lockfile" 1}}, {{man "cargo-metadata" 1}},
[Package ID Specifications], [JSON messages]

[Package ID Specifications]: ../reference/pkgid-spec.html
[JSON messages]: ../reference/external-tools.html#json-messages
4 changes: 3 additions & 1 deletion src/doc/man/generated_txt/cargo-metadata.txt
Original file line number Diff line number Diff line change
Expand Up @@ -483,5 +483,7 @@ EXAMPLES

SEE ALSO
cargo(1), cargo-pkgid(1), Package ID Specifications
<https://doc.rust-lang.org/cargo/reference/pkgid-spec.html>
<https://doc.rust-lang.org/cargo/reference/pkgid-spec.html>, JSON
messages
<https://doc.rust-lang.org/cargo/reference/external-tools.html#json-messages>

12 changes: 9 additions & 3 deletions src/doc/man/generated_txt/cargo-pkgid.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@ DESCRIPTION

A package specifier consists of a name, version, and source URL. You are
allowed to use partial specifiers to succinctly match a specific package
as long as it matches only one package. The format of a spec can be one
of the following:
as long as it matches only one package. This specifier is also used by
other parts in Cargo, such as cargo-metadata(1) and JSON messages
<https://doc.rust-lang.org/cargo/reference/external-tools.html#json-messages>
emitted by Cargo.

The format of a spec can be one of the following:

+-----------------+--------------------------------------------------+
| SPEC Structure | Example SPEC |
Expand Down Expand Up @@ -172,5 +176,7 @@ EXAMPLES
SEE ALSO
cargo(1), cargo-generate-lockfile(1), cargo-metadata(1), Package ID
Specifications
<https://doc.rust-lang.org/cargo/reference/pkgid-spec.html>
<https://doc.rust-lang.org/cargo/reference/pkgid-spec.html>, JSON
messages
<https://doc.rust-lang.org/cargo/reference/external-tools.html#json-messages>

6 changes: 3 additions & 3 deletions src/doc/src/commands/cargo-metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,6 @@ 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
Expand Down Expand Up @@ -512,6 +510,8 @@ details on environment variables that Cargo reads.
cargo metadata --format-version=1

## SEE ALSO
[cargo(1)](cargo.html), [cargo-pkgid(1)](cargo-pkgid.html), [Package ID Specifications]

[cargo(1)](cargo.html), [cargo-pkgid(1)](cargo-pkgid.html), [Package ID Specifications], [JSON messages]

[Package ID Specifications]: ../reference/pkgid-spec.html
[JSON messages]: ../reference/external-tools.html#json-messages
11 changes: 8 additions & 3 deletions src/doc/src/commands/cargo-pkgid.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ fetched.

A package specifier consists of a name, version, and source URL. You are
allowed to use partial specifiers to succinctly match a specific package as
long as it matches only one package. The format of a _spec_ can be one of the
following:
long as it matches only one package. This specifier is also used by other parts
in Cargo, such as [cargo-metadata(1)](cargo-metadata.html) and [JSON messages] emitted by Cargo.

The format of a _spec_ can be one of the following:

SPEC Structure | Example SPEC
---------------------------|--------------
Expand Down Expand Up @@ -183,6 +185,9 @@ details on environment variables that Cargo reads.
cargo pkgid file:///path/to/local/package#foo

## SEE ALSO
[cargo(1)](cargo.html), [cargo-generate-lockfile(1)](cargo-generate-lockfile.html), [cargo-metadata(1)](cargo-metadata.html), [Package ID Specifications]

[cargo(1)](cargo.html), [cargo-generate-lockfile(1)](cargo-generate-lockfile.html), [cargo-metadata(1)](cargo-metadata.html),
[Package ID Specifications], [JSON messages]

[Package ID Specifications]: ../reference/pkgid-spec.html
[JSON messages]: ../reference/external-tools.html#json-messages
10 changes: 7 additions & 3 deletions src/doc/src/reference/external-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ information during the build:

The output goes to stdout in the JSON object per line format. The `reason` field
distinguishes different kinds of messages.
The `package_id` field is a unique identifier for referring to the package, and
as the `--package` argument to many commands. The syntax grammar can be found in
chapter [Package ID Specifications].

The `--message-format` option can also take additional formatting values which
alter the way the JSON messages are computed and rendered. See the description
Expand All @@ -53,6 +56,7 @@ messages.

[build command documentation]: ../commands/cargo-build.md
[cargo_metadata]: https://crates.io/crates/cargo_metadata
[Package ID Specifications]: ./pkgid-spec.md

### Compiler messages

Expand All @@ -66,7 +70,7 @@ structure:
/* The "reason" indicates the kind of message. */
"reason": "compiler-message",
/* The Package ID, a unique identifier for referring to the package. */
"package_id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"package_id": "file:///path/to/my-package#0.1.0",
/* Absolute path to the package manifest. */
"manifest_path": "/path/to/my-package/Cargo.toml",
/* The Cargo target (lib, bin, example, etc.) that generated the message. */
Expand Down Expand Up @@ -135,7 +139,7 @@ following structure:
/* The "reason" indicates the kind of message. */
"reason": "compiler-artifact",
/* The Package ID, a unique identifier for referring to the package. */
"package_id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"package_id": "file:///path/to/my-package#0.1.0",
/* Absolute path to the package manifest. */
"manifest_path": "/path/to/my-package/Cargo.toml",
/* The Cargo target (lib, bin, example, etc.) that generated the artifacts.
Expand Down Expand Up @@ -204,7 +208,7 @@ may be found in [the chapter on build scripts](build-scripts.md).
/* The "reason" indicates the kind of message. */
"reason": "build-script-executed",
/* The Package ID, a unique identifier for referring to the package. */
"package_id": "my-package 0.1.0 (path+file:///path/to/my-package)",
"package_id": "file:///path/to/my-package#0.1.0",
/* Array of libraries to link, as indicated by the `cargo::rustc-link-lib`
instruction. Note that this may include a "KIND=" prefix in the string
where KIND is the library kind.
Expand Down
6 changes: 3 additions & 3 deletions src/etc/man/cargo-metadata.1
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ 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": "file:///path/to/my\-package#0.1.0",
/* The license value from the manifest, or null. */
Expand Down Expand Up @@ -529,4 +529,4 @@ cargo metadata \-\-format\-version=1
.RE
.RE
.SH "SEE ALSO"
\fBcargo\fR(1), \fBcargo\-pkgid\fR(1), \fIPackage ID Specifications\fR <https://doc.rust\-lang.org/cargo/reference/pkgid\-spec.html>
\fBcargo\fR(1), \fBcargo\-pkgid\fR(1), \fIPackage ID Specifications\fR <https://doc.rust\-lang.org/cargo/reference/pkgid\-spec.html>, \fIJSON messages\fR <https://doc.rust\-lang.org/cargo/reference/external\-tools.html#json\-messages>
9 changes: 6 additions & 3 deletions src/etc/man/cargo-pkgid.1
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ fetched.
.sp
A package specifier consists of a name, version, and source URL. You are
allowed to use partial specifiers to succinctly match a specific package as
long as it matches only one package. The format of a \fIspec\fR can be one of the
following:
long as it matches only one package. This specifier is also used by other parts
in Cargo, such as \fBcargo\-metadata\fR(1) and \fIJSON messages\fR <https://doc.rust\-lang.org/cargo/reference/external\-tools.html#json\-messages> emitted by Cargo.
.sp
The format of a \fIspec\fR can be one of the following:

.TS
allbox tab(:);
Expand Down Expand Up @@ -242,4 +244,5 @@ cargo pkgid file:///path/to/local/package#foo
.RE
.RE
.SH "SEE ALSO"
\fBcargo\fR(1), \fBcargo\-generate\-lockfile\fR(1), \fBcargo\-metadata\fR(1), \fIPackage ID Specifications\fR <https://doc.rust\-lang.org/cargo/reference/pkgid\-spec.html>
\fBcargo\fR(1), \fBcargo\-generate\-lockfile\fR(1), \fBcargo\-metadata\fR(1),
\fIPackage ID Specifications\fR <https://doc.rust\-lang.org/cargo/reference/pkgid\-spec.html>, \fIJSON messages\fR <https://doc.rust\-lang.org/cargo/reference/external\-tools.html#json\-messages>
2 changes: 1 addition & 1 deletion tests/testsuite/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1649,7 +1649,7 @@ fn json_artifact_includes_executable_for_benchmark() {
"features": [],
"filenames": "{...}",
"fresh": false,
"package_id": "foo 0.0.1 ([..])",
"package_id": "path+file:///[..]/foo#0.0.1",
"manifest_path": "[..]",
"profile": "{...}",
"reason": "compiler-artifact",
Expand Down
2 changes: 1 addition & 1 deletion tests/testsuite/binary_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ fn check_msg_format_json() {
let output = r#"
{
"reason": "compiler-artifact",
"package_id": "foo 0.0.1 [..]",
"package_id": "path+file:///[..]/foo#0.0.1",
"manifest_path": "[CWD]/Cargo.toml",
"target": "{...}",
"profile": "{...}",
Expand Down
16 changes: 8 additions & 8 deletions tests/testsuite/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4160,7 +4160,7 @@ fn compiler_json_error_format() {
r#"
{
"reason":"compiler-artifact",
"package_id":"foo 0.5.0 ([..])",
"package_id":"path+file:///[..]/foo#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["custom-build"],
Expand All @@ -4187,7 +4187,7 @@ fn compiler_json_error_format() {

{
"reason":"compiler-message",
"package_id":"bar 0.5.0 ([..])",
"package_id":"path+file:///[..]/bar#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["lib"],
Expand All @@ -4213,7 +4213,7 @@ fn compiler_json_error_format() {
},
"executable": null,
"features": [],
"package_id":"bar 0.5.0 ([..])",
"package_id":"path+file:///[..]/bar#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["lib"],
Expand All @@ -4234,7 +4234,7 @@ fn compiler_json_error_format() {

{
"reason":"build-script-executed",
"package_id":"foo 0.5.0 ([..])",
"package_id":"path+file:///[..]/foo#0.5.0",
"linked_libs":[],
"linked_paths":[],
"env":[],
Expand All @@ -4244,7 +4244,7 @@ fn compiler_json_error_format() {

{
"reason":"compiler-message",
"package_id":"foo 0.5.0 ([..])",
"package_id":"path+file:///[..]/foo#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["bin"],
Expand All @@ -4261,7 +4261,7 @@ fn compiler_json_error_format() {

{
"reason":"compiler-artifact",
"package_id":"foo 0.5.0 ([..])",
"package_id":"path+file:///[..]/foo#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["bin"],
Expand Down Expand Up @@ -4332,7 +4332,7 @@ fn message_format_json_forward_stderr() {
r#"
{
"reason":"compiler-message",
"package_id":"foo 0.5.0 ([..])",
"package_id":"path+file:///[..]/foo#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["bin"],
Expand All @@ -4349,7 +4349,7 @@ fn message_format_json_forward_stderr() {

{
"reason":"compiler-artifact",
"package_id":"foo 0.5.0 ([..])",
"package_id":"path+file:///[..]/foo#0.5.0",
"manifest_path": "[..]",
"target":{
"kind":["bin"],
Expand Down
Loading
Loading