1+ use std:: collections:: HashSet ;
12use cargo:: core:: registry:: PackageRegistry ;
23use cargo:: core:: QueryKind ;
34use cargo:: core:: Registry ;
45use cargo:: core:: SourceId ;
6+ use cargo:: ops:: Packages ;
57use cargo:: util:: command_prelude:: * ;
68
79pub 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
7780fn 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