Nagy Gabor wrote:
>> Nagy Gabor wrote:
>>>> commit f43805d875ad5c672afbbfff48bded2087204773
>>>> Author: Chantry Xavier<email@example.com>
>>>> Date: Sat May 10 18:47:42 2008 +0200
>>>> Cleanup usages of alpm_list_find and alpm_list_remove.
>>>> * remove obsolete and unused *_cmp helper functions like deppkg_cmp
>>>> * new alpm_list_remove_str function, used 6 times in handle.c
>>>> * remove _alpm_prov_cmp / _alpm_db_whatprovides and replace them by
>>>> a more general alpm_find_pkg_satisfiers with a cleaner
>>>> before: alpm_db_whatprovides(db, targ)
>>>> after: alpm_find_pkg_satisfiers(alpm_db_getpkgcache(db), targ)
>>> Warning: pkg literal also satisfies pkg. But in most cases we called
>>> what_provides if we didn't find a literal.
> Yes, there is no problem with this (I just emphasized it). I like the new
> function better because I think find_satisfiers is quite a common task. Btw, as
> I see, after this patch pacman -S 'kernel26>=2.6.24' automagically works, which
> is cool imho.
I am glad you liked at least one thing about my patch
>> I know, it's not exactly equivalent but I think it makes more sense that
>> way and as you noticed, it works the same for our use case.
>>>> * remove satisfycmp and replace alpm_list_find + satisfycmp usage by
>>>> before : alpm_list_find(_alpm_db_get_pkgcache(db), dep, satisfycmp)
>>>> after : _alpm_find_dep_satisfiers(_alpm_db_get_pkgcache(db ), dep)
>>> Warning: possible slowdown, the old way just stopped after a satisfier
>>> is ideal in checkdeps), now we scan the whole db.
>> Right, I knew about that too, I just wanted to keep the code as clean as
>> possible and didn't find another way. Though it might be worth to do
>> some benchmarking / profiling. If it's really too bad, it will have to
> One more thing, the result of alpm_find_dep_satisfiers should be freed, which is
> forgotten (memleak). Remember, that the old list_find was a boolean function, it
> was modified in order to handle causingpkg for -Ru. No doubt, this will be
> slower. The average slowdown of (successful) dependency check will be about 2x.
> (considering only the real calculations, not disk read etc.) The question is
> that overall this will be notable or not, this needs testing, indeed. Basically,
> I don't prefer clean code over "performance", so I think this should be changed (*).
I think these are valid concerns, I will send a patch which should
address them, please review it
>>>> * remove _alpm_pkgname_pkg_cmp, which was used with
>>>> use _alpm_pkg_find + alpm_list_remove with _alpm_pkg_cmp instead.
>>> Imho this is ugly. First we find it, then we again find it via
>> Yeah, it's not ideal either. But neither are dummy pkg or fake
>> asymmetric cmp functions. I just preferred it like that.
>> Imo the real problem here is that our data structures suck and are
>> inefficient. Linear search ftw.
> (*) is also holds here. However, performance is not an issue here, just simply
> we do an "unneeded" task here, which I find ugly. alpm_list_find compare
> functions could be easily killed, but list_remove is quite a complicated
> function, thus "reimplementing" won't work. I think in this case keeping
> pkgpkgnamecmp was better, even if it was ugly.
> An alternative idea: alpm_list_find_node, which returns with an alpm_list_t
> node, not the ->data; and reimplement alpm_list_remove_node, but with two param
> list (head) and node. This information is enough to cleanly remove that node,
> and can be cut from the current list_remove (by splitting that function).
Since performance doesn't apply here (this code is just used by -Ru, and
should not be run an insane amount of times), then I prefer clean code
here. Anyway, I think we have many other more important things to worry
pacman-dev mailing list