Skip to content

Commit

Permalink
fix:Using --release/debug and --profile together becomes an error
Browse files Browse the repository at this point in the history
  • Loading branch information
heisen-li committed May 28, 2024
1 parent 2f17770 commit 480dcdf
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 62 deletions.
2 changes: 1 addition & 1 deletion src/bin/cargo/commands/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
args.compile_options(gctx, CompileMode::Bench, Some(&ws), ProfileChecking::Custom)?;

compile_opts.build_config.requested_profile =
args.get_profile_name(gctx, "bench", ProfileChecking::Custom)?;
args.get_profile_name("bench", ProfileChecking::Custom)?;

let ops = TestOptions {
no_run: args.flag("no-run"),
Expand Down
2 changes: 1 addition & 1 deletion src/bin/cargo/commands/clean.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
gctx,
spec: values(args, "package"),
targets: args.targets()?,
requested_profile: args.get_profile_name(gctx, "dev", ProfileChecking::Custom)?,
requested_profile: args.get_profile_name("dev", ProfileChecking::Custom)?,
profile_specified: args.contains_id("profile") || args.flag("release"),
doc: args.flag("doc"),
dry_run: args.dry_run(),
Expand Down
2 changes: 1 addition & 1 deletion src/bin/cargo/commands/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
)?;

compile_opts.build_config.requested_profile =
args.get_profile_name(gctx, "release", ProfileChecking::Custom)?;
args.get_profile_name("release", ProfileChecking::Custom)?;

if args.flag("list") {
ops::install_list(root, gctx)?;
Expand Down
2 changes: 1 addition & 1 deletion src/bin/cargo/commands/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
args.compile_options(gctx, CompileMode::Test, Some(&ws), ProfileChecking::Custom)?;

compile_opts.build_config.requested_profile =
args.get_profile_name(gctx, "test", ProfileChecking::Custom)?;
args.get_profile_name("test", ProfileChecking::Custom)?;

// `TESTNAME` is actually an argument of the test binary, but it's
// important, so we explicitly mention it and reconfigure.
Expand Down
33 changes: 13 additions & 20 deletions src/cargo/util/command_prelude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,6 @@ Run `{cmd}` to see possible targets."

fn get_profile_name(
&self,
gctx: &GlobalContext,
default: &str,
profile_checking: ProfileChecking,
) -> CargoResult<InternedString> {
Expand All @@ -572,26 +571,20 @@ Run `{cmd}` to see possible targets."
// `cargo fix` and `cargo check` has legacy handling of this profile name
| (Some(name @ "test"), ProfileChecking::LegacyTestOnly) => {
if self.maybe_flag("release") {
gctx.shell().warn(
"the `--release` flag should not be specified with the `--profile` flag\n\
The `--release` flag will be ignored.\n\
This was historically accepted, but will become an error \
in a future release."
)?;
bail!("\
the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.");
}
return Ok(InternedString::new(name));
}
_ => {}
}

let conflict = |flag: &str, equiv: &str, specified: &str| -> anyhow::Error {
anyhow::format_err!(
"conflicting usage of --profile={} and --{flag}\n\
The `--{flag}` flag is the same as `--profile={equiv}`.\n\
Remove one flag or the other to continue.",
specified,
flag = flag,
equiv = equiv
let err_message = |flag: &str| {
format!(
"\
the `--{flag}` flag can not be specified with the `--profile` flag
Please remove one of the flags."
)
};

Expand All @@ -601,10 +594,10 @@ Run `{cmd}` to see possible targets."
specified_profile,
) {
(false, false, None) => default,
(true, _, None | Some("release")) => "release",
(true, _, Some(name)) => return Err(conflict("release", "release", name)),
(_, true, None | Some("dev")) => "dev",
(_, true, Some(name)) => return Err(conflict("debug", "dev", name)),
(true, _, None) => "release",
(true, _, Some(_)) => bail!(err_message("release")),
(_, true, None) => "dev",
(_, true, Some(_)) => bail!(err_message("debug")),
// `doc` is separate from all the other reservations because
// [profile.doc] was historically allowed, but is deprecated and
// has no effect. To avoid potentially breaking projects, it is a
Expand Down Expand Up @@ -710,7 +703,7 @@ Run `{cmd}` to see possible targets."
mode,
)?;
build_config.message_format = message_format.unwrap_or(MessageFormat::Human);
build_config.requested_profile = self.get_profile_name(gctx, "dev", profile_checking)?;
build_config.requested_profile = self.get_profile_name("dev", profile_checking)?;
build_config.build_plan = self.flag("build-plan");
build_config.unit_graph = self.flag("unit-graph");
build_config.future_incompat_report = self.flag("future-incompat-report");
Expand Down
13 changes: 13 additions & 0 deletions tests/testsuite/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,21 @@ fn rustc_check() {

// Verify compatible usage of --profile with --release, issue #7488
foo.cargo("rustc --profile check --release -- --emit=metadata")
.with_status(101)
.with_stderr(
"\
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

foo.cargo("rustc --profile test --release -- --emit=metadata")
.with_status(101)
.with_stderr(
"\
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();
}

Expand Down
61 changes: 23 additions & 38 deletions tests/testsuite/profile_custom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,32 +383,26 @@ fn conflicting_usage() {
.with_status(101)
.with_stderr(
"\
error: conflicting usage of --profile=dev and --release
The `--release` flag is the same as `--profile=release`.
Remove one flag or the other to continue.
",
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

p.cargo("install --profile=release --debug")
.with_status(101)
.with_stderr(
"\
error: conflicting usage of --profile=release and --debug
The `--debug` flag is the same as `--profile=dev`.
Remove one flag or the other to continue.
",
error: the `--debug` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

p.cargo("rustc --profile=dev --release")
.with_status(101)
.with_stderr(
"\
warning: the `--release` flag should not be specified with the `--profile` flag
The `--release` flag will be ignored.
This was historically accepted, but will become an error in a future release.
[COMPILING] foo [..]
[FINISHED] `dev` profile [..]
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.
",
)
.run();
Expand All @@ -417,63 +411,54 @@ This was historically accepted, but will become an error in a future release.
.with_status(101)
.with_stderr(
"\
error: conflicting usage of --profile=dev and --release
The `--release` flag is the same as `--profile=release`.
Remove one flag or the other to continue.
",
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

p.cargo("check --profile=test --release")
.with_status(101)
.with_stderr(
"\
warning: the `--release` flag should not be specified with the `--profile` flag
The `--release` flag will be ignored.
This was historically accepted, but will become an error in a future release.
[CHECKING] foo [..]
[FINISHED] `test` profile [..]
",
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

// This is OK since the two are the same.
p.cargo("rustc --profile=release --release")
.with_status(101)
.with_stderr(
"\
[COMPILING] foo [..]
[FINISHED] `release` profile [..]
",
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

p.cargo("build --profile=release --release")
.with_status(101)
.with_stderr(
"\
[FINISHED] `release` profile [..]
",
error: the `--release` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

p.cargo("install --path . --profile=dev --debug")
.with_status(101)
.with_stderr(
"\
[INSTALLING] foo [..]
[FINISHED] `dev` profile [..]
[INSTALLING] [..]
[INSTALLED] [..]
[WARNING] be sure to add [..]
",
error: the `--debug` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();

p.cargo("install --path . --profile=release --debug")
.with_status(101)
.with_stderr(
"\
error: conflicting usage of --profile=release and --debug
The `--debug` flag is the same as `--profile=dev`.
Remove one flag or the other to continue.
",
error: the `--debug` flag can not be specified with the `--profile` flag
Please remove one of the flags.",
)
.run();
}
Expand Down

0 comments on commit 480dcdf

Please sign in to comment.