[pacman-dev] Some comments on Bryan patches (bugs)
Bryan Ischo
bji-keyword-pacman.3644cb at www.ischo.com
Fri Mar 6 15:06:46 EST 2009
Nagy Gabor wrote:
> Hi!
>
> I know that I speak too late, but I haven't time/motivation to review
> this patch nowadays.
>
> 1. See alpm/sync.c/sync_prepare(). When user decides to remove
> unresolvable targets from the list, our code doesn't remove any targets
> from target->packages, just adds the pulled dependencies. The actual
> removal is done in the sortbydeps part (sortbydeps is called with list
> param!). This works, but it is hard to understand (imho), and it is a
> memleak: some pmsyncpkg_t structs magically disappeared.
>
I don't think that it's confusing that it happens this way; the resolve
operation builds up a new list of packages for the transaction, and that
list is then used to replace the trans->packages list. This is opposed
to before where the resolve operation modified trans->packages in place.
You are right that there is a memory leak there, though; my change
failed to free up any pmsyncpkg_t structs which were in trans->packages
but were not in the replacement list. I will submit a small and simple
patch which fixes this issue shortly.
Good catch!
> 2. Behaviour change (this pactest now fails)
> --- sync993.py ---
> self.description = "Choose a dependency satisfier (target-list vs. database)"
>
> sp1 = pmpkg("pkg1")
> sp1.depends = ["dep"]
>
> sp2 = pmpkg("pkg2")
> sp2.provides = ["dep"]
>
> sp3 = pmpkg("pkg3")
> sp3.provides = ["dep"]
>
> for p in sp1, sp2, sp3:
> self.addpkg2db("sync", p)
>
> self.args = "-S pkg1 pkg3"
>
> self.addrule("PACMAN_RETCODE=0")
> self.addrule("PKG_EXIST=pkg1")
> self.addrule("!PKG_EXIST=pkg2")
> self.addrule("PKG_EXIST=pkg3")
> ------------------
>
> If you define conflict between pkg2 and pkg3, pacman will refuse to
> commit the transation. Before this patch, pacman always chose from
> target list.
>
>
sync993 does not exist in the pacman sources. If it did, I would have
seen this problem and addressed it. I will get back to you on this once
I have figured out what's going on (I suspect that it's a difference in
the way the new resolve code works, it may stop too short now to figure
out that there is a 'better' package to choose for resolving the
dependency).
Thanks,
Bryan
More information about the pacman-dev
mailing list