Skip to content

Commit d13a35f

Browse files
committed
Cleandeps: do find_update_seeds() call before changing the userinstalled map
See issue #387
1 parent d98457c commit d13a35f

1 file changed

Lines changed: 27 additions & 20 deletions

File tree

src/cleandeps.c

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@ solver_createcleandepsmap(Solver *solv, Map *cleandepsmap, int unneeded)
669669
queue_init(&iq);
670670
queue_init(&xsuppq);
671671

672+
/* setup userinstalled map and search for special namespace cleandeps erases */
672673
for (i = 0; i < job->count; i += 2)
673674
{
674675
how = job->elements[i];
@@ -874,46 +875,52 @@ solver_createcleandepsmap(Solver *solv, Map *cleandepsmap, int unneeded)
874875
}
875876
queue_init_clone(&iqcopy, &iq);
876877

877-
if (!unneeded)
878-
{
879-
if (solv->cleandeps_updatepkgs)
880-
for (i = 0; i < solv->cleandeps_updatepkgs->count; i++)
881-
queue_push(&iq, solv->cleandeps_updatepkgs->elements[i]);
882-
}
883-
884878
if (unneeded)
885879
queue_empty(&iq); /* just in case... */
886880

887-
/* clear userinstalled bit for the packages we really want to delete/update */
881+
/* clear userinstalled bits for the packages we really want to delete */
888882
for (i = 0; i < iq.count; i++)
889883
{
890884
p = iq.elements[i];
891-
if (pool->solvables[p].repo != installed)
892-
continue;
893-
MAPCLR(&userinstalled, p - installed->start);
885+
if (pool->solvables[p].repo == installed)
886+
MAPCLR(&userinstalled, p - installed->start);
887+
}
888+
/* set userinstalled bits for all packages not in the considered map */
889+
if (pool->considered)
890+
{
891+
for (p = installed->start; p < installed->end; p++)
892+
if (!MAPTST(pool->considered, p))
893+
MAPSET(&userinstalled, p - installed->start); /* we may not remove those */
894+
}
895+
if (!unneeded && solv->cleandeps_updatepkgs)
896+
{
897+
/* find update seeds */
898+
queue_init(&updatepkgs_filtered);
899+
find_update_seeds(solv, &updatepkgs_filtered, &userinstalled);
900+
/* clear userinstalled bit for the packages we want to update */
901+
/* also add them to the erase list */
902+
for (i = 0; i < solv->cleandeps_updatepkgs->count; i++)
903+
{
904+
p = solv->cleandeps_updatepkgs->elements[i];
905+
if (pool->considered && !MAPTST(pool->considered, p))
906+
continue;
907+
queue_push(&iq, p);
908+
MAPCLR(&userinstalled, p - installed->start);
909+
}
894910
}
895911

896912
for (p = installed->start; p < installed->end; p++)
897913
{
898914
if (pool->solvables[p].repo != installed)
899915
continue;
900916
MAPSET(&installedm, p);
901-
if (pool->considered && !MAPTST(pool->considered, p))
902-
MAPSET(&userinstalled, p - installed->start); /* we may not remove those */
903917
if (unneeded && !MAPTST(&userinstalled, p - installed->start))
904918
continue;
905919
MAPSET(&im, p);
906920
}
907921
MAPSET(&installedm, SYSTEMSOLVABLE);
908922
MAPSET(&im, SYSTEMSOLVABLE);
909923

910-
if (!unneeded && solv->cleandeps_updatepkgs)
911-
{
912-
/* find update "seeds" */
913-
queue_init(&updatepkgs_filtered);
914-
find_update_seeds(solv, &updatepkgs_filtered, &userinstalled);
915-
}
916-
917924
#ifdef CLEANDEPSDEBUG
918925
printf("REMOVE PASS\n");
919926
#endif

0 commit comments

Comments
 (0)