@@ -169,39 +169,32 @@ find_repo(const char *name, Pool *pool, struct repoinfo *repoinfos, int nrepoinf
169169 return 0 ;
170170}
171171
172- static int
173- selection_alldeps (Pool * pool , Queue * selection , const char * name , int flags , int keyname , int marker )
172+ static void
173+ selection_alldeps (Pool * pool , Queue * selection , int keyname , int marker )
174174{
175- int i , j , r ;
176175 Queue pkgs , q ;
176+ int i , j ;
177177
178- queue_empty (selection );
179- queue_init (& q );
180- r = selection_make (pool , & q , name , flags );
181- if (!q .count )
182- {
183- queue_free (& q );
184- return 0 ;
185- }
186178 queue_init (& pkgs );
187- selection_solvables (pool , & q , & pkgs );
179+ queue_init (& q );
180+ selection_solvables (pool , selection , & pkgs );
181+ queue_empty (selection );
188182 for (i = 0 ; i < pkgs .count ; i ++ )
189183 {
190184 queue_empty (& q );
191185 pool_whatmatchessolvable (pool , keyname , pkgs .elements [i ], & q , marker );
192186 for (j = 0 ; j < q .count ; j ++ )
193- if (q .elements [j ] != pkgs .elements [i ])
194- queue_pushunique (selection , q .elements [j ]);
187+ queue_pushunique (selection , q .elements [j ]);
195188 }
196189 queue_free (& q );
190+ queue_free (& pkgs );
197191 j = selection -> count ;
198192 queue_insertn (selection , 0 , j , 0 );
199193 for (i = 0 ; i < j ; i ++ )
200194 {
201195 selection -> elements [2 * i ] = SOLVER_SOLVABLE | SOLVER_NOAUTOSET ;
202196 selection -> elements [2 * i + 1 ] = selection -> elements [i + j ];
203197 }
204- return j ? r : 0 ;
205198}
206199
207200#define MODE_LIST 0
@@ -580,10 +573,8 @@ main(int argc, char **argv)
580573 flags |= SELECTION_FILELIST | (mode == MODE_ERASE ? SELECTION_INSTALLED_ONLY : 0 );
581574 if (keyname && keyname_depstr )
582575 flags |= SELECTION_MATCH_DEPSTR ;
583- if (!keyname )
576+ if (!keyname || keyname_alldeps )
584577 rflags = selection_make (pool , & job2 , argv [i ], flags );
585- else if (keyname_alldeps )
586- rflags = selection_alldeps (pool , & job2 , argv [i ], flags , pool_str2id (pool , keyname , 1 ), 0 );
587578 else
588579 rflags = selection_make_matchdeps (pool , & job2 , argv [i ], flags , pool_str2id (pool , keyname , 1 ), 0 );
589580 if (repofilter .count )
@@ -595,10 +586,8 @@ main(int argc, char **argv)
595586 if (!job2 .count )
596587 {
597588 flags |= SELECTION_NOCASE ;
598- if (!keyname )
589+ if (!keyname || keyname_alldeps )
599590 rflags = selection_make (pool , & job2 , argv [i ], flags );
600- else if (keyname_alldeps )
601- rflags = selection_alldeps (pool , & job2 , argv [i ], flags , pool_str2id (pool , keyname , 1 ), 0 );
602591 else
603592 rflags = selection_make_matchdeps (pool , & job2 , argv [i ], flags , pool_str2id (pool , keyname , 1 ), 0 );
604593 if (repofilter .count )
@@ -619,6 +608,8 @@ main(int argc, char **argv)
619608 printf ("[using file list match for '%s']\n" , argv [i ]);
620609 if (rflags & SELECTION_PROVIDES )
621610 printf ("[using capability match for '%s']\n" , argv [i ]);
611+ if (keyname && keyname_alldeps )
612+ selection_alldeps (pool , & job2 , pool_str2id (pool , keyname , 1 ), 0 );
622613 queue_insertn (& job , job .count , job2 .count , job2 .elements );
623614 queue_free (& job2 );
624615 }
0 commit comments