Skip to content

Commit 5b13963

Browse files
committed
perf(xtask): Split xtask binaries
This will allow running an xtask without requiring building the world. In most cases, a user will already have been building cargo but not in CI. The packages keep an `xtask-` prefix to help raise awareness of them but exposed as `cargo <suffix>` to avoid having a direction proxy to wrap `cargo run -p xtask-<suffix>` as `cargo xtask <suffix>`.
1 parent c6f8ee9 commit 5b13963

File tree

6 files changed

+75
-88
lines changed

6 files changed

+75
-88
lines changed

.cargo/config.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[alias]
2-
xtask = "run --package xtask --"
2+
unpublished = "run --package xtask-unpublished --"

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/xtask/Cargo.toml renamed to crates/xtask-unpublished/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "xtask"
2+
name = "xtask-unpublished"
33
version = "0.0.0"
44
edition = "2021"
55
publish = false

crates/xtask/src/main.rs renamed to crates/xtask-unpublished/src/main.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
mod unpublished;
21
mod xtask;
32

43
fn main() {

crates/xtask/src/unpublished.rs renamed to crates/xtask-unpublished/src/xtask.rs

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,76 @@ use cargo::core::SourceId;
55
use cargo::util::command_prelude::*;
66

77
pub fn cli() -> clap::Command {
8-
clap::Command::new("unpublished")
8+
clap::Command::new("xtask-unpublished")
9+
.arg(
10+
opt(
11+
"verbose",
12+
"Use verbose output (-vv very verbose/build.rs output)",
13+
)
14+
.short('v')
15+
.action(ArgAction::Count)
16+
.global(true),
17+
)
18+
.arg_quiet()
19+
.arg(
20+
opt("color", "Coloring: auto, always, never")
21+
.value_name("WHEN")
22+
.global(true),
23+
)
24+
.arg(flag("frozen", "Require Cargo.lock and cache are up to date").global(true))
25+
.arg(flag("locked", "Require Cargo.lock is up to date").global(true))
26+
.arg(flag("offline", "Run without accessing the network").global(true))
27+
.arg(multi_opt("config", "KEY=VALUE", "Override a configuration value").global(true))
28+
.arg(
29+
Arg::new("unstable-features")
30+
.help("Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for details")
31+
.short('Z')
32+
.value_name("FLAG")
33+
.action(ArgAction::Append)
34+
.global(true),
35+
)
936
}
1037

1138
pub fn exec(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> cargo::CliResult {
39+
config_configure(config, args)?;
40+
41+
unpublished(args, config)?;
42+
43+
Ok(())
44+
}
45+
46+
fn config_configure(config: &mut Config, args: &ArgMatches) -> CliResult {
47+
let verbose = args.verbose();
48+
// quiet is unusual because it is redefined in some subcommands in order
49+
// to provide custom help text.
50+
let quiet = args.flag("quiet");
51+
let color = args.get_one::<String>("color").map(String::as_str);
52+
let frozen = args.flag("frozen");
53+
let locked = args.flag("locked");
54+
let offline = args.flag("offline");
55+
let mut unstable_flags = vec![];
56+
if let Some(values) = args.get_many::<String>("unstable-features") {
57+
unstable_flags.extend(values.cloned());
58+
}
59+
let mut config_args = vec![];
60+
if let Some(values) = args.get_many::<String>("config") {
61+
config_args.extend(values.cloned());
62+
}
63+
config.configure(
64+
verbose,
65+
quiet,
66+
color,
67+
frozen,
68+
locked,
69+
offline,
70+
&None,
71+
&unstable_flags,
72+
&config_args,
73+
)?;
74+
Ok(())
75+
}
76+
77+
fn unpublished(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> cargo::CliResult {
1278
let ws = args.workspace(config)?;
1379
let mut results = Vec::new();
1480
{
@@ -84,3 +150,8 @@ pub fn exec(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> cargo:
84150

85151
Ok(())
86152
}
153+
154+
#[test]
155+
fn verify_cli() {
156+
cli().debug_assert();
157+
}

crates/xtask/src/xtask.rs

Lines changed: 0 additions & 83 deletions
This file was deleted.

0 commit comments

Comments
 (0)