mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 03:55:07 +08:00
Add binary to list features
This commit is contained in:
parent
84f49d76cd
commit
4b4e8ea2a4
@ -16,6 +16,7 @@ members = [
|
|||||||
"json-depth-checker",
|
"json-depth-checker",
|
||||||
"benchmarks",
|
"benchmarks",
|
||||||
"fuzzers",
|
"fuzzers",
|
||||||
|
"xtask",
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
|
15
xtask/Cargo.toml
Normal file
15
xtask/Cargo.toml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[package]
|
||||||
|
name = "xtask"
|
||||||
|
version.workspace = true
|
||||||
|
authors.workspace = true
|
||||||
|
description.workspace = true
|
||||||
|
homepage.workspace = true
|
||||||
|
readme.workspace = true
|
||||||
|
edition.workspace = true
|
||||||
|
license.workspace = true
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
cargo_metadata = "0.18.1"
|
||||||
|
clap = { version = "4.4.14", features = ["derive"] }
|
41
xtask/src/main.rs
Normal file
41
xtask/src/main.rs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
/// List features available in the workspace
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
struct ListFeaturesDeriveArgs {
|
||||||
|
/// Feature to exclude from the list. Repeat the argument to exclude multiple features
|
||||||
|
#[arg(short, long)]
|
||||||
|
exclude_feature: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Utilitary commands
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
#[command(author, version, about, long_about)]
|
||||||
|
#[command(name = "cargo xtask")]
|
||||||
|
#[command(bin_name = "cargo xtask")]
|
||||||
|
enum Command {
|
||||||
|
ListFeatures(ListFeaturesDeriveArgs),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args = Command::parse();
|
||||||
|
match args {
|
||||||
|
Command::ListFeatures(args) => list_features(args),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn list_features(args: ListFeaturesDeriveArgs) {
|
||||||
|
let exclude_features: HashSet<_> = args.exclude_feature.into_iter().collect();
|
||||||
|
let metadata = cargo_metadata::MetadataCommand::new().no_deps().exec().unwrap();
|
||||||
|
let features: Vec<String> = metadata
|
||||||
|
.packages
|
||||||
|
.iter()
|
||||||
|
.flat_map(|package| package.features.keys())
|
||||||
|
.filter(|feature| !exclude_features.contains(feature.as_str()))
|
||||||
|
.map(|s| s.to_owned())
|
||||||
|
.collect();
|
||||||
|
let features = features.join(" ");
|
||||||
|
println!("{features}")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user