- keep history of installed packages/journal of package transaction, so we can roll back to yesterday, or see what got installed in the latest yum update. - signed pkgs - gzip repository of look-aside pkg xml files somehow? - transactions, proper recovery, make sure we don't poop our package database (no more rm /var/lib/rpm/__cache*). - diff from one package set to another answers: "what changed in rawhide between since yesterday?" - rewrite qsort and bsearch that doesn't require global context var and can output a map describing the permutaion. - use hash table for package and property lists so we only store unique lists (like for string pool). - use existing, running system as repo; eg razor update razor://other-box.local evince to pull eg the latest evince and dependencies from another box. We should be able to regenerate a rzr pkg from the system so we can reuse the signature from the originating repo. - Ok, maybe the fastest package set merge method in the end is to use the razor_importer, but use a hash table for the properties. This way we can assign them unique IDs immediately (like tokenizing strings). - test suite should be easy, just keep .repo files around and test different type of upgrades that way (obsoletes, conflicts, file conflicts, file/dir problems etc). Or maybe just keep a simple file format ad use a custom importer to create the .repo files. - pipelined download and install; download is network bound, install is disk bound. Start installing once we have self-contained set of packages. Install in reverse topo-sort order. Interruptible installation; stops at nearest checkpoint. - make packages pointers be either an index into the package pool or a direct link to a package when there is only one package. set a high bit to indicate which it is. similar for properties. - split out hash table code from importer, make the merger use just the hash table.