darcs-2.8.4: a distributed, interactive, smart revision control system

Safe Haskell | None

Darcs.Patch.V2.Real

Synopsis

- data RealPatch prim x y where
  - Duplicate :: Non (RealPatch prim) x -> RealPatch prim x x
  - Etacilpud :: Non (RealPatch prim) x -> RealPatch prim x x
  - Normal :: prim x y -> RealPatch prim x y
  - Conflictor :: [Non (RealPatch prim) x] -> FL prim x y -> Non (RealPatch prim) x -> RealPatch prim y x
  - InvConflictor :: [Non (RealPatch prim) x] -> FL prim x y -> Non (RealPatch prim) x -> RealPatch prim x y
- prim2real :: prim x y -> RealPatch prim x y
- isConsistent :: PrimPatch prim => RealPatch prim x y -> Maybe Doc
- isForward :: PrimPatch prim => RealPatch prim s y -> Maybe Doc
- isDuplicate :: RealPatch prim s y -> Bool
- mergeUnravelled :: PrimPatch prim => [Sealed (FL prim x)] -> Maybe (FlippedSeal (RealPatch prim) x)

# Documentation

data RealPatch prim x y 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) x -> RealPatch prim x x |
Etacilpud :: Non (RealPatch prim) x -> RealPatch prim x x |
Normal :: prim x y -> RealPatch prim x y |
Conflictor :: [Non (RealPatch prim) x] -> FL prim x y -> Non (RealPatch prim) x -> RealPatch prim y x |
InvConflictor :: [Non (RealPatch prim) x] -> FL prim x y -> Non (RealPatch prim) x -> RealPatch prim x y |

Instances

PrimPatch prim => Show2 (RealPatch prim) |
PatchListFormat (RealPatch prim) |
PrimPatch prim => MyEq (RealPatch prim) |
PrimPatch prim => Commute (RealPatch prim) |
Invert prim => Invert (RealPatch prim) |
PrimPatch prim => Merge (RealPatch prim) |
PatchInspect prim => PatchInspect (RealPatch prim) |
PrimPatch prim => ReadPatch (RealPatch prim) |
PrimPatch prim => Apply (RealPatch prim) |
PrimPatch prim => RepairToFL (RealPatch prim) |
PrimPatch prim => Check (RealPatch prim) |
PrimPatch prim => ShowPatch (RealPatch prim) |
PrimPatch prim => ShowPatchBasic (RealPatch prim) |
PrimPatch prim => Patchy (RealPatch prim) |
IsHunk prim => IsHunk (RealPatch prim) |
ToFromPrim (RealPatch prim) |
FromPrim (RealPatch prim) |
PrimPatch prim => PrimPatchBase (RealPatch prim) |
PrimPatch prim => Effect (RealPatch prim) |
PrimPatch prim => CommuteNoConflicts (RealPatch prim) |
PrimPatch prim => Conflict (RealPatch prim) |
PrimPatch prim => RepoPatch (RealPatch prim) |
PrimPatch prim => Nonable (RealPatch prim) |
PrimPatch prim => Show (RealPatch prim x y) |

prim2real :: prim x y -> RealPatch prim x y

isConsistent :: PrimPatch prim => RealPatch prim x y -> Maybe Doc

This is used for unit-testing and for internal sanity checks

isForward :: PrimPatch prim => RealPatch prim s y -> Maybe Doc

`isForward` `p` is `True` if `p` is either an `InvConflictor` or `Etacilpud`.

isDuplicate :: RealPatch prim s y -> Bool

`isDuplicate` `p` is `True` if `p` is either a `Duplicate` or `Etacilpud` patch.

mergeUnravelled :: PrimPatch prim => [Sealed (FL prim x)] -> Maybe (FlippedSeal (RealPatch prim) x)

`mergeUnravelled` is used when converting from Darcs V1 patches (Mergers) to Darcs V2 patches (Conflictors).