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

Safe HaskellSafe-Infered




data RealPatch prim x y whereSource

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)


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 


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 ySource

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

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

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

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

isDuplicate :: RealPatch prim s y -> BoolSource

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)Source

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