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

Safe Haskell | None
Language | Haskell2010

Darcs.Patch.Depends

Synopsis

- getUncovered :: PatchSet rt p wStart wX -> [PatchInfo]
- areUnrelatedRepos :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> Bool
- findCommonAndUncommon :: forall rt p wStart wX wY. Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> Fork (PatchSet rt p) (FL (PatchInfoAnd rt p)) (FL (PatchInfoAnd rt p)) wStart wX wY
- mergeThem :: (Patchy p, Merge p) => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> Sealed (FL (PatchInfoAnd rt p) wX)
- findCommonWithThem :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> (PatchSet rt p :> FL (PatchInfoAnd rt p)) wStart wX
- countUsThem :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> (Int, Int)
- removeFromPatchSet :: Patchy p => FL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY -> Maybe (PatchSet rt p wStart wX)
- slightlyOptimizePatchset :: PatchSet rt p wStart wX -> PatchSet rt p wStart wX
- getPatchesBeyondTag :: Patchy p => PatchInfo -> PatchSet rt p wStart wX -> FlippedSeal (RL (PatchInfoAnd rt p)) wX
- splitOnTag :: Patchy p => PatchInfo -> PatchSet rt p wStart wX -> Maybe ((PatchSet rt p :> RL (PatchInfoAnd rt p)) wStart wX)
- newsetUnion :: (Patchy p, Merge p) => [SealedPatchSet rt p wStart] -> SealedPatchSet rt p wStart
- newsetIntersection :: Patchy p => [SealedPatchSet rt p wStart] -> SealedPatchSet rt p wStart
- findUncommon :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> (FL (PatchInfoAnd rt p) :\/: FL (PatchInfoAnd rt p)) wX wY
- merge2FL :: (Patchy p, Merge p) => FL (PatchInfoAnd rt p) wX wY -> FL (PatchInfoAnd rt p) wX wZ -> (FL (PatchInfoAnd rt p) :/\: FL (PatchInfoAnd rt p)) wY wZ
- getDeps :: (RepoPatch p, ApplyState p ~ Tree) => FL (Named p) wA wR -> FL (PatchInfoAnd rt p) wX wY -> [SPatchAndDeps p]
- type SPatchAndDeps p = (Sealed2 (LabelledPatch (Named p)), Sealed2 (FL (LabelledPatch (Named p))))

# Documentation

getUncovered :: PatchSet rt p wStart wX -> [PatchInfo] #

`getUncovered ps` returns the `PatchInfo` for all the patches in `ps` that are not depended on by anything else *through explicit dependencies*. Tags are a likely candidate, although we may also find some non-tag patches in this list.

Keep in mind that in a typical repository with a lot of tags, only a small fraction of tags would be returned as they would be at least indirectly depended on by the topmost ones.

areUnrelatedRepos :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> Bool #

findCommonAndUncommon :: forall rt p wStart wX wY. Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> Fork (PatchSet rt p) (FL (PatchInfoAnd rt p)) (FL (PatchInfoAnd rt p)) wStart wX wY #

mergeThem :: (Patchy p, Merge p) => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> Sealed (FL (PatchInfoAnd rt p) wX) #

findCommonWithThem :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> (PatchSet rt p :> FL (PatchInfoAnd rt p)) wStart wX #

countUsThem :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> (Int, Int) #

removeFromPatchSet :: Patchy p => FL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY -> Maybe (PatchSet rt p wStart wX) #

slightlyOptimizePatchset :: PatchSet rt p wStart wX -> PatchSet rt p wStart wX #

`slightlyOptimizePatchset` only works on the surface inventory (see `optimizePatchset`) and only optimises at most one tag in there, going for the most recent tag which has no non-depended patch after it. Older tags won't be `clean`, which means the PatchSet will not be in 'clean :> unclean' state.

getPatchesBeyondTag :: Patchy p => PatchInfo -> PatchSet rt p wStart wX -> FlippedSeal (RL (PatchInfoAnd rt p)) wX #

splitOnTag :: Patchy p => PatchInfo -> PatchSet rt p wStart wX -> Maybe ((PatchSet rt p :> RL (PatchInfoAnd rt p)) wStart wX) #

splitOnTag takes a tag's `PatchInfo`, and a `PatchSet`, and attempts to find the tag in the PatchSet, returning a pair: the clean PatchSet "up to" the tag, and a RL of patches after the tag; If the tag is not in the PatchSet, we return Nothing.

newsetUnion :: (Patchy p, Merge p) => [SealedPatchSet rt p wStart] -> SealedPatchSet rt p wStart #

newsetIntersection :: Patchy p => [SealedPatchSet rt p wStart] -> SealedPatchSet rt p wStart #

findUncommon :: Patchy p => PatchSet rt p wStart wX -> PatchSet rt p wStart wY -> (FL (PatchInfoAnd rt p) :\/: FL (PatchInfoAnd rt p)) wX wY #

merge2FL :: (Patchy p, Merge p) => FL (PatchInfoAnd rt p) wX wY -> FL (PatchInfoAnd rt p) wX wZ -> (FL (PatchInfoAnd rt p) :/\: FL (PatchInfoAnd rt p)) wY wZ #

Merge two FLs (say L and R), starting in a common context. The result is a FL starting in the original end context of L, going to a new context that is the result of applying all patches from R on top of patches from L.

While this function is similar to `mergeFL`, there are some important differences to keep in mind:

- `mergeFL` does not correctly deal with duplicate patches whereas this one does (Question from Eric Kow: in what sense? Why not fix `mergeFL`?) (bf: I guess what was meant here is that `merge2FL` works in the the way it does because it considers patch meta data whereas `mergeFL` cannot since it must work for primitive patches, too.

getDeps :: (RepoPatch p, ApplyState p ~ Tree) => FL (Named p) wA wR -> FL (PatchInfoAnd rt p) wX wY -> [SPatchAndDeps p] #

Searchs dependencies in `repoFL` of the patches in `getDepsFL`.

type SPatchAndDeps p = (Sealed2 (LabelledPatch (Named p)), Sealed2 (FL (LabelledPatch (Named p)))) #

S(ealed) Patch and his dependencies.