Skip to content

Commit 8d753a7

Browse files
committed
xtask-unpublished: respect --package flag
1 parent b0f118f commit 8d753a7

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

crates/xtask-unpublished/src/xtask.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
use std::collections::HashSet;
12
use cargo::core::registry::PackageRegistry;
23
use cargo::core::QueryKind;
34
use cargo::core::Registry;
45
use cargo::core::SourceId;
6+
use cargo::ops::Packages;
57
use cargo::util::command_prelude::*;
68

79
pub fn cli() -> clap::Command {
810
clap::Command::new("xtask-unpublished")
11+
.arg_package_spec_simple("Package to inspect the published status")
912
.arg(
1013
opt(
1114
"verbose",
@@ -76,14 +79,24 @@ fn config_configure(config: &mut Config, args: &ArgMatches) -> CliResult {
7679

7780
fn unpublished(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> cargo::CliResult {
7881
let ws = args.workspace(config)?;
82+
83+
let members_to_inspect: HashSet<_> = {
84+
let pkgs = args.packages_from_flags()?;
85+
if let Packages::Packages(_) = pkgs {
86+
HashSet::from_iter(pkgs.get_packages(&ws)?)
87+
} else {
88+
HashSet::from_iter(ws.members())
89+
}
90+
};
91+
7992
let mut results = Vec::new();
8093
{
8194
let mut registry = PackageRegistry::new(config)?;
8295
let _lock = config.acquire_package_cache_lock()?;
8396
registry.lock_patches();
8497
let source_id = SourceId::crates_io(config)?;
8598

86-
for member in ws.members() {
99+
for member in members_to_inspect {
87100
let name = member.name();
88101
let current = member.version();
89102
if member.publish() == &Some(vec![]) {
@@ -92,11 +105,8 @@ fn unpublished(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> car
92105
}
93106

94107
let version_req = format!("<={current}");
95-
let query = cargo::core::dependency::Dependency::parse(
96-
name,
97-
Some(&version_req),
98-
source_id.clone(),
99-
)?;
108+
let query =
109+
cargo::core::dependency::Dependency::parse(name, Some(&version_req), source_id)?;
100110
let possibilities = loop {
101111
// Exact to avoid returning all for path/git
102112
match registry.query_vec(&query, QueryKind::Exact) {

0 commit comments

Comments
 (0)