SET(LIBSOLV_MAJOR "0")
SET(LIBSOLV_MINOR "6")
-SET(LIBSOLV_PATCH "16")
+SET(LIBSOLV_PATCH "17")
-------------------------------------------------------------------
+Tue Dec 22 11:49:02 CET 2015 - mls@suse.de
+
+- fix update handling of multiversion packages [bnc#957606]
+- bump version to 0.6.17
+
+-------------------------------------------------------------------
Mon Dec 21 12:59:19 CET 2015 - mls@suse.de
- fix orphan handling for dup with keeporphans set [bnc#957606]
}
#endif
+/* stash away the original updaters for multiversion packages. We do this so that
+ * we can update the package later */
+static inline void
+set_specialupdaters(Solver *solv, Solvable *s, Id d)
+{
+ Repo *installed = solv->installed;
+ if (!solv->specialupdaters)
+ solv->specialupdaters = solv_calloc(installed->end - installed->start, sizeof(Id));
+ solv->specialupdaters[s - solv->pool->solvables - installed->start] = d;
+}
+
/*-------------------------------------------------------------------
*
* add rule for update
{
if (p != -SYSTEMSOLVABLE)
queue_unshift(&qs, p);
- if (!solv->specialupdaters)
- solv->specialupdaters = solv_calloc(solv->installed->end - solv->installed->start, sizeof(Id));
- solv->specialupdaters[s - pool->solvables - solv->installed->start] = pool_queuetowhatprovides(pool, &qs);
+ if (qs.count)
+ set_specialupdaters(solv, s, pool_queuetowhatprovides(pool, &qs));
}
queue_free(&qs);
return;
{
/* this is a multiversion orphan */
queue_push(&solv->orphaned, s - pool->solvables);
- if (!solv->specialupdaters)
- solv->specialupdaters = solv_calloc(solv->installed->end - solv->installed->start, sizeof(Id));
- solv->specialupdaters[s - pool->solvables - solv->installed->start] = d;
+ set_specialupdaters(solv, s, d);
if (solv->keep_orphans && !(solv->droporphanedmap_all || (solv->droporphanedmap.size && MAPTST(&solv->droporphanedmap, s - pool->solvables - solv->installed->start))))
{
/* we need to keep the orphan */
isorphaned = 1;
j = qs.count; /* force the update */
}
+ else if (d && (solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, s - pool->solvables - solv->installed->start))))
+ {
+ /* non-orphan multiversion package, set special updaters if we want an update */
+ set_specialupdaters(solv, s, d);
+ }
qs.count = j;
}
else if (p != -SYSTEMSOLVABLE)
--- /dev/null
+repo system 0 testtags <inline>
+#>=Pkg: k 1 0 x86_64
+#>=Pkg: k-m 1 0 x86_64
+#>=Req: k = 1-0
+#>=Pkg: k-freak-1-0 1 0 x86_64
+#>=Req: k = 1-0
+#>=Pkg: k 1 1 x86_64
+#>=Pkg: k-m 1 1 x86_64
+#>=Req: k = 1-1
+#>=Pkg: k 2 0 x86_64
+#>=Pkg: k-m 2 0 x86_64
+#>=Req: k = 2-0
+#>=Pkg: k 3 0 x86_64
+#>=Pkg: k-m 3 0 x86_64
+#>=Req: k = 3-0
+repo available 0 testtags <inline>
+#>=Pkg: k 3 1 x86_64
+#>=Pkg: k-m 3 1 x86_64
+#>=Req: k = 3-1
+#>=Pkg: k 3 6 x86_64
+#>=Pkg: k-m 3 6 x86_64
+#>=Req: k = 3-6
+#>=Pkg: c 1 1 noarch
+#>=Con: k = 3-6
+system x86_64 rpm system
+poolflags implicitobsoleteusescolors
+
+job multiversion provides k
+job multiversion provides k-m
+job update all packages
+result transaction,problems <inline>
+#>install k-3-6.x86_64@available
+#>install k-m-3-6.x86_64@available
+
+nextjob
+
+job multiversion provides k
+job multiversion provides k-m
+job install name c
+job update all packages
+result transaction,problems <inline>
+#>install k-3-1.x86_64@available
+#>install k-m-3-1.x86_64@available
+#>install c-1-1.noarch@available
+
+
+nextjob
+
+job multiversion provides k
+job multiversion provides k-m
+job install name c
+job update all packages [forcebest]
+result transaction,problems <inline>
+#>install k-3-6.x86_64@available
+#>install k-m-3-6.x86_64@available
+#>problem ca7106eb info package c-1-1.noarch conflicts with k = 3-6 provided by k-3-6.x86_64
+#>problem ca7106eb solution 4d4bc71f allow k-1-0.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-1-1.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-2-0.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-3-0.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-m-1-0.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-m-1-1.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-m-2-0.x86_64@system
+#>problem ca7106eb solution 4d4bc71f allow k-m-3-0.x86_64@system
+#>problem ca7106eb solution 86764155 deljob install name c