[pacman-dev] pacman 3.1 release ?

Xavier shiningxc at gmail.com
Sat Sep 15 16:24:51 EDT 2007


On Sat, Sep 15, 2007 at 05:30:19PM +0200, Nagy Gabor wrote:
> Let me explain (now I can't create pactest, sorry). PM_SYNC_TYPE_REPLACE
> indicates that install of "replacer" package will induce the removal of packages
> listed in data field. This is a nice trick: if you later decide that you won't 
> install "replacer", removing of this syncpkg from target list will automatically
> revert the induced removal. Conflict resolution also uses this trick. If pkgA
> conflicts with pkgB, and pkgA is in the target list, then pkgA becomes a
> replacer (and syncpkg type of pkgA will be _changed_ to PM_SYNC_TYPE_REPLACE,
> here you will loose information!), and the to-be-removed conflicting local pkgB
> package will be listed in its data field. See sync.c:567-569, that part (without
> any further discussion) is wrong.

I see. I'm attaching a pactest that should reproduce this.
-------------- next part --------------
self.description = "A dep induces a replacement."

lp1 = pmpkg("pkg1")
self.addpkg2db("local", lp1);

sp2 = pmpkg("pkg2")
sp2.depends = ["pkg3"]
self.addpkg2db("sync", sp2);

sp3 = pmpkg("pkg3")
sp3.conflicts = ["pkg1"]
self.addpkg2db("sync", sp3);

self.args = "-S pkg2"

self.addrule("PACMAN_RETCODE=0")
self.addrule("!PKG_EXIST=pkg1")
self.addrule("PKG_EXIST=pkg2")
self.addrule("PKG_EXIST=pkg3")
self.addrule("PKG_REASON=pkg3|1")


More information about the pacman-dev mailing list