mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
fix:Using --release/debug and --profile together becomes an error
This commit is contained in:
parent
2f17770a15
commit
09a8ece8ee
@ -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"),
|
||||
|
@ -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(),
|
||||
|
@ -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)?;
|
||||
|
@ -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.
|
||||
|
@ -558,12 +558,19 @@ Run `{cmd}` to see possible targets."
|
||||
|
||||
fn get_profile_name(
|
||||
&self,
|
||||
gctx: &GlobalContext,
|
||||
default: &str,
|
||||
profile_checking: ProfileChecking,
|
||||
) -> CargoResult<InternedString> {
|
||||
let specified_profile = self._value_of("profile");
|
||||
|
||||
let err_message = |flag: &str| {
|
||||
format!(
|
||||
"\
|
||||
the `--{flag}` flag can not be specified with the `--profile` flag
|
||||
Please remove one of the flags."
|
||||
)
|
||||
};
|
||||
|
||||
// Check for allowed legacy names.
|
||||
// This is an early exit, since it allows combination with `--release`.
|
||||
match (specified_profile, profile_checking) {
|
||||
@ -572,39 +579,23 @@ 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!(err_message("release"));
|
||||
}
|
||||
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 name = match (
|
||||
self.maybe_flag("release"),
|
||||
self.maybe_flag("debug"),
|
||||
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
|
||||
@ -710,7 +701,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");
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -383,10 +383,8 @@ 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();
|
||||
|
||||
@ -394,21 +392,17 @@ Remove one flag or the other to continue.
|
||||
.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();
|
||||
@ -417,52 +411,45 @@ 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();
|
||||
|
||||
@ -470,10 +457,8 @@ This was historically accepted, but will become an error in a future release.
|
||||
.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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user