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

Darcs.Patch.Real

Description

Conflictor patches

Synopsis

- data RealPatch where
  - Duplicate :: Non RealPatch -> RealPatch
  - Etacilpud :: Non RealPatch -> RealPatch
  - Normal :: Prim -> RealPatch
  - Conflictor :: [Non RealPatch] -> FL Prim -> Non RealPatch -> RealPatch
  - InvConflictor :: [Non RealPatch] -> FL Prim -> Non RealPatch -> RealPatch
- prim2real :: Prim -> RealPatch
- isConsistent :: RealPatch -> Maybe Doc
- isForward :: RealPatch -> Maybe Doc
- isDuplicate :: RealPatch -> Bool
- pullCommon :: Patchy p => FL p -> FL p -> Common p
- mergeUnravelled :: [Sealed (FL Prim)] -> Maybe (FlippedSeal RealPatch)

# Documentation

data RealPatch where

`Duplicate x`: This patch has no effect since `x` is already present in the repository

    Etacilpud x: invert (Duplicate x)

`Normal prim`: A primitive patch

`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 current patch

`ix` and `x` are stored as `Non` objects, which include any necessary context to uniquely define the patch that is referred to.

`InvConflictor ix xx x`: like `invert (Conflictor ix xx x)`

Constructors

Duplicate :: Non RealPatch -> RealPatch |
Etacilpud :: Non RealPatch -> RealPatch |
Normal :: Prim -> RealPatch |
Conflictor :: [Non RealPatch] -> FL Prim -> Non RealPatch -> RealPatch |
InvConflictor :: [Non RealPatch] -> FL Prim -> Non RealPatch -> RealPatch |

Instances

Show RealPatch |
Show2 RealPatch |
MyEq RealPatch |
Invert RealPatch |
ReadPatch RealPatch |
ShowPatch RealPatch |
Commute RealPatch |
Apply RealPatch |
Patchy RealPatch |
Effect RealPatch |
Conflict RealPatch |
ToFromPrim RealPatch |
FromPrim RealPatch |
Nonable RealPatch |
RepoPatchBase RealPatch |

prim2real :: Prim -> RealPatch

isConsistent :: RealPatch -> Maybe Doc

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

isForward :: RealPatch -> Maybe Doc

This is only used for unit testing

isDuplicate :: RealPatch -> Bool

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

pullCommon :: Patchy p => FL p -> FL p -> Common p

`pullCommon` `xs ys` returns the set of patches that can be commuted out of both `xs` and `ys` along with the remnants of both lists

mergeUnravelled :: [Sealed (FL Prim)] -> Maybe (FlippedSeal RealPatch)