summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2020-05-29 12:46:59 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2020-05-29 12:46:59 +0200
commit33e19f1fe1655e2d6883ff8d30226fb7db02dd45 (patch)
treee60f122cb61c8ed22c47d360968f5edbaab3fc95
parent1941515e1c96f9c33d63e426049d9dad5420c580 (diff)
Consider protected packages for removal if they are marked as such
The pkgProblemResolver incorrectly skips protected packages while considering packages for removal, which was always wrong but is now a lot more visible as (potentially) far more packages are considered protected in their state. Note that the testcase shows that we need more changes to make this proper.
-rw-r--r--apt-pkg/algorithms.cc2
-rwxr-xr-xtest/integration/test-bug-960705-propagate-protected-to-satisfied-conflict24
2 files changed, 25 insertions, 1 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index 3fdb5116e..ea6d4c39a 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -1043,7 +1043,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
}
// Skip adding to the kill list if it is protected
- if (Cache[Pkg].Protect())
+ if (Cache[Pkg].Protect() && Cache[Pkg].Mode != pkgDepCache::ModeDelete)
continue;
if (Debug == true)
diff --git a/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict b/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict
index 689699e15..480b6753e 100755
--- a/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict
+++ b/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict
@@ -25,6 +25,30 @@ Starting 2 pkgProblemResolver with broken count: 1
Investigating (0) init:amd64 < 1 @ii mK Ib >
Broken init:amd64 PreDepends on systemd-sysv:amd64 < 1 @ii pmR >
Considering systemd-sysv:amd64 0 as a solution to init:amd64 5100
+ Added systemd-sysv:amd64 to the remove list
+Broken init:amd64 PreDepends on sysvinit-core:amd64 < none @un pH >
+ Considering sysvinit-core:amd64 0 as a solution to init:amd64 5100
+ Fixing init:amd64 via keep of systemd-sysv:amd64
+ Ignore MarkKeep of systemd-sysv:amd64 < 1 @ii pmR > as its mode (Delete) is protected
+Investigating (1) init:amd64 < 1 @ii mK Ib >
+Broken init:amd64 PreDepends on systemd-sysv:amd64 < 1 @ii pmR >
+ Considering systemd-sysv:amd64 0 as a solution to init:amd64 5100
+ Added systemd-sysv:amd64 to the remove list
+Broken init:amd64 PreDepends on sysvinit-core:amd64 < none @un pH >
+ Considering sysvinit-core:amd64 0 as a solution to init:amd64 5100
+ Fixing init:amd64 via keep of systemd-sysv:amd64
+ Ignore MarkKeep of systemd-sysv:amd64 < 1 @ii pmR > as its mode (Delete) is protected
+Investigating (2) init:amd64 < 1 @ii mK Ib >
+Broken init:amd64 PreDepends on systemd-sysv:amd64 < 1 @ii pmR >
+ Considering systemd-sysv:amd64 0 as a solution to init:amd64 5100
+ Added systemd-sysv:amd64 to the remove list
+Broken init:amd64 PreDepends on sysvinit-core:amd64 < none @un pH >
+ Considering sysvinit-core:amd64 0 as a solution to init:amd64 5100
+ Fixing init:amd64 via keep of systemd-sysv:amd64
+ Ignore MarkKeep of systemd-sysv:amd64 < 1 @ii pmR > as its mode (Delete) is protected
+Investigating (3) init:amd64 < 1 @ii mK Ib >
+Broken init:amd64 PreDepends on systemd-sysv:amd64 < 1 @ii pmR >
+ Considering systemd-sysv:amd64 5100 as a solution to init:amd64 5100
Broken init:amd64 PreDepends on sysvinit-core:amd64 < none @un pH >
Considering sysvinit-core:amd64 0 as a solution to init:amd64 5100
Or group remove for init:amd64