Fork of the main cabal repo — http://www.haskell.org/cabal/
Suggested by Duncan.
In the build phase, we allow the same flag choice to occur multiple times. This makes it easy to handle the situation where the same flag occurs several times in the condition tree, and hence new goals and dependencies might be introduced depending on the choice.
Previously, we have ensured during validation that repeated flag choices are consistent. This behaviour has now been replaced by the new approach to collapse repeated flag choice nodes completely during validation.
The advantage is that the tree is less deep, and that the trace output looks less strange. Repeated flag choices are no longer seen, which I think avoids confusion.
This is all covered by the function that enforces package constraints, as global flag constraints are translated into package-specific flag constraints outside of the solver.
This option flag overrides the new destructive reinstalls check, allowing forcing overwriting already installed library versions. The patch also documents this flag and other softer options in the output of printPlanMessages, which is renamed to checkPrintPlan.
Some refactoring in Distribution.Client.Install:
Currently, Cabal will stop if destructive reinstalls are encountered. While this should become default behaviour, there has to be a flag that overrides it.