I will NOT screen this one immediately. PLEASE take a look at the semantic
changes (described in the patch comment as well as in the haddocs) and tell
me whether you think they are agreeable.
I originally pulled this one from my development branch after fixing
permutationsRL which in turn uncovered bugs (now) detected by
propResolutionsOrderIndependent, in both the old and the new version. Since
the new version is much simpler, I fixed that first, and since it plays much
better with adding patch names to the markup, I decided not to bother with
the bugs in the old version and instead to send the new (fixed) version as a
single patch.
The added regression test is a tricky (but not too verbose) example of what
can go wrong, exactly as found by quickcheck. I also added detailed
discussion of the subtleties in the docs for findComponents. Which, BTW, now
take up more space than the code, once again demonstrating how concise and
expressive Haskell is. It is the only practical and efficient language that
allows me to consequently follow the DRY principle.
1 patch for repository http://darcs.net/screened:
patch 24b0cab8841e962e322cf304c93ebad1a8928227
Author: Ben Franksen <ben.franksen@online.de>
Date: Fri Dec 30 09:38:40 CET 2022
* change (and also fix) conflict markup for RepoPatchV3
We no longer calculate the maximal non-conflicting sets and merge them.
Instead, the markup now displays each of the conflicting alternatives
directly. These alternatives now also include those that others depend on.
While the previous conflict markup method is (I believe) theoretically valid
(and a beautiful application of graph theory), in the end it is less useful
than explicitly listing all conflicting alternatives exactly as they arise
in the project's history. This is especially true when the markup also
contains the corresponding prim patch IDs (which is now implemented but not
yet sent).
On the implementation side, the conflict graph is no longer constructed
explicitly. Instead, we take advantage of the information contained in the
conflictors in order to construct the components of the conflict graph (i.e.
the transitive conflicts) directly after commuting a conflicted patch to the
head. This simplifies the algorithm substantially.
Raising the lower bound on the containers dependency has been done so we can
use 'Data.Set.disjoint'.
Attachments
|