Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Darcs.Patch
Contents
Synopsis
- data RepoType
- class IsRepoType (rt :: RepoType)
- class PrimPatch (PrimOf p) => PrimPatchBase p where
- type PrimOf (p :: * -> * -> *) :: * -> * -> *
- data Named p wX wY
- type family ApplyState p :: (* -> *) -> *
- rmfile :: PrimConstruct prim => AnchoredPath -> prim wX wY
- addfile :: PrimConstruct prim => AnchoredPath -> prim wX wY
- rmdir :: PrimConstruct prim => AnchoredPath -> prim wX wY
- adddir :: PrimConstruct prim => AnchoredPath -> prim wX wY
- move :: PrimConstruct prim => AnchoredPath -> AnchoredPath -> prim wX wY
- hunk :: PrimConstruct prim => AnchoredPath -> Int -> [ByteString] -> [ByteString] -> prim wX wY
- tokreplace :: PrimConstruct prim => AnchoredPath -> String -> String -> String -> prim wX wY
- anonymous :: FromPrim p => FL (PrimOf p) wX wY -> IO (Named p wX wY)
- binary :: PrimConstruct prim => AnchoredPath -> ByteString -> ByteString -> prim wX wY
- description :: ShowPatch p => p wX wY -> Doc
- showContextPatch :: (ShowContextPatch p, ApplyMonad (ApplyState p) m) => ShowPatchFor -> p wX wY -> m Doc
- data ShowPatchFor
- showPatch :: ShowPatchBasic p => ShowPatchFor -> p wX wY -> Doc
- displayPatch :: ShowPatchBasic p => p wX wY -> Doc
- content :: ShowPatch p => p wX wY -> Doc
- infopatch :: forall p wX wY. FromPrim p => PatchInfo -> FL (PrimOf p) wX wY -> Named p wX wY
- changepref :: PrimConstruct prim => String -> String -> String -> prim wX wY
- thing :: ShowPatch p => p wX wY -> String
- things :: ShowPatch p => p wX wY -> String
- primIsAddfile :: PrimClassify prim => prim wX wY -> Bool
- primIsHunk :: PrimClassify prim => prim wX wY -> Bool
- primIsSetpref :: PrimClassify prim => prim wX wY -> Bool
- merge :: Merge p => (p :\/: p) wX wY -> (p :/\: p) wX wY
- commute :: Commute p => (p :> p) wX wY -> Maybe ((p :> p) wX wY)
- listTouchedFiles :: PatchInspect p => p wX wY -> [AnchoredPath]
- hunkMatches :: PatchInspect p => (ByteString -> Bool) -> p wX wY -> Bool
- forceTokReplace :: String -> ByteString -> ByteString -> ByteString -> ByteString
- type PrimPatch prim = (Apply prim, CleanMerge prim, Commute prim, Invert prim, Eq2 prim, IsHunk prim, PatchInspect prim, RepairToFL prim, Show2 prim, PrimConstruct prim, PrimCanonize prim, PrimClassify prim, PrimDetails prim, PrimApply prim, PrimSift prim, PrimMangleUnravelled prim, ReadPatch prim, ShowPatch prim, ShowContextPatch prim, PatchListFormat prim)
- resolveConflicts :: Conflict p => RL p wO wX -> RL p wX wY -> [ConflictDetails (PrimOf p) wY]
- class Effect p
- effect :: Effect p => p wX wY -> FL (PrimOf p) wX wY
- primIsBinary :: PrimClassify prim => prim wX wY -> Bool
- primIsAdddir :: PrimClassify prim => prim wX wY -> Bool
- invert :: Invert p => p wX wY -> p wY wX
- invertFL :: Invert p => FL p wX wY -> RL p wY wX
- invertRL :: Invert p => RL p wX wY -> FL p wY wX
- dropInverses :: (Invert p, Eq2 p) => FL p wX wY -> Maybe (FL p wX wY)
- commuteFL :: Commute p => (p :> FL p) wX wY -> Maybe ((FL p :> p) wX wY)
- commuteRL :: Commute p => (RL p :> p) wX wY -> Maybe ((p :> RL p) wX wY)
- readPatch :: ReadPatch p => ByteString -> Either String (Sealed (p wX))
- readPatchPartial :: ReadPatch p => ByteString -> Either String (Sealed (p wX), ByteString)
- canonize :: PrimCanonize prim => DiffAlgorithm -> prim wX wY -> FL prim wX wY
- sortCoalesceFL :: PrimCanonize prim => FL prim wX wY -> FL prim wX wY
- tryToShrink :: PrimCanonize prim => FL prim wX wY -> FL prim wX wY
- patchname :: Named p wX wY -> String
- patchcontents :: Named p wX wY -> FL p wX wY
- apply :: (Apply p, ApplyMonad (ApplyState p) m) => p wX wY -> m ()
- applyToTree :: (Apply p, Monad m, ApplyState p ~ Tree) => p wX wY -> Tree m -> m (Tree m)
- maybeApplyToTree :: (Apply p, ApplyState p ~ Tree) => p wX wY -> Tree IO -> IO (Maybe (Tree IO))
- effectOnPaths :: (Apply p, ApplyState p ~ Tree) => p wX wY -> [AnchoredPath] -> [AnchoredPath]
- patch2patchinfo :: Named p wX wY -> PatchInfo
- summary :: ShowPatch p => p wX wY -> Doc
- summaryFL :: ShowPatch p => FL p wX wY -> Doc
- plainSummary :: (Summary e, PrimDetails (PrimOf e)) => e wX wY -> Doc
- xmlSummary :: (Summary p, PrimDetails (PrimOf p)) => p wX wY -> Doc
- plainSummaryPrims :: PrimDetails prim => Bool -> FL prim wX wY -> Doc
- adddeps :: Named p wX wY -> [PatchInfo] -> Named p wX wY
- getdeps :: HasDeps p => p wX wY -> [PatchInfo]
- listConflictedFiles :: (Summary p, PatchInspect (PrimOf p)) => p wX wY -> [AnchoredPath]
- isInconsistent :: Check p => p wX wY -> Maybe Doc
- type RepoPatch p = (AnnotateRP p, Apply p, ApplyState p ~ ApplyState (PrimOf p), Check p, Commute p, Conflict p, Effect p, Eq2 p, FromPrim p, IsHunk p, IsHunk (PrimOf p), Merge p, PatchInspect p, PatchListFormat p, PrimPatchBase p, ReadPatch p, RepairToFL p, ShowContextPatch p, ShowPatch p, Summary p, ToPrim p, Unwind p)
Documentation
This type is intended to be used as a phantom type via the DataKinds
extension. It tracks different types of repositories, e.g. to
indicate when a rebase is in progress.
class IsRepoType (rt :: RepoType) #
Minimal complete definition
Instances
IsRebaseType rebaseType => IsRepoType ('RepoType rebaseType) # | |
Defined in Darcs.Patch.RepoType Methods singletonRepoType :: SRepoType ('RepoType rebaseType) # |
class PrimPatch (PrimOf p) => PrimPatchBase p #
Instances
The Named
type adds a patch info about a patch, that is a name.
NamedP info deps p
represents patch p
with name
info
. deps
is a list of dependencies added at the named patch
level, compared with the unnamed level (ie, dependencies added with
darcs record --ask-deps
).
Instances
Apply p => Apply (Named p) # | |
Defined in Darcs.Patch.Named Associated Types type ApplyState (Named p) :: (Type -> Type) -> Type # Methods apply :: ApplyMonad (ApplyState (Named p)) m => Named p wX wY -> m () # unapply :: ApplyMonad (ApplyState (Named p)) m => Named p wX wY -> m () # | |
Commute p => Commute (Named p) # | |
(Commute p, Conflict p) => Conflict (Named p) # | This instance takes care of handling the interaction between conflict
resolution and explicit dependencies. By definition, a conflict counts as
resolved if another patch depends on it. This principle extends to explicit
dependencies between This means we count any patch inside a |
Defined in Darcs.Patch.Named Methods resolveConflicts :: RL (Named p) wO wX -> RL (Named p) wX wY -> [ConflictDetails (PrimOf (Named p)) wY] # | |
PatchDebug p => PatchDebug (Named p) # | |
Defined in Darcs.Patch.Named Methods patchDebugDummy :: Named p wX wY -> () # | |
Effect p => Effect (Named p) # | |
IsHunk (Named p) # | |
PatchListFormat (Named p) # | |
Defined in Darcs.Patch.Named Methods patchListFormat :: ListFormat (Named p) # | |
PrimPatchBase p => PrimPatchBase (Named p) # | |
Defined in Darcs.Patch.Named | |
IdEq2 (Named p) # | |
Ident (Named p) # | |
PatchInspect p => PatchInspect (Named p) # | |
Defined in Darcs.Patch.Named Methods listTouchedFiles :: Named p wX wY -> [AnchoredPath] # hunkMatches :: (ByteString -> Bool) -> Named p wX wY -> Bool # | |
CleanMerge p => CleanMerge (Named p) # | |
Defined in Darcs.Patch.Named | |
Merge p => Merge (Named p) # | |
HasDeps (Named p) # | |
Defined in Darcs.Patch.Named | |
(ReadPatch p, PatchListFormat p) => ReadPatch (Named p) # | |
Defined in Darcs.Patch.Named Methods readPatch' :: Parser (Sealed (Named p wX)) # | |
Check p => Check (Named p) # | |
Defined in Darcs.Patch.Named Methods isInconsistent :: Named p wX wY -> Maybe Doc # | |
RepairToFL p => Repair (Named p) # | |
Defined in Darcs.Patch.Named Methods applyAndTryToFix :: ApplyMonad (ApplyState (Named p)) m => Named p wX wY -> m (Maybe (String, Named p wX wY)) # | |
(Apply p, IsHunk p, PatchListFormat p, ShowContextPatch p) => ShowContextPatch (Named p) # | |
Defined in Darcs.Patch.Named Methods showContextPatch :: ApplyMonad (ApplyState (Named p)) m => ShowPatchFor -> Named p wX wY -> m Doc # | |
(Summary p, PatchListFormat p, PrimPatchBase p, ShowPatch p) => ShowPatch (Named p) # | |
(PatchListFormat p, ShowPatchBasic p) => ShowPatchBasic (Named p) # | |
Defined in Darcs.Patch.Named Methods showPatch :: ShowPatchFor -> Named p wX wY -> Doc # | |
Summary p => Summary (Named p) # | |
Defined in Darcs.Patch.Named Methods conflictedEffect :: Named p wX wY -> [IsConflictedPrim (PrimOf (Named p))] # | |
(PrimPatchBase p, Unwind p) => Unwind (Named p) # | |
Defined in Darcs.Patch.Named | |
Eq2 (Named p) # | |
Show2 p => Show2 (Named p) # | |
Defined in Darcs.Patch.Named | |
(Commute p, Conflict p) => Conflict (PatchInfoAnd rt p) # | |
Defined in Darcs.Patch.PatchInfoAnd Methods resolveConflicts :: RL (PatchInfoAnd rt p) wO wX -> RL (PatchInfoAnd rt p) wX wY -> [ConflictDetails (PrimOf (PatchInfoAnd rt p)) wY] # | |
RepairToFL p => Repair (PatchInfoAnd rt p) # | |
Defined in Darcs.Patch.PatchInfoAnd Methods applyAndTryToFix :: ApplyMonad (ApplyState (PatchInfoAnd rt p)) m => PatchInfoAnd rt p wX wY -> m (Maybe (String, PatchInfoAnd rt p wX wY)) # | |
Show2 p => Show1 (Named p wX) # | |
Show2 p => Show2 (PatchInfoAnd rt p) # | |
Defined in Darcs.Patch.PatchInfoAnd Methods showDict2 :: ShowDict (PatchInfoAnd rt p wX wY) # | |
Show2 p => Show (Named p wX wY) # | |
Show2 p => Show1 (PatchInfoAnd rt p wX) # | |
Defined in Darcs.Patch.PatchInfoAnd Methods showDict1 :: Dict (Show (PatchInfoAnd rt p wX wX0)) # | |
type ApplyState (Named p) # | |
Defined in Darcs.Patch.Named | |
type PrimOf (Named p) # | |
Defined in Darcs.Patch.Named | |
type PatchId (Named p) # | |
Defined in Darcs.Patch.Named |
type family ApplyState p :: (* -> *) -> * #
Instances
rmfile :: PrimConstruct prim => AnchoredPath -> prim wX wY #
addfile :: PrimConstruct prim => AnchoredPath -> prim wX wY #
rmdir :: PrimConstruct prim => AnchoredPath -> prim wX wY #
adddir :: PrimConstruct prim => AnchoredPath -> prim wX wY #
move :: PrimConstruct prim => AnchoredPath -> AnchoredPath -> prim wX wY #
hunk :: PrimConstruct prim => AnchoredPath -> Int -> [ByteString] -> [ByteString] -> prim wX wY #
tokreplace :: PrimConstruct prim => AnchoredPath -> String -> String -> String -> prim wX wY #
binary :: PrimConstruct prim => AnchoredPath -> ByteString -> ByteString -> prim wX wY #
description :: ShowPatch p => p wX wY -> Doc #
showContextPatch :: (ShowContextPatch p, ApplyMonad (ApplyState p) m) => ShowPatchFor -> p wX wY -> m Doc #
showContextPatch is used to add context to a patch, as diff -u does. Thus, it differs from showPatch only for hunks. It is used for instance before putting it into a bundle. As this unified context is not included in patch representation, this requires access to the tree.
data ShowPatchFor #
Constructors
ForDisplay | |
ForStorage |
showPatch :: ShowPatchBasic p => ShowPatchFor -> p wX wY -> Doc #
displayPatch :: ShowPatchBasic p => p wX wY -> Doc #
changepref :: PrimConstruct prim => String -> String -> String -> prim wX wY #
primIsAddfile :: PrimClassify prim => prim wX wY -> Bool #
primIsHunk :: PrimClassify prim => prim wX wY -> Bool #
primIsSetpref :: PrimClassify prim => prim wX wY -> Bool #
listTouchedFiles :: PatchInspect p => p wX wY -> [AnchoredPath] #
hunkMatches :: PatchInspect p => (ByteString -> Bool) -> p wX wY -> Bool #
forceTokReplace :: String -> ByteString -> ByteString -> ByteString -> ByteString #
forceTokReplace tokChars old new input
replaces all occurrences of
the old
token with the new
one, throughout the input
.
type PrimPatch prim = (Apply prim, CleanMerge prim, Commute prim, Invert prim, Eq2 prim, IsHunk prim, PatchInspect prim, RepairToFL prim, Show2 prim, PrimConstruct prim, PrimCanonize prim, PrimClassify prim, PrimDetails prim, PrimApply prim, PrimSift prim, PrimMangleUnravelled prim, ReadPatch prim, ShowPatch prim, ShowContextPatch prim, PatchListFormat prim) #
for PatchTest
resolveConflicts :: Conflict p => RL p wO wX -> RL p wX wY -> [ConflictDetails (PrimOf p) wY] #
The first parameter is a context containing all patches
preceding the ones for which we want to calculate the conflict
resolution, which is the second parameter.
Each element of the result list represents the resolution
of one maximal set of transitively conflicting alternatives,
in other words, a connected subset of the conflict graph.
But the elements themselves must not conflict with each other,
guaranteeing that they can be cleanly merged into a single FL
of prims.
Patches whose concrete effect can be expressed as a list of primitive patches.
A minimal definition would be either of effect
or effectRL
.
Minimal complete definition
Instances
Effect p => Effect (Named p) # | |
Effect p => Effect (WithDroppedDeps p) # | |
Defined in Darcs.Patch.Rebase.Change Methods effect :: WithDroppedDeps p wX wY -> FL (PrimOf (WithDroppedDeps p)) wX wY # | |
PrimPatch prim => Effect (RepoPatchV1 prim) # | |
Defined in Darcs.Patch.V1.Commute Methods effect :: RepoPatchV1 prim wX wY -> FL (PrimOf (RepoPatchV1 prim)) wX wY # | |
PrimPatch prim => Effect (RepoPatchV2 prim) # | |
Defined in Darcs.Patch.V2.RepoPatch Methods effect :: RepoPatchV2 prim wX wY -> FL (PrimOf (RepoPatchV2 prim)) wX wY # | |
Effect p => Effect (FL p) # | |
Effect p => Effect (RL p) # | |
Effect p => Effect (PatchInfoAndG rt p) # | |
Defined in Darcs.Patch.PatchInfoAnd Methods effect :: PatchInfoAndG rt p wX wY -> FL (PrimOf (PatchInfoAndG rt p)) wX wY # | |
Effect (RepoPatchV3 name prim) # | |
Defined in Darcs.Patch.V3.Core Methods effect :: RepoPatchV3 name prim wX wY -> FL (PrimOf (RepoPatchV3 name prim)) wX wY # |
primIsBinary :: PrimClassify prim => prim wX wY -> Bool #
primIsAdddir :: PrimClassify prim => prim wX wY -> Bool #
dropInverses :: (Invert p, Eq2 p) => FL p wX wY -> Maybe (FL p wX wY) #
Delete the first subsequence of patches that is followed by
an inverse subsequence, if one exists. If not return Nothing
.
commuteFL :: Commute p => (p :> FL p) wX wY -> Maybe ((FL p :> p) wX wY) #
commuteFL
commutes a single element past a FL.
commuteRL :: Commute p => (RL p :> p) wX wY -> Maybe ((p :> RL p) wX wY) #
commuteRL
commutes a RL past a single element.
readPatchPartial :: ReadPatch p => ByteString -> Either String (Sealed (p wX), ByteString) #
canonize :: PrimCanonize prim => DiffAlgorithm -> prim wX wY -> FL prim wX wY #
It can sometimes be handy to have a canonical representation of a given
patch. We achieve this by defining a canonical form for each patch type,
and a function canonize
which takes a patch and puts it into
canonical form. This routine is used by the diff function to create an
optimal patch (based on an LCS algorithm) from a simple hunk describing the
old and new version of a file.
sortCoalesceFL :: PrimCanonize prim => FL prim wX wY -> FL prim wX wY #
sortCoalesceFL
ps
coalesces as many patches in ps
as
possible, sorting the results in some standard order.
tryToShrink :: PrimCanonize prim => FL prim wX wY -> FL prim wX wY #
tryToShrink ps
simplifies ps
by getting rid of self-cancellations
or coalescing patches
Question (Eric Kow): what properties should this have? For example, the prim1 implementation only gets rid of the first self-cancellation it finds (as far as I can tell). Is that OK? Can we try harder?
patchcontents :: Named p wX wY -> FL p wX wY #
apply :: (Apply p, ApplyMonad (ApplyState p) m) => p wX wY -> m () #
applyToTree :: (Apply p, Monad m, ApplyState p ~ Tree) => p wX wY -> Tree m -> m (Tree m) #
maybeApplyToTree :: (Apply p, ApplyState p ~ Tree) => p wX wY -> Tree IO -> IO (Maybe (Tree IO)) #
Attempts to apply a given patch to a Tree. If the apply fails, we return Nothing, otherwise we return the updated Tree.
effectOnPaths :: (Apply p, ApplyState p ~ Tree) => p wX wY -> [AnchoredPath] -> [AnchoredPath] #
patch2patchinfo :: Named p wX wY -> PatchInfo #
plainSummary :: (Summary e, PrimDetails (PrimOf e)) => e wX wY -> Doc #
xmlSummary :: (Summary p, PrimDetails (PrimOf p)) => p wX wY -> Doc #
plainSummaryPrims :: PrimDetails prim => Bool -> FL prim wX wY -> Doc #
listConflictedFiles :: (Summary p, PatchInspect (PrimOf p)) => p wX wY -> [AnchoredPath] #
isInconsistent :: Check p => p wX wY -> Maybe Doc #
type RepoPatch p = (AnnotateRP p, Apply p, ApplyState p ~ ApplyState (PrimOf p), Check p, Commute p, Conflict p, Effect p, Eq2 p, FromPrim p, IsHunk p, IsHunk (PrimOf p), Merge p, PatchInspect p, PatchListFormat p, PrimPatchBase p, ReadPatch p, RepairToFL p, ShowContextPatch p, ShowPatch p, Summary p, ToPrim p, Unwind p) #