Week 2: CacheSets and the CLPAU

Again, a week is over. On the mail front I continued to talk at cross-purposes with ADA but at some point you need to give up, I guess. I simply don't understand the problem any longer (or did I ever understand it?) - mail seems to be not for discussion but for accumulating (new) work. 😉

Size Mismatches were a good candidate to dig deeper into the dark realms of APT: The problem was as described in the mail that integers were happily stored in a ranch of types between signed int and double. As every good Schroedinbug this becomes only a problem then you look at the code (or in cases you have an at least 2GB big deb-package). Apply some 2010-sanity by using (un)signed long long (which was not available at the time this code was written) instead of double and Co. and the problem disappeared - with the bonus that in theory apt should now be even a bit faster on my phone (Openmoko Freerunner) as it has no float-point co-processor…

But not all work which flows in by mail can be done immediately unfortunately - but stuff like Valid-Until handling is on the todo list for Week 3 -, others like Stefanos Mancoosi stuff is noted for later and sometimes you even need to do stuff which is already on your todo list (because it comes in as a mail last week). And some of these things are listed in the title: PackageSet gets a little friend: VersionSet - guess what it does and are now called CacheSets. 🙂 Both are evolving and form the CommandLine-Parsing-Astraction-Unit. This CLPAU works already great in all commands of apt-cache, so example commands like "apt-cache show apt-.*:amd64/squeeze" work as expected. 😄 But I am sure you will find more useful use cases for it, as at least the "apt-cache show package/release" or "apt-cache show package=version" thing were already requested a few times (strange enough that I found so far only one bugreport about it). Week 3 is registered for apt-get conversion to the CacheSets - a bit more abstraction need to be implemented for this and I also need to find a good and easy way to change behavior in error cases (e.g. instead of error on virtual package, show a list of providing packages a user can choose from).

Still, cachesets is not the only thing I worked on: pkgCacheFile is the other thing I changed to get it a bit more generic (so apt-cache can use this one too) and to have a way to be able to lazyload stuff in the CacheSets if needed. Therefore all in all a good week. 🙂

And as every status report need to include MultiArch stuff: As you can see in the lovely commandline example above: an architecture modifier is parsed, accepted and understood. Yea-ha! Also, the move from some self-made cachegeneration to pkgCacheFile in apt-cache enabled me to easily load the DepCache in the policy if I need it (-o APT::Cache::Policy::DepCache=1) which is quite handy to see what the MultiArchKiller does in regards to the package status. This even already showed a (small) bug for the Week 3 agenda, installed arch:all packages get the wrong (=different) candidates which will require some good logic I guess… we will see it in the next week report. 🙂