Skip to content

Unstable --keep-going flag #10383

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

Merged
merged 1 commit into from
Mar 30, 2022
Merged
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
1 change: 1 addition & 0 deletions src/bin/cargo/commands/package.rs
Original file line number Diff line number Diff line change
@@ -53,6 +53,7 @@ pub fn exec(config: &mut Config, args: &ArgMatches) -> CliResult {
to_package: specs,
targets: args.targets(),
jobs: args.jobs()?,
keep_going: args.keep_going(),
cli_features: args.cli_features()?,
},
)?;
1 change: 1 addition & 0 deletions src/bin/cargo/commands/publish.rs
Original file line number Diff line number Diff line change
@@ -45,6 +45,7 @@ pub fn exec(config: &mut Config, args: &ArgMatches) -> CliResult {
to_publish: args.packages_from_flags()?,
targets: args.targets(),
jobs: args.jobs()?,
keep_going: args.keep_going(),
dry_run: args.is_present("dry-run"),
registry,
cli_features: args.cli_features()?,
4 changes: 4 additions & 0 deletions src/cargo/core/compiler/build_config.rs
Original file line number Diff line number Diff line change
@@ -15,6 +15,8 @@ pub struct BuildConfig {
pub requested_kinds: Vec<CompileKind>,
/// Number of rustc jobs to run in parallel.
pub jobs: u32,
/// Do not abort the build as soon as there is an error.
pub keep_going: bool,
/// Build profile
pub requested_profile: InternedString,
/// The mode we are compiling in.
@@ -56,6 +58,7 @@ impl BuildConfig {
pub fn new(
config: &Config,
jobs: Option<u32>,
keep_going: bool,
requested_targets: &[String],
mode: CompileMode,
) -> CargoResult<BuildConfig> {
@@ -84,6 +87,7 @@ impl BuildConfig {
Ok(BuildConfig {
requested_kinds,
jobs,
keep_going,
requested_profile: InternedString::new("dev"),
mode,
message_format: MessageFormat::Human,
5 changes: 3 additions & 2 deletions src/cargo/core/compiler/job_queue.rs
Original file line number Diff line number Diff line change
@@ -825,13 +825,14 @@ impl<'cfg> DrainState<'cfg> {
//
// After a job has finished we update our internal state if it was
// successful and otherwise wait for pending work to finish if it failed
// and then immediately return.
// and then immediately return (or keep going, if requested by the build
// config).
let mut errors = ErrorsDuringDrain { count: 0 };
// CAUTION! Do not use `?` or break out of the loop early. Every error
// must be handled in such a way that the loop is still allowed to
// drain event messages.
loop {
if errors.count == 0 {
if errors.count == 0 || cx.bcx.build_config.keep_going {
if let Err(e) = self.spawn_work_if_possible(cx, jobserver_helper, scope) {
self.handle_error(&mut cx.bcx.config.shell(), &mut errors, e);
}
4 changes: 3 additions & 1 deletion src/cargo/ops/cargo_compile.rs
Original file line number Diff line number Diff line change
@@ -85,8 +85,10 @@ pub struct CompileOptions {

impl CompileOptions {
pub fn new(config: &Config, mode: CompileMode) -> CargoResult<CompileOptions> {
let jobs = None;
let keep_going = false;
Ok(CompileOptions {
build_config: BuildConfig::new(config, None, &[], mode)?,
build_config: BuildConfig::new(config, jobs, keep_going, &[], mode)?,
cli_features: CliFeatures::new_all(false),
spec: ops::Packages::Packages(Vec::new()),
filter: CompileFilter::Default {
9 changes: 8 additions & 1 deletion src/cargo/ops/cargo_fetch.rs
Original file line number Diff line number Diff line change
@@ -20,8 +20,15 @@ pub fn fetch<'a>(
let (packages, resolve) = ops::resolve_ws(ws)?;

let jobs = Some(1);
let keep_going = false;
let config = ws.config();
let build_config = BuildConfig::new(config, jobs, &options.targets, CompileMode::Build)?;
let build_config = BuildConfig::new(
config,
jobs,
keep_going,
&options.targets,
CompileMode::Build,
)?;
let data = RustcTargetData::new(ws, &build_config.requested_kinds)?;
let mut fetched_packages = HashSet::new();
let mut deps_to_fetch = ws.members().map(|p| p.package_id()).collect::<Vec<_>>();
10 changes: 9 additions & 1 deletion src/cargo/ops/cargo_package.rs
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@ pub struct PackageOpts<'cfg> {
pub allow_dirty: bool,
pub verify: bool,
pub jobs: Option<u32>,
pub keep_going: bool,
pub to_package: ops::Packages,
pub targets: Vec<String>,
pub cli_features: CliFeatures,
@@ -177,6 +178,7 @@ pub fn package(ws: &Workspace<'_>, opts: &PackageOpts<'_>) -> CargoResult<Option
allow_dirty: opts.allow_dirty,
verify: opts.verify,
jobs: opts.jobs,
keep_going: opts.keep_going,
to_package: ops::Packages::Default,
targets: opts.targets.clone(),
cli_features: cli_features,
@@ -755,7 +757,13 @@ fn run_verify(
ops::compile_with_exec(
&ws,
&ops::CompileOptions {
build_config: BuildConfig::new(config, opts.jobs, &opts.targets, CompileMode::Build)?,
build_config: BuildConfig::new(
config,
opts.jobs,
opts.keep_going,
&opts.targets,
CompileMode::Build,
)?,
cli_features: opts.cli_features.clone(),
spec: ops::Packages::Packages(Vec::new()),
filter: ops::CompileFilter::Default {
2 changes: 2 additions & 0 deletions src/cargo/ops/registry.rs
Original file line number Diff line number Diff line change
@@ -80,6 +80,7 @@ pub struct PublishOpts<'cfg> {
pub verify: bool,
pub allow_dirty: bool,
pub jobs: Option<u32>,
pub keep_going: bool,
pub to_publish: ops::Packages,
pub targets: Vec<String>,
pub dry_run: bool,
@@ -147,6 +148,7 @@ pub fn publish(ws: &Workspace<'_>, opts: &PublishOpts<'_>) -> CargoResult<()> {
to_package: ops::Packages::Default,
targets: opts.targets.clone(),
jobs: opts.jobs,
keep_going: opts.keep_going,
cli_features: cli_features,
},
)?
21 changes: 20 additions & 1 deletion src/cargo/util/command_prelude.rs
Original file line number Diff line number Diff line change
@@ -71,6 +71,10 @@ pub trait AppExt: Sized {
.short('j')
.value_name("N"),
)
._arg(opt(
"keep-going",
"Do not abort the build as soon as there is an error (unstable)",
))
}

fn arg_targets_all(
@@ -353,6 +357,10 @@ pub trait ArgMatchesExt {
self.value_of_u32("jobs")
}

fn keep_going(&self) -> bool {
self._is_present("keep-going")
}

fn targets(&self) -> Vec<String> {
self._values_of("target")
}
@@ -506,7 +514,13 @@ pub trait ArgMatchesExt {
}
}

let mut build_config = BuildConfig::new(config, self.jobs()?, &self.targets(), mode)?;
let mut build_config = BuildConfig::new(
config,
self.jobs()?,
self.keep_going(),
&self.targets(),
mode,
)?;
build_config.message_format = message_format.unwrap_or(MessageFormat::Human);
build_config.requested_profile = self.get_profile_name(config, "dev", profile_checking)?;
build_config.build_plan = self.is_valid_and_present("build-plan");
@@ -540,6 +554,11 @@ pub trait ArgMatchesExt {
}
}

if build_config.keep_going {
config
.cli_unstable()
.fail_if_stable_opt("--keep-going", 10496)?;
}
if build_config.build_plan {
config
.cli_unstable()
1 change: 1 addition & 0 deletions src/doc/man/cargo-bench.md
Original file line number Diff line number Diff line change
@@ -139,6 +139,7 @@ Rust test harness runs benchmarks serially in a single thread.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

{{> section-environment }}
1 change: 1 addition & 0 deletions src/doc/man/cargo-build.md
Original file line number Diff line number Diff line change
@@ -91,6 +91,7 @@ See <https://github.com/rust-lang/cargo/issues/5579> for more information.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{> options-future-incompat }}
{{/options}}

1 change: 1 addition & 0 deletions src/doc/man/cargo-check.md
Original file line number Diff line number Diff line change
@@ -76,6 +76,7 @@ they have `required-features` that are missing.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{> options-future-incompat }}
{{/options}}

1 change: 1 addition & 0 deletions src/doc/man/cargo-doc.md
Original file line number Diff line number Diff line change
@@ -110,6 +110,7 @@ and supports common Unix glob patterns.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

{{> section-environment }}
1 change: 1 addition & 0 deletions src/doc/man/cargo-fix.md
Original file line number Diff line number Diff line change
@@ -156,6 +156,7 @@ When no target selection options are given, `cargo fix` will fix all targets

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

{{> section-environment }}
1 change: 1 addition & 0 deletions src/doc/man/cargo-install.md
Original file line number Diff line number Diff line change
@@ -181,6 +181,7 @@ See also the `--profile` option for choosing a specific profile by name.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

### Display Options
1 change: 1 addition & 0 deletions src/doc/man/cargo-package.md
Original file line number Diff line number Diff line change
@@ -112,6 +112,7 @@ Allow working directories with uncommitted VCS changes to be packaged.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

### Display Options
1 change: 1 addition & 0 deletions src/doc/man/cargo-publish.md
Original file line number Diff line number Diff line change
@@ -91,6 +91,7 @@ which defaults to `crates-io`.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

### Display Options
1 change: 1 addition & 0 deletions src/doc/man/cargo-run.md
Original file line number Diff line number Diff line change
@@ -90,6 +90,7 @@ Run the specified example.

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

{{> section-environment }}
1 change: 1 addition & 0 deletions src/doc/man/cargo-rustc.md
Original file line number Diff line number Diff line change
@@ -102,6 +102,7 @@ See the [the reference](../reference/profiles.html) for more details on profiles

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{> options-future-incompat }}
{{/options}}

1 change: 1 addition & 0 deletions src/doc/man/cargo-rustdoc.md
Original file line number Diff line number Diff line change
@@ -98,6 +98,7 @@ if its name is the same as the lib target. Binaries are skipped if they have

{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}

{{> section-environment }}
1 change: 1 addition & 0 deletions src/doc/man/cargo-test.md
Original file line number Diff line number Diff line change
@@ -155,6 +155,7 @@ includes an option to control the number of threads used:
{{#options}}

{{> options-jobs }}
{{> options-keep-going }}
{{> options-future-incompat }}

{{/options}}
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-bench.txt
Original file line number Diff line number Diff line change
@@ -361,6 +361,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

ENVIRONMENT
See the reference
<https://doc.rust-lang.org/cargo/reference/environment-variables.html>
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-build.txt
Original file line number Diff line number Diff line change
@@ -307,6 +307,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

--future-incompat-report
Displays a future-incompat report for any future-incompatible
warnings produced during execution of this command
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-check.txt
Original file line number Diff line number Diff line change
@@ -301,6 +301,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

--future-incompat-report
Displays a future-incompat report for any future-incompatible
warnings produced during execution of this command
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-doc.txt
Original file line number Diff line number Diff line change
@@ -272,6 +272,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

ENVIRONMENT
See the reference
<https://doc.rust-lang.org/cargo/reference/environment-variables.html>
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-fix.txt
Original file line number Diff line number Diff line change
@@ -374,6 +374,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

ENVIRONMENT
See the reference
<https://doc.rust-lang.org/cargo/reference/environment-variables.html>
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-install.txt
Original file line number Diff line number Diff line change
@@ -257,6 +257,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

Display Options
-v, --verbose
Use verbose output. May be specified twice for "very verbose" output
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-package.txt
Original file line number Diff line number Diff line change
@@ -189,6 +189,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

Display Options
-v, --verbose
Use verbose output. May be specified twice for "very verbose" output
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-publish.txt
Original file line number Diff line number Diff line change
@@ -156,6 +156,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

Display Options
-v, --verbose
Use verbose output. May be specified twice for "very verbose" output
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-run.txt
Original file line number Diff line number Diff line change
@@ -217,6 +217,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

ENVIRONMENT
See the reference
<https://doc.rust-lang.org/cargo/reference/environment-variables.html>
5 changes: 5 additions & 0 deletions src/doc/man/generated_txt/cargo-rustc.txt
Original file line number Diff line number Diff line change
@@ -296,6 +296,11 @@ OPTIONS
<https://doc.rust-lang.org/cargo/reference/config.html>. Defaults to
the number of CPUs.

--keep-going
Build as many crates in the dependency graph as possible, rather
than aborting the build on the first one that fails to build.
Unstable, requires -Zunstable-options.

--future-incompat-report
Displays a future-incompat report for any future-incompatible
warnings produced during execution of this command
Loading