There will be a new release of Freshen, the package management soon (meaning, in the next few weeks). The old code was starting to run into its limitations, and especially with the new Compile functionality planned for the future it was time to start afresh. It was showing a lot of the heritage of the original Perl version, that you actually piped the output of find into – there was a lot of guesswork built in to deal with the assumptions made then.
Given that I was going to have to re-implement things anyway, it made sense to write it in Python and use the same versioning and dependencies code used by the other scripts. I mentioned that during the 014 postmortem on IRC, and with some help from AndrĂ© in explaining the scripts I have an early working version in CVS now. It depends on some functionality introduced in CVS Scripts to have any reasonable performance, but you don’t have to be runningt them on your system – just add a symlink Freshen/lib/python2.3/CheckDependencies.py -> Scripts/bin/CheckDependencies to have the new code used. Try it out – bug reports are welcome.
There are some architectural changes in the new codebase (aside from the obvious). Most importantly, it no longer produces a graph of programs on your system. This has a number of implications, perhaps most notably that there will no longer be topological sort failures when the graph is not acyclic. The list is instead resolved program at a time and joined. This means that running multiple (distinct) queries on the same system state won’t have the same speed it used to, but examining short lists should complete much faster.
There is a cache of generated lists in ~/.Settings/freshen_cache, which makes consecutive identical queries nearly instant (especially useful in the list, review, and upgrade case). It only lasts ten minutes, but you can force the use (-c) or non-use (-C) of that cache on the command line. The cache varies by generation mode and the list of examined programs. For the moment, there are two modes: --thorough, and the default; the difference being that the default does not include revision-only updates. There may be more in future.
There will also be other features in the future; I plan to have rough feature-compatibility with the 2.x series, at least in as far as they’re still useful. Another more technical point is switching to a generator-based updates list, as soon as I can figure out how to cache that well and a good progress indicator; it should feel a bit speedier that way.
Again, you’re encouraged to try it out – check it out from CVS with the instructions on Savannah, and run it with bin/Freshen from the tools/Freshen directory (making the symlink mentioned above if necessary). It is usable, but I don’t suggest doing a whole system upgrade with it just yet – keep an eye on it while it works.
More posts to come as development proceeds.