1
+ use std:: collections:: HashSet ;
1
2
use cargo:: core:: registry:: PackageRegistry ;
2
3
use cargo:: core:: QueryKind ;
3
4
use cargo:: core:: Registry ;
4
5
use cargo:: core:: SourceId ;
6
+ use cargo:: ops:: Packages ;
5
7
use cargo:: util:: command_prelude:: * ;
6
8
7
9
pub fn cli ( ) -> clap:: Command {
8
10
clap:: Command :: new ( "xtask-unpublished" )
11
+ . arg_package_spec_simple ( "Package to inspect the published status" )
9
12
. arg (
10
13
opt (
11
14
"verbose" ,
@@ -76,14 +79,24 @@ fn config_configure(config: &mut Config, args: &ArgMatches) -> CliResult {
76
79
77
80
fn unpublished ( args : & clap:: ArgMatches , config : & mut cargo:: util:: Config ) -> cargo:: CliResult {
78
81
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
+
79
92
let mut results = Vec :: new ( ) ;
80
93
{
81
94
let mut registry = PackageRegistry :: new ( config) ?;
82
95
let _lock = config. acquire_package_cache_lock ( ) ?;
83
96
registry. lock_patches ( ) ;
84
97
let source_id = SourceId :: crates_io ( config) ?;
85
98
86
- for member in ws . members ( ) {
99
+ for member in members_to_inspect {
87
100
let name = member. name ( ) ;
88
101
let current = member. version ( ) ;
89
102
if member. publish ( ) == & Some ( vec ! [ ] ) {
@@ -92,11 +105,8 @@ fn unpublished(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> car
92
105
}
93
106
94
107
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) ?;
100
110
let possibilities = loop {
101
111
// Exact to avoid returning all for path/git
102
112
match registry. query_vec ( & query, QueryKind :: Exact ) {
0 commit comments