summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--VERSION.cmake2
-rw-r--r--package/libsolv.changes6
-rw-r--r--src/rules.c8
-rw-r--r--src/solver.c2
-rw-r--r--test/testcases/distupgrade/dup_allowuninstall.t (renamed from test/testcases/distupgrade/dup_allowuninstall)0
-rw-r--r--test/testcases/distupgrade/dup_multiversion1.t (renamed from test/testcases/distupgrade/dup_multiversion1)0
-rw-r--r--test/testcases/distupgrade/dup_multiversion2.t (renamed from test/testcases/distupgrade/dup_multiversion2)7
-rw-r--r--test/testcases/distupgrade/dup_multiversion3.t (renamed from test/testcases/distupgrade/dup_multiversion3)0
-rw-r--r--test/testcases/distupgrade/dup_noarchchange.t (renamed from test/testcases/distupgrade/dup_noarchchange)0
-rw-r--r--test/testcases/distupgrade/dup_orphan1.t78
-rw-r--r--test/testcases/distupgrade/dup_orphan2.t98
-rw-r--r--test/testcases/distupgrade/dup_orphan3.t95
12 files changed, 291 insertions, 5 deletions
diff --git a/VERSION.cmake b/VERSION.cmake
index 7ba4cb6..d8b6373 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 "15")
+SET(LIBSOLV_PATCH "16")
diff --git a/package/libsolv.changes b/package/libsolv.changes
index 8714d4a..855d7ab 100644
--- a/package/libsolv.changes
+++ b/package/libsolv.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Mon Dec 21 12:59:19 CET 2015 - mls@suse.de
+
+- fix orphan handling for dup with keeporphans set [bnc#957606]
+- bump version to 0.6.16
+
+-------------------------------------------------------------------
Mon Dec 14 15:48:01 CET 2015 - mls@suse.de
- change product links to also look at timestamps [bnc#956443]
diff --git a/src/rules.c b/src/rules.c
index 248b1cd..70d6b07 100644
--- a/src/rules.c
+++ b/src/rules.c
@@ -1325,7 +1325,7 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all)
}
}
}
- if (!isorphaned && p == -SYSTEMSOLVABLE && solv->dupmap.size)
+ if (!isorphaned && p == -SYSTEMSOLVABLE && qs.count && solv->dupmap.size)
p = s - pool->solvables; /* let the dup rules sort it out */
if (qs.count && p == -SYSTEMSOLVABLE)
p = queue_shift(&qs);
@@ -1864,6 +1864,12 @@ solver_addduprules(Solver *solv, Map *addedmap)
solver_addrule(solv, -p, 0, solv->specialupdaters[p - installed->start]);
continue;
}
+ if (!r->p || (r->p == p && !r->d && !r->w2))
+ {
+ /* this is an orphan */
+ MAPSET(&solv->dupmap, p); /* for best rules processing */
+ continue;
+ }
solver_addrule(solv, -p, 0, 0); /* no match, sorry */
}
}
diff --git a/src/solver.c b/src/solver.c
index 2e28b7d..261f367 100644
--- a/src/solver.c
+++ b/src/solver.c
@@ -228,7 +228,7 @@ autouninstall(Solver *solv, Id *problem)
if (solv->keep_orphans)
{
r = solv->rules + v;
- if (!r->d && r->p == (solv->installed->start + (v - solv->updaterules)))
+ if (!r->d && !r->w2 && r->p == (solv->installed->start + (v - solv->updaterules)))
{
lastfeature = v;
lastupdate = 0;
diff --git a/test/testcases/distupgrade/dup_allowuninstall b/test/testcases/distupgrade/dup_allowuninstall.t
index 86a8af9..86a8af9 100644
--- a/test/testcases/distupgrade/dup_allowuninstall
+++ b/test/testcases/distupgrade/dup_allowuninstall.t
diff --git a/test/testcases/distupgrade/dup_multiversion1 b/test/testcases/distupgrade/dup_multiversion1.t
index 326de7a..326de7a 100644
--- a/test/testcases/distupgrade/dup_multiversion1
+++ b/test/testcases/distupgrade/dup_multiversion1.t
diff --git a/test/testcases/distupgrade/dup_multiversion2 b/test/testcases/distupgrade/dup_multiversion2.t
index 18909eb..6708896 100644
--- a/test/testcases/distupgrade/dup_multiversion2
+++ b/test/testcases/distupgrade/dup_multiversion2.t
@@ -89,8 +89,10 @@ job multiversion name a
job distupgrade all packages
# a-1-1 is treated as orphaned and stays behind
result transaction,problems <inline>
-#>erase b-1-1.i686@system
+#>erase a-1-1.i686@system
#>install a-2-1.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
nextjob
@@ -100,7 +102,8 @@ job multiversion name a
job distupgrade repo available
# a-1-1 is treated as orphaned and stays behind
result transaction,problems <inline>
-#>erase b-1-1.i686@system
+#>erase a-1-1.i686@system
#>install a-2-1.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
diff --git a/test/testcases/distupgrade/dup_multiversion3 b/test/testcases/distupgrade/dup_multiversion3.t
index 8be3190..8be3190 100644
--- a/test/testcases/distupgrade/dup_multiversion3
+++ b/test/testcases/distupgrade/dup_multiversion3.t
diff --git a/test/testcases/distupgrade/dup_noarchchange b/test/testcases/distupgrade/dup_noarchchange.t
index f500d9b..f500d9b 100644
--- a/test/testcases/distupgrade/dup_noarchchange
+++ b/test/testcases/distupgrade/dup_noarchchange.t
diff --git a/test/testcases/distupgrade/dup_orphan1.t b/test/testcases/distupgrade/dup_orphan1.t
new file mode 100644
index 0000000..3c4976a
--- /dev/null
+++ b/test/testcases/distupgrade/dup_orphan1.t
@@ -0,0 +1,78 @@
+# test dup with orphaned packages
+#
+# part 1: simple update
+#
+# dup should leave orphaned a installed
+#
+repo system 0 testtags <inline>
+#>=Pkg: a 1 1 i686
+#>=Pkg: b 1 1 i686
+repo available 0 testtags <inline>
+#>=Pkg: b 2 1 i686
+system i686 * system
+
+job distupgrade all packages
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+nextjob
+
+job distupgrade repo available
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+### same with keeporphans
+
+nextjob
+
+solverflags keeporphans
+job distupgrade all packages
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+nextjob
+
+solverflags keeporphans
+job distupgrade repo available
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+### same with allowuninstall
+
+nextjob
+
+solverflags allowuninstall
+job distupgrade all packages
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+nextjob
+
+solverflags allowuninstall
+job distupgrade repo available
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+### same with allowuninstall and keeporphans
+
+nextjob
+
+solverflags allowuninstall keeporphans
+job distupgrade all packages
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+nextjob
+
+solverflags allowuninstall keeporphans
+job distupgrade repo available
+result transaction,problems <inline>
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+
diff --git a/test/testcases/distupgrade/dup_orphan2.t b/test/testcases/distupgrade/dup_orphan2.t
new file mode 100644
index 0000000..f4e746e
--- /dev/null
+++ b/test/testcases/distupgrade/dup_orphan2.t
@@ -0,0 +1,98 @@
+# test dup with orphaned packages
+#
+# part 2: update conflicts with the orphan
+#
+# dup should leave orphaned a installed
+# for "distupgrade repo available", a is not involved
+# in the dup and thus not considered orphan.
+#
+
+repo system 0 testtags <inline>
+#>=Pkg: a 1 1 i686
+#>=Pkg: b 1 1 i686
+repo available 0 testtags <inline>
+#>=Pkg: b 2 1 i686
+#>=Con: a
+system i686 * system
+
+job distupgrade all packages
+result transaction,problems <inline>
+#>erase a-1-1.i686@system
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+nextjob
+
+job distupgrade repo available
+result transaction,problems <inline>
+#>erase a-1-1.i686@system
+#>problem 4d4de423 info package b-2-1.i686 conflicts with a provided by a-1-1.i686
+#>problem 4d4de423 solution 2cf4745c erase a-1-1.i686@system
+#>problem 4d4de423 solution 5a433aff allow b-1-1.i686@system
+#>problem 4d4de423 solution ce4305f2 erase b-1-1.i686@system
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+### keeporphans
+
+nextjob
+
+solverflags keeporphans
+job distupgrade all packages
+result transaction,problems <inline>
+#>problem 4d4de423 info package b-2-1.i686 conflicts with a provided by a-1-1.i686
+#>problem 4d4de423 solution 2cf4745c erase a-1-1.i686@system
+#>problem 4d4de423 solution 5a433aff allow b-1-1.i686@system
+#>problem 4d4de423 solution ce4305f2 erase b-1-1.i686@system
+
+nextjob
+
+solverflags keeporphans
+job distupgrade repo available
+result transaction,problems <inline>
+#>erase a-1-1.i686@system
+#>problem 4d4de423 info package b-2-1.i686 conflicts with a provided by a-1-1.i686
+#>problem 4d4de423 solution 2cf4745c erase a-1-1.i686@system
+#>problem 4d4de423 solution 5a433aff allow b-1-1.i686@system
+#>problem 4d4de423 solution ce4305f2 erase b-1-1.i686@system
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+### same with allowuninstall
+
+nextjob
+
+solverflags allowuninstall
+job distupgrade all packages
+result transaction,problems <inline>
+#>erase a-1-1.i686@system
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+nextjob
+
+solverflags allowuninstall
+job distupgrade repo available
+result transaction,problems <inline>
+#>erase b-1-1.i686@system
+
+
+### same with allowuninstall and keeporphans
+
+nextjob
+
+solverflags allowuninstall keeporphans
+job distupgrade all packages
+result transaction,problems <inline>
+#>erase a-1-1.i686@system
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+nextjob
+
+solverflags allowuninstall keeporphans
+job distupgrade repo available
+result transaction,problems <inline>
+#>erase a-1-1.i686@system
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+
diff --git a/test/testcases/distupgrade/dup_orphan3.t b/test/testcases/distupgrade/dup_orphan3.t
new file mode 100644
index 0000000..6c04348
--- /dev/null
+++ b/test/testcases/distupgrade/dup_orphan3.t
@@ -0,0 +1,95 @@
+# test dup with orphaned packages
+#
+# part 3: a is not really an orphan, but cannott be downgraded
+#
+
+repo system 0 testtags <inline>
+#>=Pkg: a 1 1 i686
+#>=Pkg: b 1 1 i686
+repo available 0 testtags <inline>
+#>=Pkg: a 1 0 i686
+#>=Pkg: b 2 1 i686
+system i686 * system
+
+solverflags !dupallowdowngrade
+job distupgrade all packages
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+#>problem c43b1300 info problem with installed package a-1-1.i686
+#>problem c43b1300 solution c43b1300 replace a-1-1.i686@system a-1-0.i686@available
+
+nextjob
+
+solverflags !dupallowdowngrade
+job distupgrade repo available
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+#>problem c43b1300 info problem with installed package a-1-1.i686
+#>problem c43b1300 solution c43b1300 replace a-1-1.i686@system a-1-0.i686@available
+
+### keeporphans
+
+nextjob
+
+solverflags !dupallowdowngrade keeporphans
+job distupgrade all packages
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+#>problem c43b1300 info problem with installed package a-1-1.i686
+#>problem c43b1300 solution c43b1300 replace a-1-1.i686@system a-1-0.i686@available
+
+nextjob
+
+solverflags !dupallowdowngrade keeporphans
+job distupgrade repo available
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+#>problem c43b1300 info problem with installed package a-1-1.i686
+#>problem c43b1300 solution c43b1300 replace a-1-1.i686@system a-1-0.i686@available
+
+
+### same with allowuninstall
+
+nextjob
+
+solverflags !dupallowdowngrade allowuninstall
+job distupgrade all packages
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+nextjob
+
+solverflags !dupallowdowngrade allowuninstall
+job distupgrade repo available
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+### same with allowuninstall and keeporphans
+
+nextjob
+
+solverflags !dupallowdowngrade allowuninstall keeporphans
+job distupgrade all packages
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+nextjob
+
+solverflags !dupallowdowngrade allowuninstall keeporphans
+job distupgrade repo available
+result transaction,problems <inline>
+#>downgrade a-1-1.i686@system a-1-0.i686@available
+#>upgrade b-1-1.i686@system b-2-1.i686@available
+
+
+