Skip to content

Commit 692bd3e

Browse files
committed
Improve alldeps code in example solver
1 parent 0416f0d commit 692bd3e

1 file changed

Lines changed: 12 additions & 21 deletions

File tree

examples/solv/solv.c

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)