Still left to do ================ - consider reducing the size of the lists of conflicts, e.g., by making them unique via a red-black tree - handle Provides: - sort prerequisites such that they can be installed in the specified order - consider Architecture: Update: we parse and record it now but don't use it yet. - what to do with explicit and implicit replacement ? - if we can't resolve the prerequisites, give at least a hint of what one can do to improve the situation - check database for internal consistency Update: added detection of cyclic dependencies (in progress) Update: added test for QPKG_ADDING cleanup bug - implement keyword search - consider also supporting the similar but not identical (parent ?) format of /var/lib/dpkg/status and /var/lib/apt/lists/*Packages Done ==== - optimize the search trees. Right now, we have 81812 calls to make_id for 14601 packages, resulting in 7420560 calls to comp_id. There can be at most 2 new identifiers per package (package name and version), so a perfectly balanced tree should have a depth of no more than 14. If we assume that each call to make_id searches to the bottom, we'd get 1145368 calls to comp_id, about 15% of the current number. So the tree is clearly degenerated. Update: after switching to red-black trees, we get only 1497604 calls to comp_id. This is 130% of the "good case" estimate above. Insertion of a new node is currently done with two lookups, so we'll get rid of some more lookups after further optimization. Update: after merging the two lookups per new node into one, we're at 1172642 calls to comp_id, or 102% of the predicted "good case". - if there are multiple choices, try to prefer more recent versions - check whether introducing a new package would cause a conflict Update: conflicts among the packages considered for installation are now checked. - compile the list of conflicts of installed packages