diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-27 14:57:15 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-27 14:57:15 +0900 |
commit | be2d42493b7600c4bdff046181f1519a3d44b13c (patch) | |
tree | 749d4a7afa55c65fee9a7188da204a6fe4660208 | |
parent | 19032dd0c1d2167793399473a1b490be1b635d17 (diff) | |
download | libsolv-upstream/0.6.17.tar.gz libsolv-upstream/0.6.17.tar.bz2 libsolv-upstream/0.6.17.zip |
Imported Upstream version 0.6.17upstream/0.6.17
Change-Id: I2c27bcda07cba71c27b3bef00710dd730e5e0be7
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
-rw-r--r-- | VERSION.cmake | 2 | ||||
-rw-r--r-- | package/libsolv.changes | 6 | ||||
-rw-r--r-- | src/rules.c | 25 | ||||
-rw-r--r-- | test/testcases/multiversion/update.t | 65 |
4 files changed, 91 insertions, 7 deletions
diff --git a/VERSION.cmake b/VERSION.cmake index d8b6373..1523c2a 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -49,5 +49,5 @@ SET(LIBSOLVEXT_SOVERSION "0") SET(LIBSOLV_MAJOR "0") SET(LIBSOLV_MINOR "6") -SET(LIBSOLV_PATCH "16") +SET(LIBSOLV_PATCH "17") diff --git a/package/libsolv.changes b/package/libsolv.changes index 855d7ab..b1d41ee 100644 --- a/package/libsolv.changes +++ b/package/libsolv.changes @@ -1,4 +1,10 @@ ------------------------------------------------------------------- +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] diff --git a/src/rules.c b/src/rules.c index 70d6b07..6f35720 100644 --- a/src/rules.c +++ b/src/rules.c @@ -1206,6 +1206,17 @@ addduppackages(Solver *solv, Solvable *s, Queue *qs) } #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 @@ -1245,9 +1256,8 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all) { 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; @@ -1300,9 +1310,7 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all) { /* 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 */ @@ -1314,6 +1322,11 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all) 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) diff --git a/test/testcases/multiversion/update.t b/test/testcases/multiversion/update.t new file mode 100644 index 0000000..c3a2d9a --- /dev/null +++ b/test/testcases/multiversion/update.t @@ -0,0 +1,65 @@ +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 |