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

Safe HaskellNone




data RepoPatchV2 prim wX wY where

RepoPatchV2 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 (RepoPatchV2 prim) wX -> RepoPatchV2 prim wX wX 
Etacilpud :: Non (RepoPatchV2 prim) wX -> RepoPatchV2 prim wX wX 
Normal :: prim wX wY -> RepoPatchV2 prim wX wY 
Conflictor :: [Non (RepoPatchV2 prim) wX] -> FL prim wX wY -> Non (RepoPatchV2 prim) wX -> RepoPatchV2 prim wY wX 
InvConflictor :: [Non (RepoPatchV2 prim) wX] -> FL prim wX wY -> Non (RepoPatchV2 prim) wX -> RepoPatchV2 prim wX wY 


PatchListFormat (RepoPatchV2 prim) 
PrimPatch prim => MyEq (RepoPatchV2 prim) 
Show2 prim => Show2 (RepoPatchV2 prim) 
PatchInspect prim => PatchInspect (RepoPatchV2 prim) 
PatchDebug prim => PatchDebug (RepoPatchV2 prim) 
PrimPatch prim => ReadPatch (RepoPatchV2 prim) 
Invert prim => Invert (RepoPatchV2 prim) 
PrimPatch prim => Commute (RepoPatchV2 prim) 
PrimPatch prim => Merge (RepoPatchV2 prim) 
PrimPatch prim => Apply (RepoPatchV2 prim) 
PrimPatch prim => RepairToFL (RepoPatchV2 prim) 
PrimPatch prim => Check (RepoPatchV2 prim) 
PrimPatch prim => ShowPatch (RepoPatchV2 prim) 
PrimPatch prim => ShowPatchBasic (RepoPatchV2 prim) 
PrimPatch prim => Patchy (RepoPatchV2 prim) 
PrimPatch prim => Matchable (RepoPatchV2 prim) 
IsHunk prim => IsHunk (RepoPatchV2 prim) 
ToFromPrim (RepoPatchV2 prim) 
FromPrim (RepoPatchV2 prim) 
PrimPatch prim => PrimPatchBase (RepoPatchV2 prim) 
PrimPatch prim => Effect (RepoPatchV2 prim) 
PrimPatch prim => CommuteNoConflicts (RepoPatchV2 prim) 
PrimPatch prim => Conflict (RepoPatchV2 prim) 
PrimPatch prim => RepoPatch (RepoPatchV2 prim) 
PrimPatch prim => Nonable (RepoPatchV2 prim) 
Show2 prim => Show1 (RepoPatchV2 prim wX) 
Show2 prim => Show (RepoPatchV2 prim wX wY) 

prim2repopatchV2 :: prim wX wY -> RepoPatchV2 prim wX wY

isConsistent :: PrimPatch prim => RepoPatchV2 prim wX wY -> Maybe Doc

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

isForward :: PrimPatch prim => RepoPatchV2 prim wS wY -> Maybe Doc

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

isDuplicate :: RepoPatchV2 prim wS wY -> Bool

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

mergeUnravelled :: PrimPatch prim => [Sealed (FL prim wX)] -> Maybe (FlippedSeal (RepoPatchV2 prim) wX)

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