* || dependencies are resolved incorrectly (not as in portage) -- Happens if there are specific versions involved, such as in many of the X libraries. Which branch is taken only depends on the availability of the package in exi, not of the specific version. The idea is to prefer the upgrade of an already installed package over the installation of a new package, which is only fair, I think. However, we should still prefer using an installed exact version over an upgrade (at least if -u has not been selected). * resolution of RDEPEND cycles -- I'm no longer sure if something must be done in cycle resolution. The cycle errors we currently get seem to be the result of blockers, usually. Blockers can cause backtracking, and sometimes a cycle is reported as an error although a blocker really is the cause. I need to investigate how this can be fixed in such a way that the code gets cleaner rather than more convoluted. [isn't this done already?] * nested callbacks; generate stack traces from callbacks rather than graph -- Sometimes (in blockers and in cycle resolution), we cut the graph structure and hang in a node directly underneath Top. Then, if an error occurs, the stack trace from the graph doesn't contain the full history. Using the callbacks for stack traces fixes this problem, but it doesn't fix the related problem that --tree output is unhelpful. * || handling doesn't respect --unmask properly -- ||'s are simplified before resolution. Entries which don't contain any unmasked packages are removed. This should not be done when --unmask is set (easy, I think). * global options (--debug, --verbose, --nocolor) -- In the Interface code, make room for global options that are common to all commands. Furthermore, --debug and --verbose should be made different options, with the current --verbose becoming --debug, and the new --verbose becoming more like emerge's --verbose. * implement --backtrack properly -- After the first error, we don't print progress reports anymore, but continue to look for a solution. I want to change this. By default, the first error should be printed, and exi should be terminated. With --backtrack as an option, we shouldn't stop on the error, but also continue to output a progress indicator. * add support for binary packages -- This is boring work, because it requires implementing the XPAK-package format for binary packages. * add support for parsing and using metadata -- This will allow to give the "total size of downloads" as portage/emerge does, which would be really useful. * add unit tests * add support for a test portage tree -- The idea is to have, as part of the distribution, a small portage tree with fixed package descriptions that can be used to reproduce all sorts of problems. At the same time, we need a way of making the installed package db and ideally even the cache have configurable locations, so that we can test completely in-place for dependency-resolution problems.