Safe Haskell | Safe-Infered |
---|
Darcs.Patch.V2.Real
- data RealPatch prim where
- Duplicate :: Non (RealPatch prim) -> RealPatch prim
- Etacilpud :: Non (RealPatch prim) -> RealPatch prim
- Normal :: prim -> RealPatch prim
- Conflictor :: [Non (RealPatch prim)] -> FL prim -> Non (RealPatch prim) -> RealPatch prim
- InvConflictor :: [Non (RealPatch prim)] -> FL prim -> Non (RealPatch prim) -> RealPatch prim
- prim2real :: prim -> RealPatch prim
- isConsistent :: PrimPatch prim => RealPatch prim -> Maybe Doc
- isForward :: PrimPatch prim => RealPatch prim -> Maybe Doc
- isDuplicate :: RealPatch prim -> Bool
- mergeUnravelled :: PrimPatch prim => [Sealed (FL prim)] -> Maybe (FlippedSeal (RealPatch prim))
Documentation
data RealPatch prim where
RealPatch
is used to represents prim patches that are duplicates of, or
conflict with, another prim patch in the repository.
Normal prim
: A primitive patch
Duplicate x
: This patch has no effect since x
is already present in the
repository.
Etacilpud x: invert (Duplicate x)
Conflictor ix xx x
:
ix
is the set of patches:
* that conflict with x
and also conflict with another patch in the
repository.
* that conflict with a patch that conflict with x
xx
is the sequence of patches that conflict *only* with x
x
is the original, conflicting patch.
ix
and x
are stored as Non
objects, which include any necessary
context to uniquely define the patch that is referred to.
The intuition is that a Conflictor should have the effect of inverting any
patches that x
conflicts with, that haven't already been undone by another
Conflictor in the repository.
Therefore, the effect of a Conflictor is invert xx
.
InvConflictor ix xx x
: like invert (Conflictor ix xx x)
Constructors
Duplicate :: Non (RealPatch prim) -> RealPatch prim | |
Etacilpud :: Non (RealPatch prim) -> RealPatch prim | |
Normal :: prim -> RealPatch prim | |
Conflictor :: [Non (RealPatch prim)] -> FL prim -> Non (RealPatch prim) -> RealPatch prim | |
InvConflictor :: [Non (RealPatch prim)] -> FL prim -> Non (RealPatch prim) -> RealPatch prim |
Instances
isConsistent :: PrimPatch prim => RealPatch prim -> Maybe Doc
This is used for unit-testing and for internal sanity checks
isForward :: PrimPatch prim => RealPatch prim -> Maybe Doc
isForward
p
is True
if p
is either an InvConflictor
or
Etacilpud
.
isDuplicate :: RealPatch prim -> Bool
isDuplicate
p
is True
if p
is either a Duplicate
or Etacilpud
patch.
mergeUnravelled :: PrimPatch prim => [Sealed (FL prim)] -> Maybe (FlippedSeal (RealPatch prim))
mergeUnravelled
is used when converting from Darcs V1 patches (Mergers)
to Darcs V2 patches (Conflictors).