[pacman-dev] sync_prepare clean-up III, TODO

Xavier shiningxc at gmail.com
Fri Jul 27 05:04:57 EDT 2007


On Wed, Jul 25, 2007 at 09:20:59PM +0200, Nagy Gabor wrote:
> Hi!
> This is an answer to this thread (I didn't get mails from this ML because 
> my mail "address" didn't work, I changed to my secondary mail address 
> now).
> So, I think requiredby handling of syncpkgs is correct, this is needed for 
> to-be-removed packages only and that field is correctly copied from 
> pkgcache in sync.c, as I see.
> I think pm_syncpkgt is not efficient: a kernel-list-like structure would 
> be much better, or new .sync member(s) to pm_pkg_t struct (Or in more 
> general: graph-like structures are even better).
> My solution to sync1003.py: simply pass the remove_list to checkdeps and 
> handle it.

I'm attaching a git patch, so that this pactest could be easily added to git.
-------------- next part --------------
>From fd740345ef8440373ced9cd3dfac1ea8127883e9 Mon Sep 17 00:00:00 2001
From: Nagy Gabor <ngaba at petra.hos.u-szeged.hu>
Date: Wed, 25 Jul 2007 14:47:46 +0200
Subject: [PATCH] Add sync1003 pactest.

The sync package pkg3 depends on the sync package pkg2, but pkg1 replaces pkg2.
So pkg2 is added to the remove list.

When checkdeps checks if pkg2 can be removed, it looks at the packages that require pkg2
(with the RequiredBy field of pkg2), but this doesn't contain pkg3 at this point.
RequiredBy fields are only updated after the packages are installed.

Proposed solution : checkdeps should know both the remove and upgrade list to decide properly.

Reference:
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008972.html

Signed-off-by: Chantry Xavier <shiningxc at gmail.com>
---
 pactest/tests/sync1003.py |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 pactest/tests/sync1003.py

diff --git a/pactest/tests/sync1003.py b/pactest/tests/sync1003.py
new file mode 100644
index 0000000..3fd9799
--- /dev/null
+++ b/pactest/tests/sync1003.py
@@ -0,0 +1,26 @@
+self.description = "Induced removal would break dependency"
+
+sp1 = pmpkg("pkg1", "1.0-2")
+sp1.replaces = [ "pkg2" ]
+self.addpkg2db("sync", sp1)
+
+sp2 = pmpkg("pkg2", "1.0-2")
+self.addpkg2db("sync", sp2)
+
+sp3 = pmpkg("pkg3", "1.0-2")
+sp3.depends = ["pkg2=1.0-2"]
+self.addpkg2db("sync", sp3)
+
+lp1 = pmpkg("pkg1", "1.0-1")
+self.addpkg2db("local", lp1)
+
+lp2 = pmpkg("pkg2", "1.0-2")
+self.addpkg2db("local", lp2)
+
+lp3 = pmpkg("pkg3", "1.0-1")
+self.addpkg2db("local", lp3)
+
+self.args = "-Su"
+
+self.addrule("PACMAN_RETCODE=1")
+self.addrule("PKG_EXIST=pkg2")
-- 
1.5.2.4



More information about the pacman-dev mailing list