From 6ac2ee21b30f3c5f331d19349f96bb8e5b020b47 Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Mon, 23 May 2016 08:27:29 -0400 Subject: recursedeps: include cyclic dependencies Cyclic dependencies (A depends on B, B depends on A) were not selected because neither package could be removed individually, so can_remove_package would always return false for both. By preselecting all dependencies then filtering back out any dependencies still required by any packages that will not be uninstalled, groups of unneeded cyclic dependencies can be found. Fixes FS#41031 Signed-off-by: Andrew Gregory Signed-off-by: Allan McRae --- test/pacman/tests/TESTS | 1 + test/pacman/tests/remove-recursive-cycle.py | 41 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 test/pacman/tests/remove-recursive-cycle.py (limited to 'test/pacman') diff --git a/test/pacman/tests/TESTS b/test/pacman/tests/TESTS index 62d1f2ae..bd5a0b64 100644 --- a/test/pacman/tests/TESTS +++ b/test/pacman/tests/TESTS @@ -109,6 +109,7 @@ TESTS += test/pacman/tests/querycheck002.py TESTS += test/pacman/tests/querycheck_fast_file_type.py TESTS += test/pacman/tests/reason001.py TESTS += test/pacman/tests/remove-assumeinstalled.py +TESTS += test/pacman/tests/remove-recursive-cycle.py TESTS += test/pacman/tests/remove001.py TESTS += test/pacman/tests/remove002.py TESTS += test/pacman/tests/remove010.py diff --git a/test/pacman/tests/remove-recursive-cycle.py b/test/pacman/tests/remove-recursive-cycle.py new file mode 100644 index 00000000..b9864c87 --- /dev/null +++ b/test/pacman/tests/remove-recursive-cycle.py @@ -0,0 +1,41 @@ +self.description = "Recursively remove a package with cyclical dependencies" + +lpkg1 = pmpkg('pkg1') +self.addpkg2db('local', lpkg1) +lpkg1.depends = [ 'dep1' ] + +lpkg2 = pmpkg('pkg2') +self.addpkg2db('local', lpkg2) +lpkg2.depends = [ 'dep3' ] + +# cyclic dependency 1 +ldep1 = pmpkg('dep1') +self.addpkg2db('local', ldep1) +ldep1.depends = [ 'dep2', 'dep3', 'dep4' ] +ldep1.reason = 1 + +# cyclic dependency 2 +ldep2 = pmpkg('dep2') +self.addpkg2db('local', ldep2) +ldep2.depends = [ 'dep1' ] +ldep2.reason = 1 + +# dependency required by another package +ldep3 = pmpkg('dep3') +self.addpkg2db('local', ldep3) +ldep3.reason = 1 + +# explicitly installed dependency +ldep4 = pmpkg('dep4') +self.addpkg2db('local', ldep4) +ldep4.reason = 0 + +self.args = "-Rs pkg1" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_EXIST=pkg2") +self.addrule("PKG_EXIST=dep3") +self.addrule("PKG_EXIST=dep4") +self.addrule("!PKG_EXIST=pkg1") +self.addrule("!PKG_EXIST=dep1") +self.addrule("!PKG_EXIST=dep2") -- cgit v1.2.3