summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/solver.c13
-rw-r--r--test/upgrade.installed13
-rw-r--r--test/upgrade.repo27
-rw-r--r--test/upgrade1.test10
4 files changed, 61 insertions, 2 deletions
diff --git a/src/solver.c b/src/solver.c
index 59edb1c..d83bb6a 100644
--- a/src/solver.c
+++ b/src/solver.c
@@ -762,11 +762,20 @@ static void cset_check_removal_by_iif(struct apk_solver_state *ss, struct apk_na
static void cset_gen_name_change(struct apk_solver_state *ss, struct apk_name *name)
{
struct apk_name **pname;
- struct apk_package *pkg = name->ss.chosen.pkg, *opkg;
+ struct apk_package *pkg, *opkg;
struct apk_dependency *d;
- if (pkg == NULL || pkg->ss.in_changeset)
+ if (name->ss.in_changeset) return;
+
+ pkg = name->ss.chosen.pkg;
+ if (pkg == NULL) {
+ /* Package removal */
+ opkg = name->ss.installed_pkg;
+ if (opkg) cset_gen_name_remove(ss, opkg);
+ name->ss.in_changeset = 1;
return;
+ }
+ if (pkg->ss.in_changeset) return;
pkg->ss.in_changeset = 1;
pkg->name->ss.in_changeset = 1;
diff --git a/test/upgrade.installed b/test/upgrade.installed
new file mode 100644
index 0000000..544ffae
--- /dev/null
+++ b/test/upgrade.installed
@@ -0,0 +1,13 @@
+C:Q1EyN5AdpAOBJWKMR89pp/C66o+OE=
+P:libold
+V:1
+S:1
+I:1
+
+C:Q1eVpkasfqZAukAXFYbgwt4xAEEEe=
+P:app
+V:1
+S:1
+I:1
+D:libold
+
diff --git a/test/upgrade.repo b/test/upgrade.repo
new file mode 100644
index 0000000..032a29b
--- /dev/null
+++ b/test/upgrade.repo
@@ -0,0 +1,27 @@
+C:Q1EyN5AdpAOBJWKMR89pp/C66o+OE=
+P:libold
+V:1
+S:1
+I:1
+
+C:Q1EyN5AdpAOBJWKMR89pp/C66o+FE=
+P:libnew
+V:1
+S:1
+I:1
+D:!libold
+
+C:Q1eVpkasfqZAukAXFYbgwt4xAEEEe=
+P:app
+V:1
+S:1
+I:1
+D:libold
+
+C:Q1EyN5AdpAOBJWKMR89pp/C77FFFF=
+P:app
+V:2
+S:1
+I:1
+D:libnew
+
diff --git a/test/upgrade1.test b/test/upgrade1.test
new file mode 100644
index 0000000..f437590
--- /dev/null
+++ b/test/upgrade1.test
@@ -0,0 +1,10 @@
+@ARGS
+--test-repo upgrade.repo
+--test-instdb upgrade.installed
+--test-world app
+upgrade
+@EXPECT
+(1/3) Purging libold (1)
+(2/3) Installing libnew (1)
+(3/3) Upgrading app (1 -> 2)
+OK: 0 MiB in 2 packages