]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Fix distupgrade all packages with cleandeps
authorMichael Schroeder <mls@suse.de>
Thu, 19 Oct 2017 11:28:33 +0000 (13:28 +0200)
committerMichael Schroeder <mls@suse.de>
Thu, 19 Oct 2017 11:28:33 +0000 (13:28 +0200)
Also add a test for this.

src/rules.c
test/testcases/cleandeps/cleandeps_dup.t

index e0af64f7d3d1719968acf4138d55e40226626ce9..b66bf5ffea45c49acf5aa2a479e087db8dfb96a4 100644 (file)
@@ -1770,7 +1770,7 @@ solver_addtodupmaps(Solver *solv, Id p, Id how, int targeted)
            if (pool->solvables[pi2].repo != installed)
              MAPSET(&solv->dupinvolvedmap, pi2);
        }
-      if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0)
+      if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0 && !solv->bestupdatemap_all)
        {
          if (!solv->bestupdatemap.size)
            map_grow(&solv->bestupdatemap, installed->end - installed->start);
@@ -1815,7 +1815,7 @@ solver_addtodupmaps(Solver *solv, Id p, Id how, int targeted)
                    if (pool->solvables[pi2].repo != installed)
                      MAPSET(&solv->dupinvolvedmap, pi2);
                }
-             if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0)
+             if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0 && !solv->bestupdatemap_all)
                {
                  if (!solv->bestupdatemap.size)
                    map_grow(&solv->bestupdatemap, installed->end - installed->start);
@@ -1879,9 +1879,13 @@ solver_createdupmaps(Solver *solv)
                  if (installed && pool->solvables[p].repo != installed)
                    MAPSET(&solv->dupmap, p);
                }
-             solv->updatemap_all = 1;
              if (how & SOLVER_FORCEBEST)
                solv->bestupdatemap_all = 1;
+             if (how & SOLVER_CLEANDEPS)
+               {
+                 FOR_REPO_SOLVABLES(installed, p, s)
+                   add_cleandeps_updatepkg(solv, p);
+               }
            }
          else
            {
@@ -1935,6 +1939,8 @@ solver_addduprules(Solver *solv, Map *addedmap)
   Rule *r;
 
   solv->duprules = solv->nrules;
+  if (solv->dupinvolvedmap_all)
+    solv->updatemap_all = 1;
   for (i = 1; i < pool->nsolvables; i++)
     {
       if (i == SYSTEMSOLVABLE || !MAPTST(addedmap, i))
@@ -1954,9 +1960,12 @@ solver_addduprules(Solver *solv, Map *addedmap)
            continue;
          if (installed && ps->repo == installed)
            {
-             if (!solv->updatemap.size)
-               map_grow(&solv->updatemap, installed->end - installed->start);
-             MAPSET(&solv->updatemap, p - installed->start);
+             if (!solv->updatemap_all)
+               {
+                 if (!solv->updatemap.size)
+                   map_grow(&solv->updatemap, installed->end - installed->start);
+                 MAPSET(&solv->updatemap, p - installed->start);
+               }
              if (!MAPTST(&solv->dupmap, p))
                {
                  Id ip, ipp;
index 62ebb017ae14ffa1fb8b46ddb11ccef01be60c2f..afebcc47ea9b6b1d8769adb56d559f90e8c87ec8 100644 (file)
@@ -33,3 +33,13 @@ nextjob
 job distupgrade name A = 1-2 [cleandeps]
 result transaction,problems,cleandeps <inline>
 #>upgrade A-1-1.noarch@system A-1-2.noarch@test
+
+# check all packages
+nextjob
+job distupgrade all packages [cleandeps]
+result transaction,problems,cleandeps <inline>
+#>cleandeps B1-1-1.noarch@system
+#>erase B1-1-1.noarch@system
+#>install B2-1-1.noarch@test
+#>upgrade A-1-1.noarch@system A-2-1.noarch@test
+