{-# LANGUAGE UndecidableInstances #-}
module Darcs.Patch.Rebase.Viewing
( RebaseSelect(..)
, toRebaseSelect, fromRebaseSelect, extractRebaseSelect, reifyRebaseSelect
, partitionUnconflicted
, rsToPia
, WithDroppedDeps(..), WDDNamed, commuterIdWDD
, RebaseChange(..), toRebaseChanges
) where
import Prelude ()
import Darcs.Prelude
import Darcs.Patch.Commute ( selfCommuter )
import Darcs.Patch.CommuteFn ( CommuteFn, commuterIdFL, commuterRLId, MergeFn
, totalCommuterIdFL
)
import Darcs.Patch.Conflict
( Conflict(..), CommuteNoConflicts(..)
, IsConflictedPrim
)
import Darcs.Patch.Debug ( PatchDebug(..) )
import Darcs.Patch.Effect ( Effect(..) )
import Darcs.Patch.FileHunk ( IsHunk(..) )
import Darcs.Patch.Format ( PatchListFormat(..) )
import Darcs.Patch.Info ( PatchInfo )
import Darcs.Patch.Invert ( invertFL, invertRL )
import Darcs.Patch.Matchable ( Matchable )
import Darcs.Patch.Merge ( Merge(..), selfMerger )
import Darcs.Patch.Named
( Named(..), namepatch, infopatch
, mergerIdNamed
, getdeps
, patch2patchinfo, patchcontents
)
import Darcs.Patch.Named.Wrapped
( WrappedNamed(..)
)
import qualified Darcs.Patch.Named.Wrapped as Wrapped
( infopatch, adddeps
)
import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, n2pia )
import Darcs.Patch.Apply ( Apply(..) )
import Darcs.Patch.Commute ( Commute(..) )
import Darcs.Patch.Invert ( Invert(..) )
import Darcs.Patch.Inspect ( PatchInspect(..) )
import Darcs.Patch.Read ( ReadPatch(..) )
import Darcs.Patch.Show ( ShowPatch(..) )
import Darcs.Patch.Prim
( PrimPatch, PrimPatchBase(..), FromPrim(..), FromPrims(..)
)
import Darcs.Patch.Rebase.Container ( Suspended(..) )
import Darcs.Patch.Rebase.Fixup
( RebaseFixup(..)
, commuteFixupNamed, commuteNamedFixups
, flToNamesPrims
)
import Darcs.Patch.Rebase.Item ( RebaseItem(..) )
import Darcs.Patch.Rebase.Name ( RebaseName(..) )
import Darcs.Patch.RepoType ( RepoType(..), RebaseType(..) )
import Darcs.Patch.Show ( ShowPatchBasic(..), ShowPatchFor(..), ShowContextPatch(..) )
import Darcs.Patch.Summary ( plainSummary )
import Darcs.Patch.Witnesses.Eq
import Darcs.Patch.Witnesses.Ordered
import Darcs.Patch.Witnesses.Sealed
import Darcs.Patch.Witnesses.Show
( Show1(..), Show2(..), ShowDict(ShowDictClass)
, showsPrec2
)
import Darcs.Patch.Witnesses.Unsafe ( unsafeCoerceP, unsafeCoercePEnd )
import Darcs.Util.IsoDate ( getIsoDateTime )
import Darcs.Util.Printer ( ($$), redText, empty, vcat )
import Darcs.Util.Show ( appPrec )
import Data.List ( nub, (\\) )
import Data.Maybe ( fromMaybe )
data RebaseSelect p wX wY where
RSFwd :: FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSRev :: FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wZ wX
instance (Show2 p, Show2 (PrimOf p)) => Show (RebaseSelect p wX wY) where
showsPrec :: Int -> RebaseSelect p wX wY -> ShowS
showsPrec d :: Int
d (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups toedit :: Named p wY wY
toedit) =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
appPrec) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString "RSFwd " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> FL (RebaseFixup p) wX wY -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) FL (RebaseFixup p) wX wY
fixups ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> ShowS
showString " " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Named p wY wY -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) Named p wY wY
toedit
showsPrec d :: Int
d (RSRev fixups :: FL (RebaseFixup p) wY wY
fixups toedit :: Named p wY wX
toedit) =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
appPrec) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString "RSRev " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> FL (RebaseFixup p) wY wY -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) FL (RebaseFixup p) wY wY
fixups ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> ShowS
showString " " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Named p wY wX -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) Named p wY wX
toedit
instance (Show2 p, Show2 (PrimOf p)) => Show1 (RebaseSelect p wX) where
showDict1 :: ShowDict (RebaseSelect p wX wX)
showDict1 = ShowDict (RebaseSelect p wX wX)
forall a. Show a => ShowDict a
ShowDictClass
instance (Show2 p, Show2 (PrimOf p)) => Show2 (RebaseSelect p) where
showDict2 :: ShowDict (RebaseSelect p wX wY)
showDict2 = ShowDict (RebaseSelect p wX wY)
forall a. Show a => ShowDict a
ShowDictClass
data RebaseChange p wX wY where
RCFwd :: FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wX wZ
RCRev :: FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wZ wX
instance (Show2 p, Show2 (PrimOf p)) => Show1 (RebaseChange p wX) where
showDict1 :: ShowDict (RebaseChange p wX wX)
showDict1 = ShowDict (RebaseChange p wX wX)
forall a. Show a => ShowDict a
ShowDictClass
instance (Show2 p, Show2 (PrimOf p)) => Show2 (RebaseChange p) where
showDict2 :: ShowDict (RebaseChange p wX wY)
showDict2 = ShowDict (RebaseChange p wX wY)
forall a. Show a => ShowDict a
ShowDictClass
instance (Show2 p, Show2 (PrimOf p)) => Show (RebaseChange p wX wY) where
showsPrec :: Int -> RebaseChange p wX wY -> ShowS
showsPrec d :: Int
d (RCFwd fixups :: FL (RebaseFixup p) wX wY
fixups changes :: FL p wY wY
changes) =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
appPrec) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString "RCFwd " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> FL (RebaseFixup p) wX wY -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) FL (RebaseFixup p) wX wY
fixups ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> ShowS
showString " " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> FL p wY wY -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) FL p wY wY
changes
showsPrec d :: Int
d (RCRev fixups :: FL (RebaseFixup p) wY wY
fixups changes :: FL p wY wX
changes) =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
appPrec) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString "RCRev " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> FL (RebaseFixup p) wY wY -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) FL (RebaseFixup p) wY wY
fixups ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> ShowS
showString " " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> FL p wY wX -> ShowS
forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
appPrec Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1) FL p wY wX
changes
rsToPia :: RebaseSelect p wX wY -> Sealed2 (PatchInfoAnd ('RepoType 'NoRebase) p)
rsToPia :: RebaseSelect p wX wY
-> Sealed2 (PatchInfoAnd ('RepoType 'NoRebase) p)
rsToPia (RSFwd _ toEdit :: Named p wY wY
toEdit) = PatchInfoAnd ('RepoType 'NoRebase) p wY wY
-> Sealed2 (PatchInfoAnd ('RepoType 'NoRebase) p)
forall (a :: * -> * -> *) wX wY. a wX wY -> Sealed2 a
Sealed2 (WrappedNamed ('RepoType 'NoRebase) p wY wY
-> PatchInfoAnd ('RepoType 'NoRebase) p wY wY
forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
WrappedNamed rt p wX wY -> PatchInfoAnd rt p wX wY
n2pia (Named p wY wY -> WrappedNamed ('RepoType 'NoRebase) p wY wY
forall (p :: * -> * -> *) wX wY (rt :: RepoType).
Named p wX wY -> WrappedNamed rt p wX wY
NormalP Named p wY wY
toEdit))
rsToPia (RSRev _ toEdit :: Named p wY wX
toEdit) = PatchInfoAnd ('RepoType 'NoRebase) p wY wX
-> Sealed2 (PatchInfoAnd ('RepoType 'NoRebase) p)
forall (a :: * -> * -> *) wX wY. a wX wY -> Sealed2 a
Sealed2 (WrappedNamed ('RepoType 'NoRebase) p wY wX
-> PatchInfoAnd ('RepoType 'NoRebase) p wY wX
forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
WrappedNamed rt p wX wY -> PatchInfoAnd rt p wX wY
n2pia (Named p wY wX -> WrappedNamed ('RepoType 'NoRebase) p wY wX
forall (p :: * -> * -> *) wX wY (rt :: RepoType).
Named p wX wY -> WrappedNamed rt p wX wY
NormalP Named p wY wX
toEdit))
instance PrimPatchBase p => PrimPatchBase (RebaseSelect p) where
type PrimOf (RebaseSelect p) = PrimOf p
instance PatchDebug p => PatchDebug (RebaseSelect p)
instance PatchDebug p => PatchDebug (RebaseChange p)
instance (PrimPatchBase p, Invert p, Apply p, ApplyState p ~ ApplyState (PrimOf p)) => Apply (RebaseSelect p) where
type ApplyState (RebaseSelect p) = ApplyState p
apply :: RebaseSelect p wX wY -> m ()
apply (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups toedit :: Named p wY wY
toedit) = FL (RebaseFixup p) wX wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply FL (RebaseFixup p) wX wY
fixups m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Named p wY wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply Named p wY wY
toedit
apply (RSRev fixups :: FL (RebaseFixup p) wY wY
fixups toedit :: Named p wY wX
toedit) = Named p wX wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply (Named p wY wX -> Named p wX wY
forall (p :: * -> * -> *) wX wY. Invert p => p wX wY -> p wY wX
invert Named p wY wX
toedit) m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> RL (RebaseFixup p) wY wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply (FL (RebaseFixup p) wY wY -> RL (RebaseFixup p) wY wY
forall (p :: * -> * -> *) wX wY.
Invert p =>
FL p wX wY -> RL p wY wX
invertFL FL (RebaseFixup p) wY wY
fixups)
instance ( PrimPatchBase p, Invert p, Apply p
, ApplyState p ~ ApplyState (PrimOf p)
)
=> Apply (RebaseChange p) where
type ApplyState (RebaseChange p) = ApplyState p
apply :: RebaseChange p wX wY -> m ()
apply (RCFwd fixups :: FL (RebaseFixup p) wX wY
fixups contents :: FL p wY wY
contents) = FL (RebaseFixup p) wX wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply FL (RebaseFixup p) wX wY
fixups m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> FL p wY wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply FL p wY wY
contents
apply (RCRev fixups :: FL (RebaseFixup p) wY wY
fixups contents :: FL p wY wX
contents) = FL p wX wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply (FL p wY wX -> FL p wX wY
forall (p :: * -> * -> *) wX wY. Invert p => p wX wY -> p wY wX
invert FL p wY wX
contents) m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> RL (RebaseFixup p) wY wY -> m ()
forall (p :: * -> * -> *) (m :: * -> *) wX wY.
(Apply p, ApplyMonad (ApplyState p) m) =>
p wX wY -> m ()
apply (FL (RebaseFixup p) wY wY -> RL (RebaseFixup p) wY wY
forall (p :: * -> * -> *) wX wY.
Invert p =>
FL p wX wY -> RL p wY wX
invertFL FL (RebaseFixup p) wY wY
fixups)
instance (PrimPatchBase p, Conflict p, CommuteNoConflicts p, Invert p) => Conflict (RebaseSelect p) where
resolveConflicts :: RebaseSelect p wX wY
-> [[Sealed (FL (PrimOf (RebaseSelect p)) wY)]]
resolveConflicts (RSFwd _ toedit :: Named p wY wY
toedit) = Named p wY wY -> [[Sealed (FL (PrimOf (Named p)) wY)]]
forall (p :: * -> * -> *) wX wY.
Conflict p =>
p wX wY -> [[Sealed (FL (PrimOf p) wY)]]
resolveConflicts Named p wY wY
toedit
resolveConflicts (RSRev{}) = [[Sealed (FL (PrimOf (RebaseSelect p)) wY)]]
forall a. a
impossible
conflictedEffect :: RebaseSelect p wX wY
-> [IsConflictedPrim (PrimOf (RebaseSelect p))]
conflictedEffect (RSFwd _ toedit :: Named p wY wY
toedit) = Named p wY wY -> [IsConflictedPrim (PrimOf (Named p))]
forall (p :: * -> * -> *) wX wY.
Conflict p =>
p wX wY -> [IsConflictedPrim (PrimOf p)]
conflictedEffect Named p wY wY
toedit
conflictedEffect (RSRev{}) = [IsConflictedPrim (PrimOf (RebaseSelect p))]
forall a. a
impossible
newtype ResolveConflictsResult p wY =
ResolveConflictsResult {
ResolveConflictsResult p wY -> [[Sealed (FL (PrimOf p) wY)]]
getResolveConflictsResult :: [[Sealed (FL (PrimOf p) wY)]]
}
newtype ConflictedEffectResult p wY =
ConflictedEffectResult {
ConflictedEffectResult p wY -> [IsConflictedPrim (PrimOf p)]
getConflictedEffectResult :: [IsConflictedPrim (PrimOf p)]
}
changeAsMerge
:: (PrimPatchBase p, Invert p, FromPrim p, Merge p)
=> (forall wX' . FL p wX' wY -> result p wY)
-> RebaseChange p wX wY
-> result p wY
changeAsMerge :: (forall wX'. FL p wX' wY -> result p wY)
-> RebaseChange p wX wY -> result p wY
changeAsMerge f :: forall wX'. FL p wX' wY -> result p wY
f (RCFwd fixups :: FL (RebaseFixup p) wX wY
fixups changes :: FL p wY wY
changes) =
case FL (RebaseFixup p) wX wY
-> (:>) (FL (RebaseName p)) (FL (PrimOf p)) wX wY
forall (p :: * -> * -> *) wX wY.
PrimPatchBase p =>
FL (RebaseFixup p) wX wY
-> (:>) (FL (RebaseName p)) (FL (PrimOf p)) wX wY
flToNamesPrims FL (RebaseFixup p) wX wY
fixups of
_names :: FL (RebaseName p) wX wZ
_names :> prims :: FL (PrimOf p) wZ wY
prims ->
case (:\/:) (FL p) (FL p) wZ wY -> (:/\:) (FL p) (FL p) wZ wY
forall (p :: * -> * -> *) wX wY.
Merge p =>
(:\/:) p p wX wY -> (:/\:) p p wX wY
merge (FL p wZ wY -> FL p wY wZ
forall (p :: * -> * -> *) wX wY. Invert p => p wX wY -> p wY wX
invert (FL (PrimOf (FL p)) wZ wY -> FL p wZ wY
forall (p :: * -> * -> *) wX wY.
FromPrims p =>
FL (PrimOf p) wX wY -> p wX wY
fromPrims FL (PrimOf p) wZ wY
FL (PrimOf (FL p)) wZ wY
prims) FL p wY wZ -> FL p wY wY -> (:\/:) (FL p) (FL p) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wZ wX -> a2 wZ wY -> (:\/:) a1 a2 wX wY
:\/: FL p wY wY
changes) of
changes' :: FL p wZ wZ
changes' :/\: _ifixups' :: FL p wY wZ
_ifixups' ->
FL p wZ wY -> result p wY
forall wX'. FL p wX' wY -> result p wY
f (FL p wZ wZ -> FL p wZ wY
forall (a :: * -> * -> *) wX wY1 wY2. a wX wY1 -> a wX wY2
unsafeCoercePEnd FL p wZ wZ
changes')
changeAsMerge _ (RCRev _ _) = result p wY
forall a. a
impossible
instance
( PrimPatchBase p, Invert p, Effect p
, FromPrim p, Merge p, Conflict p, CommuteNoConflicts p
)
=> Conflict (RebaseChange p) where
resolveConflicts :: RebaseChange p wX wY
-> [[Sealed (FL (PrimOf (RebaseChange p)) wY)]]
resolveConflicts =
ResolveConflictsResult p wY -> [[Sealed (FL (PrimOf p) wY)]]
forall (p :: * -> * -> *) wY.
ResolveConflictsResult p wY -> [[Sealed (FL (PrimOf p) wY)]]
getResolveConflictsResult (ResolveConflictsResult p wY -> [[Sealed (FL (PrimOf p) wY)]])
-> (RebaseChange p wX wY -> ResolveConflictsResult p wY)
-> RebaseChange p wX wY
-> [[Sealed (FL (PrimOf p) wY)]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall wX'. FL p wX' wY -> ResolveConflictsResult p wY)
-> RebaseChange p wX wY -> ResolveConflictsResult p wY
forall (p :: * -> * -> *) wY (result :: (* -> * -> *) -> * -> *)
wX.
(PrimPatchBase p, Invert p, FromPrim p, Merge p) =>
(forall wX'. FL p wX' wY -> result p wY)
-> RebaseChange p wX wY -> result p wY
changeAsMerge ([[Sealed (FL (PrimOf p) wY)]] -> ResolveConflictsResult p wY
forall (p :: * -> * -> *) wY.
[[Sealed (FL (PrimOf p) wY)]] -> ResolveConflictsResult p wY
ResolveConflictsResult ([[Sealed (FL (PrimOf p) wY)]] -> ResolveConflictsResult p wY)
-> (FL p wX' wY -> [[Sealed (FL (PrimOf p) wY)]])
-> FL p wX' wY
-> ResolveConflictsResult p wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL p wX' wY -> [[Sealed (FL (PrimOf p) wY)]]
forall (p :: * -> * -> *) wX wY.
Conflict p =>
p wX wY -> [[Sealed (FL (PrimOf p) wY)]]
resolveConflicts)
conflictedEffect :: RebaseChange p wX wY
-> [IsConflictedPrim (PrimOf (RebaseChange p))]
conflictedEffect =
ConflictedEffectResult p wY -> [IsConflictedPrim (PrimOf p)]
forall (p :: * -> * -> *) wY.
ConflictedEffectResult p wY -> [IsConflictedPrim (PrimOf p)]
getConflictedEffectResult (ConflictedEffectResult p wY -> [IsConflictedPrim (PrimOf p)])
-> (RebaseChange p wX wY -> ConflictedEffectResult p wY)
-> RebaseChange p wX wY
-> [IsConflictedPrim (PrimOf p)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall wX'. FL p wX' wY -> ConflictedEffectResult p wY)
-> RebaseChange p wX wY -> ConflictedEffectResult p wY
forall (p :: * -> * -> *) wY (result :: (* -> * -> *) -> * -> *)
wX.
(PrimPatchBase p, Invert p, FromPrim p, Merge p) =>
(forall wX'. FL p wX' wY -> result p wY)
-> RebaseChange p wX wY -> result p wY
changeAsMerge ([IsConflictedPrim (PrimOf p)] -> ConflictedEffectResult p wY
forall (p :: * -> * -> *) wY.
[IsConflictedPrim (PrimOf p)] -> ConflictedEffectResult p wY
ConflictedEffectResult ([IsConflictedPrim (PrimOf p)] -> ConflictedEffectResult p wY)
-> (FL p wX' wY -> [IsConflictedPrim (PrimOf p)])
-> FL p wX' wY
-> ConflictedEffectResult p wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL p wX' wY -> [IsConflictedPrim (PrimOf p)]
forall (p :: * -> * -> *) wX wY.
Conflict p =>
p wX wY -> [IsConflictedPrim (PrimOf p)]
conflictedEffect)
instance (PrimPatchBase p, Invert p, Effect p) => Effect (RebaseSelect p) where
effect :: RebaseSelect p wX wY -> FL (PrimOf (RebaseSelect p)) wX wY
effect (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups toedit :: Named p wY wY
toedit) =
FL (FL (PrimOf p)) wX wY -> FL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wZ. FL (FL a) wX wZ -> FL a wX wZ
concatFL ((forall wW wY. RebaseFixup p wW wY -> FL (PrimOf p) wW wY)
-> FL (RebaseFixup p) wX wY -> FL (FL (PrimOf p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. RebaseFixup p wW wY -> FL (PrimOf p) wW wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect FL (RebaseFixup p) wX wY
fixups) FL (PrimOf p) wX wY -> FL (PrimOf p) wY wY -> FL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ Named p wY wY -> FL (PrimOf (Named p)) wY wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect Named p wY wY
toedit
effect (RSRev fixups :: FL (RebaseFixup p) wY wY
fixups toedit :: Named p wY wX
toedit) = RL (PrimOf p) wY wX -> FL (PrimOf p) wX wY
forall (p :: * -> * -> *) wX wY.
Invert p =>
RL p wX wY -> FL p wY wX
invertRL (RL (PrimOf p) wY wX -> FL (PrimOf p) wX wY)
-> (RebaseSelect p wY wX -> RL (PrimOf p) wY wX)
-> RebaseSelect p wY wX
-> FL (PrimOf p) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL (PrimOf p) wY wX -> RL (PrimOf p) wY wX
forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> RL a wX wZ
reverseFL (FL (PrimOf p) wY wX -> RL (PrimOf p) wY wX)
-> (RebaseSelect p wY wX -> FL (PrimOf p) wY wX)
-> RebaseSelect p wY wX
-> RL (PrimOf p) wY wX
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RebaseSelect p wY wX -> FL (PrimOf p) wY wX
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect (RebaseSelect p wY wX -> FL (PrimOf (RebaseSelect p)) wX wY)
-> RebaseSelect p wY wX -> FL (PrimOf (RebaseSelect p)) wX wY
forall a b. (a -> b) -> a -> b
$ FL (RebaseFixup p) wY wY -> Named p wY wX -> RebaseSelect p wY wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd FL (RebaseFixup p) wY wY
fixups Named p wY wX
toedit
instance (PrimPatchBase p, Invert p, Effect p) => Effect (RebaseChange p) where
effect :: RebaseChange p wX wY -> FL (PrimOf (RebaseChange p)) wX wY
effect (RCFwd fixups :: FL (RebaseFixup p) wX wY
fixups changes :: FL p wY wY
changes) =
FL (FL (PrimOf p)) wX wY -> FL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wZ. FL (FL a) wX wZ -> FL a wX wZ
concatFL ((forall wW wY. RebaseFixup p wW wY -> FL (PrimOf p) wW wY)
-> FL (RebaseFixup p) wX wY -> FL (FL (PrimOf p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. RebaseFixup p wW wY -> FL (PrimOf p) wW wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect FL (RebaseFixup p) wX wY
fixups) FL (PrimOf p) wX wY -> FL (PrimOf p) wY wY -> FL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ FL p wY wY -> FL (PrimOf (FL p)) wY wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect FL p wY wY
changes
effect (RCRev fixups :: FL (RebaseFixup p) wY wY
fixups changes :: FL p wY wX
changes) =
RL (PrimOf p) wY wX -> FL (PrimOf p) wX wY
forall (p :: * -> * -> *) wX wY.
Invert p =>
RL p wX wY -> FL p wY wX
invertRL (RL (PrimOf p) wY wX -> FL (PrimOf p) wX wY)
-> (RebaseChange p wY wX -> RL (PrimOf p) wY wX)
-> RebaseChange p wY wX
-> FL (PrimOf p) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL (PrimOf p) wY wX -> RL (PrimOf p) wY wX
forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> RL a wX wZ
reverseFL (FL (PrimOf p) wY wX -> RL (PrimOf p) wY wX)
-> (RebaseChange p wY wX -> FL (PrimOf p) wY wX)
-> RebaseChange p wY wX
-> RL (PrimOf p) wY wX
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RebaseChange p wY wX -> FL (PrimOf p) wY wX
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect (RebaseChange p wY wX -> FL (PrimOf (RebaseChange p)) wX wY)
-> RebaseChange p wY wX -> FL (PrimOf (RebaseChange p)) wX wY
forall a b. (a -> b) -> a -> b
$ FL (RebaseFixup p) wY wY -> FL p wY wX -> RebaseChange p wY wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wX wZ
RCFwd FL (RebaseFixup p) wY wY
fixups FL p wY wX
changes
instance (PrimPatchBase p, PatchListFormat p, ShowPatchBasic p) => ShowPatchBasic (RebaseSelect p) where
showPatch :: ShowPatchFor -> RebaseSelect p wX wY -> Doc
showPatch f :: ShowPatchFor
f (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups toedit :: Named p wY wY
toedit) =
ShowPatchFor -> Suspended p wX wX -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
f (FL (RebaseItem p) wX wY -> Suspended p wX wX
forall (p :: * -> * -> *) wX wY.
FL (RebaseItem p) wX wY -> Suspended p wX wX
Items ((forall wW wY. RebaseFixup p wW wY -> RebaseItem p wW wY)
-> FL (RebaseFixup p) wX wY -> FL (RebaseItem p) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. RebaseFixup p wW wY -> RebaseItem p wW wY
forall (p :: * -> * -> *) wX wY.
RebaseFixup p wX wY -> RebaseItem p wX wY
Fixup FL (RebaseFixup p) wX wY
fixups FL (RebaseItem p) wX wY
-> FL (RebaseItem p) wY wY -> FL (RebaseItem p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ Named p wY wY -> RebaseItem p wY wY
forall (p :: * -> * -> *) wX wY.
Named p wX wY -> RebaseItem p wX wY
ToEdit Named p wY wY
toedit RebaseItem p wY wY
-> FL (RebaseItem p) wY wY -> FL (RebaseItem p) wY wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseItem p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL))
showPatch _ (RSRev {}) = Doc
forall a. a
impossible
instance (PrimPatchBase p, PatchListFormat p, ShowPatchBasic p) => ShowContextPatch (RebaseSelect p) where
showContextPatch :: ShowPatchFor -> RebaseSelect p wX wY -> m Doc
showContextPatch f :: ShowPatchFor
f p :: RebaseSelect p wX wY
p = Doc -> m Doc
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> m Doc) -> Doc -> m Doc
forall a b. (a -> b) -> a -> b
$ ShowPatchFor -> RebaseSelect p wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
f RebaseSelect p wX wY
p
instance (PrimPatchBase p, ShowPatchBasic p)
=> ShowPatchBasic (RebaseChange p) where
showPatch :: ShowPatchFor -> RebaseChange p wX wY -> Doc
showPatch ForStorage _ = Doc
forall a. a
impossible
showPatch ForDisplay (RCFwd fixups :: FL (RebaseFixup p) wX wY
fixups contents :: FL p wY wY
contents) =
[Doc] -> Doc
vcat ((forall wW wZ. p wW wZ -> Doc) -> FL p wY wY -> [Doc]
forall (a :: * -> * -> *) b wX wY.
(forall wW wZ. a wW wZ -> b) -> FL a wX wY -> [b]
mapFL (ShowPatchFor -> p wW wZ -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
ForDisplay) FL p wY wY
contents) Doc -> Doc -> Doc
$$
(if FL (RebaseFixup p) wX wY -> Bool
forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> Bool
nullFL FL (RebaseFixup p) wX wY
fixups
then Doc
empty
else
String -> Doc
redText "" Doc -> Doc -> Doc
$$
String -> Doc
redText "conflicts:" Doc -> Doc -> Doc
$$
String -> Doc
redText "" Doc -> Doc -> Doc
$$
[Doc] -> Doc
vcat ((forall wW wZ. RebaseFixup p wW wZ -> Doc)
-> RL (RebaseFixup p) wY wX -> [Doc]
forall (a :: * -> * -> *) b wX wY.
(forall wW wZ. a wW wZ -> b) -> RL a wX wY -> [b]
mapRL forall wW wZ. RebaseFixup p wW wZ -> Doc
forall (p :: * -> * -> *) wX wY. RebaseFixup p wX wY -> Doc
showFixup (FL (RebaseFixup p) wX wY -> RL (RebaseFixup p) wY wX
forall (p :: * -> * -> *) wX wY.
Invert p =>
FL p wX wY -> RL p wY wX
invertFL FL (RebaseFixup p) wX wY
fixups))
)
where
showFixup :: RebaseFixup p wX wY -> Doc
showFixup (PrimFixup p :: PrimOf p wX wY
p) = ShowPatchFor -> PrimOf p wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
ForDisplay PrimOf p wX wY
p
showFixup (NameFixup n :: RebaseName p wX wY
n) = ShowPatchFor -> RebaseName p wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
ForDisplay RebaseName p wX wY
n
showPatch _ (RCRev {}) = Doc
forall a. a
impossible
instance (PrimPatchBase p, PatchListFormat p, Apply p, CommuteNoConflicts p, Conflict p, IsHunk p, ShowPatch p)
=> ShowPatch (RebaseSelect p) where
description :: RebaseSelect p wX wY -> Doc
description (RSFwd _ toedit :: Named p wY wY
toedit) = Named p wY wY -> Doc
forall (p :: * -> * -> *) wX wY. ShowPatch p => p wX wY -> Doc
description Named p wY wY
toedit
description (RSRev _ _toedit :: Named p wY wX
_toedit) = Doc
forall a. a
impossible
summary :: RebaseSelect p wX wY -> Doc
summary = FL (RebaseItem p) wX wY -> Doc
forall (p :: * -> * -> *) wX wY. ShowPatch p => FL p wX wY -> Doc
summaryFL (FL (RebaseItem p) wX wY -> Doc)
-> (RebaseSelect p wX wY -> FL (RebaseItem p) wX wY)
-> RebaseSelect p wX wY
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
forall (p :: * -> * -> *) wX wY.
FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
fromRebaseSelect (FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY)
-> (RebaseSelect p wX wY -> FL (RebaseSelect p) wX wY)
-> RebaseSelect p wX wY
-> FL (RebaseItem p) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (RebaseSelect p wX wY
-> FL (RebaseSelect p) wY wY -> FL (RebaseSelect p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseSelect p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
summaryFL :: FL (RebaseSelect p) wX wY -> Doc
summaryFL = FL (RebaseItem p) wX wY -> Doc
forall (p :: * -> * -> *) wX wY. ShowPatch p => FL p wX wY -> Doc
summaryFL (FL (RebaseItem p) wX wY -> Doc)
-> (FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY)
-> FL (RebaseSelect p) wX wY
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
forall (p :: * -> * -> *) wX wY.
FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
fromRebaseSelect
instance
( PrimPatchBase p, PatchListFormat p, ShowPatchBasic p
, Invert p, Effect p, Merge p, FromPrim p
, Conflict p, CommuteNoConflicts p
)
=> ShowPatch (RebaseChange p) where
summary :: RebaseChange p wX wY -> Doc
summary = RebaseChange p wX wY -> Doc
forall (e :: * -> * -> *) wX wY.
(Conflict e, PrimPatchBase e) =>
e wX wY -> Doc
plainSummary
summaryFL :: FL (RebaseChange p) wX wY -> Doc
summaryFL = FL (RebaseChange p) wX wY -> Doc
forall (e :: * -> * -> *) wX wY.
(Conflict e, PrimPatchBase e) =>
e wX wY -> Doc
plainSummary
instance
( PrimPatchBase p, ShowPatchBasic p)
=> ShowContextPatch (RebaseChange p) where
showContextPatch :: ShowPatchFor -> RebaseChange p wX wY -> m Doc
showContextPatch f :: ShowPatchFor
f p :: RebaseChange p wX wY
p = Doc -> m Doc
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> m Doc) -> Doc -> m Doc
forall a b. (a -> b) -> a -> b
$ ShowPatchFor -> RebaseChange p wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
f RebaseChange p wX wY
p
instance ReadPatch (RebaseSelect p) where
readPatch' :: m (Sealed (RebaseSelect p wX))
readPatch' = String -> m (Sealed (RebaseSelect p wX))
forall a. HasCallStack => String -> a
error "can't read RebaseSelect patches"
instance ReadPatch (RebaseChange p) where
readPatch' :: m (Sealed (RebaseChange p wX))
readPatch' = String -> m (Sealed (RebaseChange p wX))
forall a. HasCallStack => String -> a
error "can't read RebaseChange patches"
toRebaseSelect :: PrimPatchBase p => FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY
fromRebaseSelect :: FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
fromRebaseSelect :: FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
fromRebaseSelect NilFL = FL (RebaseItem p) wX wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
fromRebaseSelect (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups toedit :: Named p wY wY
toedit :>: ps :: FL (RebaseSelect p) wY wY
ps)
= (forall wW wY. RebaseFixup p wW wY -> RebaseItem p wW wY)
-> FL (RebaseFixup p) wX wY -> FL (RebaseItem p) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. RebaseFixup p wW wY -> RebaseItem p wW wY
forall (p :: * -> * -> *) wX wY.
RebaseFixup p wX wY -> RebaseItem p wX wY
Fixup FL (RebaseFixup p) wX wY
fixups FL (RebaseItem p) wX wY
-> FL (RebaseItem p) wY wY -> FL (RebaseItem p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ Named p wY wY -> RebaseItem p wY wY
forall (p :: * -> * -> *) wX wY.
Named p wX wY -> RebaseItem p wX wY
ToEdit Named p wY wY
toedit RebaseItem p wY wY
-> FL (RebaseItem p) wY wY -> FL (RebaseItem p) wY wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseSelect p) wY wY -> FL (RebaseItem p) wY wY
forall (p :: * -> * -> *) wX wY.
FL (RebaseSelect p) wX wY -> FL (RebaseItem p) wX wY
fromRebaseSelect FL (RebaseSelect p) wY wY
ps
fromRebaseSelect (RSRev {} :>: _) = FL (RebaseItem p) wX wY
forall a. a
impossible
toRebaseSelect :: FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY
toRebaseSelect NilFL = FL (RebaseSelect p) wX wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
toRebaseSelect (Fixup f :: RebaseFixup p wX wY
f :>: ps :: FL (RebaseItem p) wY wY
ps) =
case FL (RebaseItem p) wY wY -> FL (RebaseSelect p) wY wY
forall (p :: * -> * -> *) wX wY.
PrimPatchBase p =>
FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY
toRebaseSelect FL (RebaseItem p) wY wY
ps of
RSFwd fixups :: FL (RebaseFixup p) wY wY
fixups toedit :: Named p wY wY
toedit :>: rest :: FL (RebaseSelect p) wY wY
rest -> FL (RebaseFixup p) wX wY -> Named p wY wY -> RebaseSelect p wX wY
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd (RebaseFixup p wX wY
f RebaseFixup p wX wY
-> FL (RebaseFixup p) wY wY -> FL (RebaseFixup p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseFixup p) wY wY
fixups) Named p wY wY
toedit RebaseSelect p wX wY
-> FL (RebaseSelect p) wY wY -> FL (RebaseSelect p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseSelect p) wY wY
rest
NilFL -> String -> FL (RebaseSelect p) wX wY
forall a. String -> a
bug "rebase chain with Fixup at end"
_ -> FL (RebaseSelect p) wX wY
forall a. a
impossible
toRebaseSelect (ToEdit te :: Named p wX wY
te :>: ps :: FL (RebaseItem p) wY wY
ps) = FL (RebaseFixup p) wX wX -> Named p wX wY -> RebaseSelect p wX wY
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd FL (RebaseFixup p) wX wX
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL Named p wX wY
te RebaseSelect p wX wY
-> FL (RebaseSelect p) wY wY -> FL (RebaseSelect p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseItem p) wY wY -> FL (RebaseSelect p) wY wY
forall (p :: * -> * -> *) wX wY.
PrimPatchBase p =>
FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY
toRebaseSelect FL (RebaseItem p) wY wY
ps
toRebaseChanges
:: PrimPatchBase p
=> FL (RebaseItem p) wX wY
-> FL (PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p)) wX wY
toRebaseChanges :: FL (RebaseItem p) wX wY
-> FL (PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p)) wX wY
toRebaseChanges = (forall wW wY.
RebaseSelect p wW wY
-> PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p) wW wY)
-> FL (RebaseSelect p) wX wY
-> FL (PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY.
RebaseSelect p wW wY
-> PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p) wW wY
forall (p :: * -> * -> *) wX wY (rt :: RepoType).
RebaseSelect p wX wY -> PatchInfoAnd rt (RebaseChange p) wX wY
toChange (FL (RebaseSelect p) wX wY
-> FL (PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p)) wX wY)
-> (FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY)
-> FL (RebaseItem p) wX wY
-> FL (PatchInfoAnd ('RepoType 'IsRebase) (RebaseChange p)) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY
forall (p :: * -> * -> *) wX wY.
PrimPatchBase p =>
FL (RebaseItem p) wX wY -> FL (RebaseSelect p) wX wY
toRebaseSelect
toChange :: RebaseSelect p wX wY -> PatchInfoAnd rt (RebaseChange p) wX wY
toChange :: RebaseSelect p wX wY -> PatchInfoAnd rt (RebaseChange p) wX wY
toChange (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups named :: Named p wY wY
named) =
WrappedNamed rt (RebaseChange p) wX wY
-> PatchInfoAnd rt (RebaseChange p) wX wY
forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
WrappedNamed rt p wX wY -> PatchInfoAnd rt p wX wY
n2pia (WrappedNamed rt (RebaseChange p) wX wY
-> PatchInfoAnd rt (RebaseChange p) wX wY)
-> WrappedNamed rt (RebaseChange p) wX wY
-> PatchInfoAnd rt (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
(WrappedNamed rt (RebaseChange p) wX wY
-> [PatchInfo] -> WrappedNamed rt (RebaseChange p) wX wY)
-> [PatchInfo]
-> WrappedNamed rt (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall a b c. (a -> b -> c) -> b -> a -> c
flip WrappedNamed rt (RebaseChange p) wX wY
-> [PatchInfo] -> WrappedNamed rt (RebaseChange p) wX wY
forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
WrappedNamed rt p wX wY -> [PatchInfo] -> WrappedNamed rt p wX wY
Wrapped.adddeps (Named p wY wY -> [PatchInfo]
forall (p :: * -> * -> *) wX wY. Named p wX wY -> [PatchInfo]
getdeps Named p wY wY
named) (WrappedNamed rt (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY)
-> WrappedNamed rt (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
PatchInfo
-> FL (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall (p :: * -> * -> *) wX wY (rt :: RepoType).
PatchInfo -> FL p wX wY -> WrappedNamed rt p wX wY
Wrapped.infopatch (Named p wY wY -> PatchInfo
forall (p :: * -> * -> *) wX wY. Named p wX wY -> PatchInfo
patch2patchinfo Named p wY wY
named) (FL (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY)
-> FL (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
(RebaseChange p wX wY
-> FL (RebaseChange p) wY wY -> FL (RebaseChange p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseChange p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL) (RebaseChange p wX wY -> FL (RebaseChange p) wX wY)
-> RebaseChange p wX wY -> FL (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
FL (RebaseFixup p) wX wY -> FL p wY wY -> RebaseChange p wX wY
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wX wZ
RCFwd FL (RebaseFixup p) wX wY
fixups (Named p wY wY -> FL p wY wY
forall (p :: * -> * -> *) wX wY. Named p wX wY -> FL p wX wY
patchcontents Named p wY wY
named)
toChange (RSRev fixups :: FL (RebaseFixup p) wY wY
fixups named :: Named p wY wX
named) =
WrappedNamed rt (RebaseChange p) wX wY
-> PatchInfoAnd rt (RebaseChange p) wX wY
forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
WrappedNamed rt p wX wY -> PatchInfoAnd rt p wX wY
n2pia (WrappedNamed rt (RebaseChange p) wX wY
-> PatchInfoAnd rt (RebaseChange p) wX wY)
-> WrappedNamed rt (RebaseChange p) wX wY
-> PatchInfoAnd rt (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
(WrappedNamed rt (RebaseChange p) wX wY
-> [PatchInfo] -> WrappedNamed rt (RebaseChange p) wX wY)
-> [PatchInfo]
-> WrappedNamed rt (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall a b c. (a -> b -> c) -> b -> a -> c
flip WrappedNamed rt (RebaseChange p) wX wY
-> [PatchInfo] -> WrappedNamed rt (RebaseChange p) wX wY
forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
WrappedNamed rt p wX wY -> [PatchInfo] -> WrappedNamed rt p wX wY
Wrapped.adddeps (Named p wY wX -> [PatchInfo]
forall (p :: * -> * -> *) wX wY. Named p wX wY -> [PatchInfo]
getdeps Named p wY wX
named) (WrappedNamed rt (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY)
-> WrappedNamed rt (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
PatchInfo
-> FL (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall (p :: * -> * -> *) wX wY (rt :: RepoType).
PatchInfo -> FL p wX wY -> WrappedNamed rt p wX wY
Wrapped.infopatch (Named p wY wX -> PatchInfo
forall (p :: * -> * -> *) wX wY. Named p wX wY -> PatchInfo
patch2patchinfo Named p wY wX
named) (FL (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY)
-> FL (RebaseChange p) wX wY
-> WrappedNamed rt (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
(RebaseChange p wX wY
-> FL (RebaseChange p) wY wY -> FL (RebaseChange p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseChange p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL) (RebaseChange p wX wY -> FL (RebaseChange p) wX wY)
-> RebaseChange p wX wY -> FL (RebaseChange p) wX wY
forall a b. (a -> b) -> a -> b
$
FL (RebaseFixup p) wY wY -> FL p wY wX -> RebaseChange p wX wY
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wZ wX
RCRev FL (RebaseFixup p) wY wY
fixups (Named p wY wX -> FL p wY wX
forall (p :: * -> * -> *) wX wY. Named p wX wY -> FL p wX wY
patchcontents Named p wY wX
named)
instance PrimPatch (PrimOf p) => PrimPatchBase (RebaseChange p) where
type PrimOf (RebaseChange p) = PrimOf p
instance Invert (RebaseSelect p) where
invert :: RebaseSelect p wX wY -> RebaseSelect p wY wX
invert (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups edit :: Named p wY wY
edit) = FL (RebaseFixup p) wX wY -> Named p wY wY -> RebaseSelect p wY wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wZ wX
RSRev FL (RebaseFixup p) wX wY
fixups Named p wY wY
edit
invert (RSRev fixups :: FL (RebaseFixup p) wY wY
fixups edit :: Named p wY wX
edit) = FL (RebaseFixup p) wY wY -> Named p wY wX -> RebaseSelect p wY wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd FL (RebaseFixup p) wY wY
fixups Named p wY wX
edit
instance Invert (RebaseChange p) where
invert :: RebaseChange p wX wY -> RebaseChange p wY wX
invert (RCFwd fixups :: FL (RebaseFixup p) wX wY
fixups contents :: FL p wY wY
contents) = FL (RebaseFixup p) wX wY -> FL p wY wY -> RebaseChange p wY wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wZ wX
RCRev FL (RebaseFixup p) wX wY
fixups FL p wY wY
contents
invert (RCRev fixups :: FL (RebaseFixup p) wY wY
fixups contents :: FL p wY wX
contents) = FL (RebaseFixup p) wY wY -> FL p wY wX -> RebaseChange p wY wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> FL p wY wZ -> RebaseChange p wX wZ
RCFwd FL (RebaseFixup p) wY wY
fixups FL p wY wX
contents
instance (PrimPatchBase p, Commute p, Eq2 p) => Eq2 (RebaseSelect p) where
RSFwd fixups1 :: FL (RebaseFixup p) wA wY
fixups1 edit1 :: Named p wY wB
edit1 =\/= :: RebaseSelect p wA wB -> RebaseSelect p wA wC -> EqCheck wB wC
=\/= RSFwd fixups2 :: FL (RebaseFixup p) wA wY
fixups2 edit2 :: Named p wY wC
edit2
| EqCheck wY wY
IsEq <- FL (RebaseFixup p) wA wY
fixups1 FL (RebaseFixup p) wA wY
-> FL (RebaseFixup p) wA wY -> EqCheck wY wY
forall (p :: * -> * -> *) wA wB wC.
Eq2 p =>
p wA wB -> p wA wC -> EqCheck wB wC
=\/= FL (RebaseFixup p) wA wY
fixups2, EqCheck wB wC
IsEq <- Named p wY wB
edit1 Named p wY wB -> Named p wY wC -> EqCheck wB wC
forall (p :: * -> * -> *) wA wB wC.
Eq2 p =>
p wA wB -> p wA wC -> EqCheck wB wC
=\/= Named p wY wC
Named p wY wC
edit2 = EqCheck wB wC
forall wA. EqCheck wA wA
IsEq
RSRev fixups1 :: FL (RebaseFixup p) wB wY
fixups1 edit1 :: Named p wY wA
edit1 =\/= RSRev fixups2 :: FL (RebaseFixup p) wC wY
fixups2 edit2 :: Named p wY wA
edit2
| EqCheck wY wY
IsEq <- Named p wY wA
edit1 Named p wY wA -> Named p wY wA -> EqCheck wY wY
forall (p :: * -> * -> *) wA wC wB.
Eq2 p =>
p wA wC -> p wB wC -> EqCheck wA wB
=/\= Named p wY wA
edit2, EqCheck wB wC
IsEq <- FL (RebaseFixup p) wB wY
fixups1 FL (RebaseFixup p) wB wY
-> FL (RebaseFixup p) wC wY -> EqCheck wB wC
forall (p :: * -> * -> *) wA wC wB.
Eq2 p =>
p wA wC -> p wB wC -> EqCheck wA wB
=/\= FL (RebaseFixup p) wC wY
FL (RebaseFixup p) wC wY
fixups2 = EqCheck wB wC
forall wA. EqCheck wA wA
IsEq
_ =\/= _ = EqCheck wB wC
forall a. a
impossible
instance (PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p) => Commute (RebaseSelect p) where
commute :: (:>) (RebaseSelect p) (RebaseSelect p) wX wY
-> Maybe ((:>) (RebaseSelect p) (RebaseSelect p) wX wY)
commute (RSFwd {} :> RSRev {}) = Maybe ((:>) (RebaseSelect p) (RebaseSelect p) wX wY)
forall a. a
impossible
commute (RSRev {} :> RSFwd {}) = Maybe ((:>) (RebaseSelect p) (RebaseSelect p) wX wY)
forall a. a
impossible
commute (RSRev fixups1 :: FL (RebaseFixup p) wZ wY
fixups1 edit1 :: Named p wY wX
edit1 :> RSRev fixups2 :: FL (RebaseFixup p) wY wY
fixups2 edit2 :: Named p wY wZ
edit2) =
do RSFwd fixups1' :: FL (RebaseFixup p) wY wY
fixups1' edit1' :: Named p wY wZ
edit1' :> RSFwd fixups2' :: FL (RebaseFixup p) wZ wY
fixups2' edit2' :: Named p wY wX
edit2'
<- (:>) (RebaseSelect p) (RebaseSelect p) wY wX
-> Maybe ((:>) (RebaseSelect p) (RebaseSelect p) wY wX)
forall (p :: * -> * -> *) wX wY.
Commute p =>
(:>) p p wX wY -> Maybe ((:>) p p wX wY)
commute (FL (RebaseFixup p) wY wY -> Named p wY wZ -> RebaseSelect p wY wZ
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd FL (RebaseFixup p) wY wY
fixups2 Named p wY wZ
edit2 RebaseSelect p wY wZ
-> RebaseSelect p wZ wX
-> (:>) (RebaseSelect p) (RebaseSelect p) wY wX
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wZ wY -> Named p wY wX -> RebaseSelect p wZ wX
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd FL (RebaseFixup p) wZ wY
fixups1 Named p wY wX
edit1)
(:>) (RebaseSelect p) (RebaseSelect p) wX wY
-> Maybe ((:>) (RebaseSelect p) (RebaseSelect p) wX wY)
forall (m :: * -> *) a. Monad m => a -> m a
return (FL (RebaseFixup p) wZ wY -> Named p wY wX -> RebaseSelect p wX wZ
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wZ wX
RSRev FL (RebaseFixup p) wZ wY
fixups2' Named p wY wX
edit2' RebaseSelect p wX wZ
-> RebaseSelect p wZ wY
-> (:>) (RebaseSelect p) (RebaseSelect p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wY wY -> Named p wY wZ -> RebaseSelect p wZ wY
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wZ wX
RSRev FL (RebaseFixup p) wY wY
fixups1' Named p wY wZ
edit1')
commute (RSFwd fixups1 :: FL (RebaseFixup p) wX wY
fixups1 edit1 :: Named p wY wZ
edit1 :> RSFwd fixups2 :: FL (RebaseFixup p) wZ wY
fixups2 edit2 :: Named p wY wY
edit2)
= do
fixups2' :: FL (RebaseFixup p) wY wZ
fixups2' :> edit1' :: Named p wZ wY
edit1' <- (:>) (Named p) (FL (RebaseFixup p)) wY wY
-> Maybe ((:>) (FL (RebaseFixup p)) (Named p) wY wY)
forall (p :: * -> * -> *) wX wY.
(FromPrim p, Effect p, Commute p, Invert p) =>
(:>) (Named p) (FL (RebaseFixup p)) wX wY
-> Maybe ((:>) (FL (RebaseFixup p)) (Named p) wX wY)
commuteNamedFixups (Named p wY wZ
edit1 Named p wY wZ
-> FL (RebaseFixup p) wZ wY
-> (:>) (Named p) (FL (RebaseFixup p)) wY wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wZ wY
fixups2)
edit2' :: Named p wZ wZ
edit2' :> edit1'' :: Named p wZ wY
edit1'' <- (:>) (Named p) (Named p) wZ wY
-> Maybe ((:>) (Named p) (Named p) wZ wY)
forall (p :: * -> * -> *) wX wY.
Commute p =>
(:>) p p wX wY -> Maybe ((:>) p p wX wY)
commute (Named p wZ wY
edit1' Named p wZ wY -> Named p wY wY -> (:>) (Named p) (Named p) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> Named p wY wY
edit2)
fixupsS :: FL (RebaseFixup p) wX wZ
fixupsS :> (fixups2'' :: FL (RebaseFixup p) wZ wZ
fixups2'' :> edit2'' :: Named p wZ wZ
edit2'') :> fixups1' :: FL (RebaseFixup p) wZ wZ
fixups1' <- (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ
-> Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ)
forall (m :: * -> *) a. Monad m => a -> m a
return ((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ
-> Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ))
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ
-> Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ)
forall a b. (a -> b) -> a -> b
$ (:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wX wZ
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wZ
forall (p :: * -> * -> *) wX wY.
(PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p) =>
(:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wX wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
pushThrough (FL (RebaseFixup p) wX wY
fixups1 FL (RebaseFixup p) wX wY
-> (:>) (FL (RebaseFixup p)) (Named p) wY wZ
-> (:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (FL (RebaseFixup p) wY wZ
fixups2' FL (RebaseFixup p) wY wZ
-> Named p wZ wZ -> (:>) (FL (RebaseFixup p)) (Named p) wY wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> Named p wZ wZ
edit2'))
(:>) (RebaseSelect p) (RebaseSelect p) wX wY
-> Maybe ((:>) (RebaseSelect p) (RebaseSelect p) wX wY)
forall (m :: * -> *) a. Monad m => a -> m a
return (FL (RebaseFixup p) wX wZ -> Named p wZ wZ -> RebaseSelect p wX wZ
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd (FL (RebaseFixup p) wX wZ
fixupsS FL (RebaseFixup p) wX wZ
-> FL (RebaseFixup p) wZ wZ -> FL (RebaseFixup p) wX wZ
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ FL (RebaseFixup p) wZ wZ
fixups2'') Named p wZ wZ
edit2'' RebaseSelect p wX wZ
-> RebaseSelect p wZ wY
-> (:>) (RebaseSelect p) (RebaseSelect p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wZ wZ -> Named p wZ wY -> RebaseSelect p wZ wY
forall (p :: * -> * -> *) wX wY wZ.
FL (RebaseFixup p) wX wY -> Named p wY wZ -> RebaseSelect p wX wZ
RSFwd FL (RebaseFixup p) wZ wZ
fixups1' Named p wZ wY
edit1'')
instance Commute (RebaseChange p) where
commute :: (:>) (RebaseChange p) (RebaseChange p) wX wY
-> Maybe ((:>) (RebaseChange p) (RebaseChange p) wX wY)
commute _ = Maybe ((:>) (RebaseChange p) (RebaseChange p) wX wY)
forall a. a
impossible
instance (PrimPatchBase p, PatchInspect p) => PatchInspect (RebaseSelect p) where
listTouchedFiles :: RebaseSelect p wX wY -> [String]
listTouchedFiles (RSFwd fixup :: FL (RebaseFixup p) wX wY
fixup toedit :: Named p wY wY
toedit) = [String] -> [String]
forall a. Eq a => [a] -> [a]
nub (FL (RebaseFixup p) wX wY -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles FL (RebaseFixup p) wX wY
fixup [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ Named p wY wY -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles Named p wY wY
toedit)
listTouchedFiles (RSRev fixup :: FL (RebaseFixup p) wY wY
fixup toedit :: Named p wY wX
toedit) = [String] -> [String]
forall a. Eq a => [a] -> [a]
nub (FL (RebaseFixup p) wY wY -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles FL (RebaseFixup p) wY wY
fixup [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ Named p wY wX -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles Named p wY wX
toedit)
hunkMatches :: (ByteString -> Bool) -> RebaseSelect p wX wY -> Bool
hunkMatches f :: ByteString -> Bool
f (RSFwd fixup :: FL (RebaseFixup p) wX wY
fixup toedit :: Named p wY wY
toedit) = (ByteString -> Bool) -> FL (RebaseFixup p) wX wY -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f FL (RebaseFixup p) wX wY
fixup Bool -> Bool -> Bool
|| (ByteString -> Bool) -> Named p wY wY -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f Named p wY wY
toedit
hunkMatches f :: ByteString -> Bool
f (RSRev fixup :: FL (RebaseFixup p) wY wY
fixup toedit :: Named p wY wX
toedit) = (ByteString -> Bool) -> FL (RebaseFixup p) wY wY -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f FL (RebaseFixup p) wY wY
fixup Bool -> Bool -> Bool
|| (ByteString -> Bool) -> Named p wY wX -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f Named p wY wX
toedit
instance (PrimPatchBase p, PatchInspect p) => PatchInspect (RebaseChange p) where
listTouchedFiles :: RebaseChange p wX wY -> [String]
listTouchedFiles (RCFwd fixup :: FL (RebaseFixup p) wX wY
fixup contents :: FL p wY wY
contents) = [String] -> [String]
forall a. Eq a => [a] -> [a]
nub (FL (RebaseFixup p) wX wY -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles FL (RebaseFixup p) wX wY
fixup [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ FL p wY wY -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles FL p wY wY
contents)
listTouchedFiles (RCRev fixup :: FL (RebaseFixup p) wY wY
fixup contents :: FL p wY wX
contents) = [String] -> [String]
forall a. Eq a => [a] -> [a]
nub (FL (RebaseFixup p) wY wY -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles FL (RebaseFixup p) wY wY
fixup [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ FL p wY wX -> [String]
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
p wX wY -> [String]
listTouchedFiles FL p wY wX
contents)
hunkMatches :: (ByteString -> Bool) -> RebaseChange p wX wY -> Bool
hunkMatches f :: ByteString -> Bool
f (RCFwd fixup :: FL (RebaseFixup p) wX wY
fixup contents :: FL p wY wY
contents) = (ByteString -> Bool) -> FL (RebaseFixup p) wX wY -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f FL (RebaseFixup p) wX wY
fixup Bool -> Bool -> Bool
|| (ByteString -> Bool) -> FL p wY wY -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f FL p wY wY
contents
hunkMatches f :: ByteString -> Bool
f (RCRev fixup :: FL (RebaseFixup p) wY wY
fixup contents :: FL p wY wX
contents) = (ByteString -> Bool) -> FL (RebaseFixup p) wY wY -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f FL (RebaseFixup p) wY wY
fixup Bool -> Bool -> Bool
|| (ByteString -> Bool) -> FL p wY wX -> Bool
forall (p :: * -> * -> *) wX wY.
PatchInspect p =>
(ByteString -> Bool) -> p wX wY -> Bool
hunkMatches ByteString -> Bool
f FL p wY wX
contents
partitionUnconflicted
:: (PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p)
=> FL (RebaseSelect p) wX wY
-> (FL (RebaseSelect p) :> RL (RebaseSelect p)) wX wY
partitionUnconflicted :: FL (RebaseSelect p) wX wY
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wY
partitionUnconflicted = RL (RebaseSelect p) wX wX
-> FL (RebaseSelect p) wX wY
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wY
forall (p :: * -> * -> *) wX wY wZ.
(PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p) =>
RL (RebaseSelect p) wX wY
-> FL (RebaseSelect p) wY wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wZ
partitionUnconflictedAcc RL (RebaseSelect p) wX wX
forall (a :: * -> * -> *) wX. RL a wX wX
NilRL
partitionUnconflictedAcc :: (PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p)
=> RL (RebaseSelect p) wX wY -> FL (RebaseSelect p) wY wZ
-> (FL (RebaseSelect p) :> RL (RebaseSelect p)) wX wZ
partitionUnconflictedAcc :: RL (RebaseSelect p) wX wY
-> FL (RebaseSelect p) wY wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wZ
partitionUnconflictedAcc right :: RL (RebaseSelect p) wX wY
right NilFL = FL (RebaseSelect p) wX wX
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL FL (RebaseSelect p) wX wX
-> RL (RebaseSelect p) wX wY
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> RL (RebaseSelect p) wX wY
right
partitionUnconflictedAcc right :: RL (RebaseSelect p) wX wY
right (p :: RebaseSelect p wY wY
p :>: ps :: FL (RebaseSelect p) wY wZ
ps) =
case CommuteFn (RebaseSelect p) (RebaseSelect p)
-> (:>) (RL (RebaseSelect p)) (RebaseSelect p) wX wY
-> Maybe ((:>) (RebaseSelect p) (RL (RebaseSelect p)) wX wY)
forall (p1 :: * -> * -> *) (p2 :: * -> * -> *).
CommuteFn p1 p2 -> CommuteFn (RL p1) p2
commuterRLId CommuteFn (RebaseSelect p) (RebaseSelect p)
forall (p :: * -> * -> *) wX wY.
Commute p =>
(:>) p p wX wY -> Maybe ((:>) p p wX wY)
selfCommuter (RL (RebaseSelect p) wX wY
right RL (RebaseSelect p) wX wY
-> RebaseSelect p wY wY
-> (:>) (RL (RebaseSelect p)) (RebaseSelect p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> RebaseSelect p wY wY
p) of
Just (p' :: RebaseSelect p wX wZ
p'@(RSFwd NilFL _) :> right' :: RL (RebaseSelect p) wZ wY
right')
-> case RL (RebaseSelect p) wZ wY
-> FL (RebaseSelect p) wY wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wZ wZ
forall (p :: * -> * -> *) wX wY wZ.
(PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p) =>
RL (RebaseSelect p) wX wY
-> FL (RebaseSelect p) wY wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wZ
partitionUnconflictedAcc RL (RebaseSelect p) wZ wY
right' FL (RebaseSelect p) wY wZ
ps of
left' :: FL (RebaseSelect p) wZ wZ
left' :> right'' :: RL (RebaseSelect p) wZ wZ
right'' -> (RebaseSelect p wX wZ
p' RebaseSelect p wX wZ
-> FL (RebaseSelect p) wZ wZ -> FL (RebaseSelect p) wX wZ
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseSelect p) wZ wZ
left') FL (RebaseSelect p) wX wZ
-> RL (RebaseSelect p) wZ wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> RL (RebaseSelect p) wZ wZ
right''
_ -> RL (RebaseSelect p) wX wY
-> FL (RebaseSelect p) wY wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wZ
forall (p :: * -> * -> *) wX wY wZ.
(PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p) =>
RL (RebaseSelect p) wX wY
-> FL (RebaseSelect p) wY wZ
-> (:>) (FL (RebaseSelect p)) (RL (RebaseSelect p)) wX wZ
partitionUnconflictedAcc (RL (RebaseSelect p) wX wY
right RL (RebaseSelect p) wX wY
-> RebaseSelect p wY wY -> RL (RebaseSelect p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: RebaseSelect p wY wY
p) FL (RebaseSelect p) wY wZ
ps
data WithDroppedDeps p wX wY =
WithDroppedDeps {
WithDroppedDeps p wX wY -> p wX wY
wddPatch :: p wX wY,
WithDroppedDeps p wX wY -> [PatchInfo]
wddDependedOn :: [PatchInfo]
}
noDroppedDeps :: p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps :: p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps p :: p wX wY
p = p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
forall (p :: * -> * -> *) wX wY.
p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
WithDroppedDeps p wX wY
p []
instance PrimPatchBase p => PrimPatchBase (WithDroppedDeps p) where
type PrimOf (WithDroppedDeps p) = PrimOf p
instance Effect p => Effect (WithDroppedDeps p) where
effect :: WithDroppedDeps p wX wY -> FL (PrimOf (WithDroppedDeps p)) wX wY
effect = p wX wY -> FL (PrimOf p) wX wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect (p wX wY -> FL (PrimOf p) wX wY)
-> (WithDroppedDeps p wX wY -> p wX wY)
-> WithDroppedDeps p wX wY
-> FL (PrimOf p) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WithDroppedDeps p wX wY -> p wX wY
forall (p :: * -> * -> *) wX wY. WithDroppedDeps p wX wY -> p wX wY
wddPatch
pushThrough :: (PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p)
=> (FL (RebaseFixup p) :> (FL (RebaseFixup p) :> Named p)) wX wY
-> (FL (RebaseFixup p) :> (FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p)) wX wY
pushThrough :: (:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wX wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
pushThrough (NilFL :> v :: (:>) (FL (RebaseFixup p)) (Named p) wZ wY
v) = FL (RebaseFixup p) wZ wZ
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL FL (RebaseFixup p) wZ wZ
-> (:>) (FL (RebaseFixup p) :> Named p) (FL (RebaseFixup p)) wZ wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wZ
wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (:>) (FL (RebaseFixup p)) (Named p) wZ wY
v (:>) (FL (RebaseFixup p)) (Named p) wZ wY
-> FL (RebaseFixup p) wY wY
-> (:>) (FL (RebaseFixup p) :> Named p) (FL (RebaseFixup p)) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
pushThrough ((p :: RebaseFixup p wX wY
p :>: ps :: FL (RebaseFixup p) wY wZ
ps) :> v :: (:>) (FL (RebaseFixup p)) (Named p) wZ wY
v) =
case (:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wY wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wY
wY
forall (p :: * -> * -> *) wX wY.
(PrimPatchBase p, FromPrim p, Effect p, Commute p, Invert p) =>
(:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wX wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
pushThrough (FL (RebaseFixup p) wY wZ
ps FL (RebaseFixup p) wY wZ
-> (:>) (FL (RebaseFixup p)) (Named p) wZ wY
-> (:>) (FL (RebaseFixup p)) (FL (RebaseFixup p) :> Named p) wY wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (:>) (FL (RebaseFixup p)) (Named p) wZ wY
v) of
psS :: FL (RebaseFixup p) wY wZ
psS :> v' :: (:>) (FL (RebaseFixup p)) (Named p) wZ wZ
v'@(qs :: FL (RebaseFixup p) wZ wZ
qs:>te :: Named p wZ wZ
te) :> ps' :: FL (RebaseFixup p) wZ wY
ps' ->
(:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
-> Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY)
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
forall a. a -> Maybe a -> a
fromMaybe ((RebaseFixup p wX wY
p RebaseFixup p wX wY
-> FL (RebaseFixup p) wY wZ -> FL (RebaseFixup p) wX wZ
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseFixup p) wY wZ
psS) FL (RebaseFixup p) wX wZ
-> (:>) (FL (RebaseFixup p) :> Named p) (FL (RebaseFixup p)) wZ wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (:>) (FL (RebaseFixup p)) (Named p) wZ wZ
v' (:>) (FL (RebaseFixup p)) (Named p) wZ wZ
-> FL (RebaseFixup p) wZ wY
-> (:>) (FL (RebaseFixup p) :> Named p) (FL (RebaseFixup p)) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wZ wY
ps') (Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY)
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY)
-> Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY)
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
forall a b. (a -> b) -> a -> b
$ do
psS' :: FL (RebaseFixup p) wX wZ
psS' :> p' :: RebaseFixup p wZ wZ
p' <- CommuteFn (RebaseFixup p) (RebaseFixup p)
-> (:>) (RebaseFixup p) (FL (RebaseFixup p)) wX wZ
-> Maybe ((:>) (FL (RebaseFixup p)) (RebaseFixup p) wX wZ)
forall (p1 :: * -> * -> *) (p2 :: * -> * -> *).
CommuteFn p1 p2 -> CommuteFn p1 (FL p2)
commuterIdFL CommuteFn (RebaseFixup p) (RebaseFixup p)
forall (p :: * -> * -> *) wX wY.
Commute p =>
(:>) p p wX wY -> Maybe ((:>) p p wX wY)
selfCommuter (RebaseFixup p wX wY
p RebaseFixup p wX wY
-> FL (RebaseFixup p) wY wZ
-> (:>) (RebaseFixup p) (FL (RebaseFixup p)) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wY wZ
psS)
qs' :: FL (RebaseFixup p) wZ wZ
qs' :> p'' :: RebaseFixup p wZ wZ
p'' <- CommuteFn (RebaseFixup p) (RebaseFixup p)
-> (:>) (RebaseFixup p) (FL (RebaseFixup p)) wZ wZ
-> Maybe ((:>) (FL (RebaseFixup p)) (RebaseFixup p) wZ wZ)
forall (p1 :: * -> * -> *) (p2 :: * -> * -> *).
CommuteFn p1 p2 -> CommuteFn p1 (FL p2)
commuterIdFL CommuteFn (RebaseFixup p) (RebaseFixup p)
forall (p :: * -> * -> *) wX wY.
Commute p =>
(:>) p p wX wY -> Maybe ((:>) p p wX wY)
selfCommuter (RebaseFixup p wZ wZ
p' RebaseFixup p wZ wZ
-> FL (RebaseFixup p) wZ wZ
-> (:>) (RebaseFixup p) (FL (RebaseFixup p)) wZ wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wZ wZ
qs)
te' :: Named p wZ wZ
te' :> p''' :: FL (RebaseFixup p) wZ wZ
p''' <- (:>) (RebaseFixup p) (Named p) wZ wZ
-> Maybe ((:>) (Named p) (FL (RebaseFixup p)) wZ wZ)
forall (p :: * -> * -> *) wX wY.
(FromPrim p, Effect p, Commute p, Invert p) =>
(:>) (RebaseFixup p) (Named p) wX wY
-> Maybe ((:>) (Named p) (FL (RebaseFixup p)) wX wY)
commuteFixupNamed (RebaseFixup p wZ wZ
p'' RebaseFixup p wZ wZ
-> Named p wZ wZ -> (:>) (RebaseFixup p) (Named p) wZ wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> Named p wZ wZ
te)
(:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
-> Maybe
((:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY)
forall (m :: * -> *) a. Monad m => a -> m a
return (FL (RebaseFixup p) wX wZ
psS' FL (RebaseFixup p) wX wZ
-> (:>) (FL (RebaseFixup p) :> Named p) (FL (RebaseFixup p)) wZ wY
-> (:>)
(FL (RebaseFixup p))
((FL (RebaseFixup p) :> Named p) :> FL (RebaseFixup p))
wX
wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (FL (RebaseFixup p) wZ wZ
qs' FL (RebaseFixup p) wZ wZ
-> Named p wZ wZ -> (:>) (FL (RebaseFixup p)) (Named p) wZ wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> Named p wZ wZ
te') (:>) (FL (RebaseFixup p)) (Named p) wZ wZ
-> FL (RebaseFixup p) wZ wY
-> (:>) (FL (RebaseFixup p) :> Named p) (FL (RebaseFixup p)) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (FL (RebaseFixup p) wZ wZ
p''' FL (RebaseFixup p) wZ wZ
-> FL (RebaseFixup p) wZ wY -> FL (RebaseFixup p) wZ wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ FL (RebaseFixup p) wZ wY
ps'))
type WDDNamed p = WithDroppedDeps (Named p)
mergerIdWDD :: MergeFn p1 p2 -> MergeFn p1 (WithDroppedDeps p2)
mergerIdWDD :: MergeFn p1 p2 -> MergeFn p1 (WithDroppedDeps p2)
mergerIdWDD merger :: MergeFn p1 p2
merger (p1 :: p1 wZ wX
p1 :\/: WithDroppedDeps p2 :: p2 wZ wY
p2 deps :: [PatchInfo]
deps) =
case (:\/:) p1 p2 wX wY -> (:/\:) p2 p1 wX wY
MergeFn p1 p2
merger (p1 wZ wX
p1 p1 wZ wX -> p2 wZ wY -> (:\/:) p1 p2 wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wZ wX -> a2 wZ wY -> (:\/:) a1 a2 wX wY
:\/: p2 wZ wY
p2) of
p2' :: p2 wX wZ
p2' :/\: p1' :: p1 wY wZ
p1' -> p2 wX wZ -> [PatchInfo] -> WithDroppedDeps p2 wX wZ
forall (p :: * -> * -> *) wX wY.
p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
WithDroppedDeps p2 wX wZ
p2' [PatchInfo]
deps WithDroppedDeps p2 wX wZ
-> p1 wY wZ -> (:/\:) (WithDroppedDeps p2) p1 wX wY
forall (a3 :: * -> * -> *) (a4 :: * -> * -> *) wX wY wZ.
a3 wX wZ -> a4 wY wZ -> (:/\:) a3 a4 wX wY
:/\: p1 wY wZ
p1'
commuterIdWDD :: CommuteFn p q -> CommuteFn p (WithDroppedDeps q)
commuterIdWDD :: CommuteFn p q -> CommuteFn p (WithDroppedDeps q)
commuterIdWDD commuter :: CommuteFn p q
commuter (p :: p wX wZ
p :> WithDroppedDeps q :: q wZ wY
q deps :: [PatchInfo]
deps)
= do
q' :: q wX wZ
q' :> p' :: p wZ wY
p' <- (:>) p q wX wY -> Maybe ((:>) q p wX wY)
CommuteFn p q
commuter (p wX wZ
p p wX wZ -> q wZ wY -> (:>) p q wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> q wZ wY
q)
(:>) (WithDroppedDeps q) p wX wY
-> Maybe ((:>) (WithDroppedDeps q) p wX wY)
forall (m :: * -> *) a. Monad m => a -> m a
return (q wX wZ -> [PatchInfo] -> WithDroppedDeps q wX wZ
forall (p :: * -> * -> *) wX wY.
p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
WithDroppedDeps q wX wZ
q' [PatchInfo]
deps WithDroppedDeps q wX wZ
-> p wZ wY -> (:>) (WithDroppedDeps q) p wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> p wZ wY
p')
forceCommuteName :: (RebaseName p :> WDDNamed p) wX wY -> (WDDNamed p :> RebaseName p) wX wY
forceCommuteName :: (:>) (RebaseName p) (WDDNamed p) wX wY
-> (:>) (WDDNamed p) (RebaseName p) wX wY
forceCommuteName (AddName an :: PatchInfo
an :> WithDroppedDeps (NamedP pn :: PatchInfo
pn deps :: [PatchInfo]
deps body :: FL p wZ wY
body) ddeps :: [PatchInfo]
ddeps)
| PatchInfo
an PatchInfo -> PatchInfo -> Bool
forall a. Eq a => a -> a -> Bool
== PatchInfo
pn = (:>) (WDDNamed p) (RebaseName p) wX wY
forall a. a
impossible
| Bool
otherwise = Named p wX Any -> [PatchInfo] -> WithDroppedDeps (Named p) wX Any
forall (p :: * -> * -> *) wX wY.
p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
WithDroppedDeps (PatchInfo -> [PatchInfo] -> FL p wX Any -> Named p wX Any
forall (p :: * -> * -> *) wX wY.
PatchInfo -> [PatchInfo] -> FL p wX wY -> Named p wX wY
NamedP PatchInfo
pn ([PatchInfo]
deps [PatchInfo] -> [PatchInfo] -> [PatchInfo]
forall a. Eq a => [a] -> [a] -> [a]
\\ [PatchInfo
an]) (FL p wZ wY -> FL p wX Any
forall (a :: * -> * -> *) wX wY wB wC. a wX wY -> a wB wC
unsafeCoerceP FL p wZ wY
body)) (if PatchInfo
an PatchInfo -> [PatchInfo] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [PatchInfo]
deps then PatchInfo
anPatchInfo -> [PatchInfo] -> [PatchInfo]
forall a. a -> [a] -> [a]
:[PatchInfo]
ddeps else [PatchInfo]
ddeps) WithDroppedDeps (Named p) wX Any
-> RebaseName p Any wY -> (:>) (WDDNamed p) (RebaseName p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> PatchInfo -> RebaseName p Any wY
forall (p :: * -> * -> *) wX wY. PatchInfo -> RebaseName p wX wY
AddName PatchInfo
an
forceCommuteName (DelName dn :: PatchInfo
dn :> p :: WDDNamed p wZ wY
p@(WithDroppedDeps (NamedP pn :: PatchInfo
pn deps :: [PatchInfo]
deps _body :: FL p wZ wY
_body) _ddeps :: [PatchInfo]
_ddeps))
| PatchInfo
dn PatchInfo -> PatchInfo -> Bool
forall a. Eq a => a -> a -> Bool
== PatchInfo
pn = (:>) (WDDNamed p) (RebaseName p) wX wY
forall a. a
impossible
| PatchInfo
dn PatchInfo -> [PatchInfo] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [PatchInfo]
deps = (:>) (WDDNamed p) (RebaseName p) wX wY
forall a. a
impossible
| Bool
otherwise = WDDNamed p wZ wY -> WithDroppedDeps (Named p) wX Any
forall (a :: * -> * -> *) wX wY wB wC. a wX wY -> a wB wC
unsafeCoerceP WDDNamed p wZ wY
p WithDroppedDeps (Named p) wX Any
-> RebaseName p Any wY -> (:>) (WDDNamed p) (RebaseName p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> PatchInfo -> RebaseName p Any wY
forall (p :: * -> * -> *) wX wY. PatchInfo -> RebaseName p wX wY
DelName PatchInfo
dn
forceCommuteName (Rename old :: PatchInfo
old new :: PatchInfo
new :> WithDroppedDeps (NamedP pn :: PatchInfo
pn deps :: [PatchInfo]
deps body :: FL p wZ wY
body) ddeps :: [PatchInfo]
ddeps)
| PatchInfo
old PatchInfo -> PatchInfo -> Bool
forall a. Eq a => a -> a -> Bool
== PatchInfo
pn = (:>) (WDDNamed p) (RebaseName p) wX wY
forall a. a
impossible
| PatchInfo
new PatchInfo -> PatchInfo -> Bool
forall a. Eq a => a -> a -> Bool
== PatchInfo
pn = (:>) (WDDNamed p) (RebaseName p) wX wY
forall a. a
impossible
| PatchInfo
old PatchInfo -> [PatchInfo] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [PatchInfo]
deps = (:>) (WDDNamed p) (RebaseName p) wX wY
forall a. a
impossible
| Bool
otherwise =
let newdeps :: [PatchInfo]
newdeps = (PatchInfo -> PatchInfo) -> [PatchInfo] -> [PatchInfo]
forall a b. (a -> b) -> [a] -> [b]
map (\dep :: PatchInfo
dep -> if PatchInfo
new PatchInfo -> PatchInfo -> Bool
forall a. Eq a => a -> a -> Bool
== PatchInfo
dep then PatchInfo
old else PatchInfo
dep) [PatchInfo]
deps
in Named p wX Any -> [PatchInfo] -> WithDroppedDeps (Named p) wX Any
forall (p :: * -> * -> *) wX wY.
p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
WithDroppedDeps (PatchInfo -> [PatchInfo] -> FL p wX Any -> Named p wX Any
forall (p :: * -> * -> *) wX wY.
PatchInfo -> [PatchInfo] -> FL p wX wY -> Named p wX wY
NamedP PatchInfo
pn [PatchInfo]
newdeps (FL p wZ wY -> FL p wX Any
forall (a :: * -> * -> *) wX wY wB wC. a wX wY -> a wB wC
unsafeCoerceP FL p wZ wY
body)) [PatchInfo]
ddeps WithDroppedDeps (Named p) wX Any
-> RebaseName p Any wY -> (:>) (WDDNamed p) (RebaseName p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> PatchInfo -> PatchInfo -> RebaseName p Any wY
forall (p :: * -> * -> *) wX wY.
PatchInfo -> PatchInfo -> RebaseName p wX wY
Rename PatchInfo
old PatchInfo
new
forceCommutePrim :: (Merge p, Invert p, Effect p, FromPrim p)
=> (PrimOf p :> WDDNamed p) wX wY
-> (WDDNamed p :> FL (PrimOf p)) wX wY
forceCommutePrim :: (:>) (PrimOf p) (WDDNamed p) wX wY
-> (:>) (WDDNamed p) (FL (PrimOf p)) wX wY
forceCommutePrim (p :: PrimOf p wX wZ
p :> q :: WDDNamed p wZ wY
q) =
case MergeFn p (Named p)
-> (:\/:) p (WDDNamed p) wX wY -> (:/\:) (WDDNamed p) p wX wY
forall (p1 :: * -> * -> *) (p2 :: * -> * -> *).
MergeFn p1 p2 -> MergeFn p1 (WithDroppedDeps p2)
mergerIdWDD (MergeFn p p -> MergeFn p (Named p)
forall (p1 :: * -> * -> *) (p2 :: * -> * -> *).
MergeFn p1 p2 -> MergeFn p1 (Named p2)
mergerIdNamed MergeFn p p
forall (p :: * -> * -> *) wX wY.
Merge p =>
(:\/:) p p wX wY -> (:/\:) p p wX wY
selfMerger) (p wX wZ -> p wZ wX
forall (p :: * -> * -> *) wX wY. Invert p => p wX wY -> p wY wX
invert (PrimOf p wX wZ -> p wX wZ
forall (p :: * -> * -> *) wX wY.
FromPrim p =>
PrimOf p wX wY -> p wX wY
fromPrim PrimOf p wX wZ
p) p wZ wX -> WDDNamed p wZ wY -> (:\/:) p (WDDNamed p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wZ wX -> a2 wZ wY -> (:\/:) a1 a2 wX wY
:\/: WDDNamed p wZ wY
q) of
q' :: WithDroppedDeps (Named p) wX wZ
q' :/\: invp' :: p wY wZ
invp' -> WithDroppedDeps (Named p) wX wZ
q' WithDroppedDeps (Named p) wX wZ
-> FL (PrimOf p) wZ wY -> (:>) (WDDNamed p) (FL (PrimOf p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> p wZ wY -> FL (PrimOf p) wZ wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect (p wY wZ -> p wZ wY
forall (p :: * -> * -> *) wX wY. Invert p => p wX wY -> p wY wX
invert p wY wZ
invp')
forceCommutesPrim :: (Merge p, Invert p, Effect p, FromPrim p)
=> (PrimOf p :> FL (WDDNamed p)) wX wY
-> (FL (WDDNamed p) :> FL (PrimOf p)) wX wY
forceCommutesPrim :: (:>) (PrimOf p) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forceCommutesPrim (p :: PrimOf p wX wZ
p :> NilFL) = FL (WDDNamed p) wX wX
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL FL (WDDNamed p) wX wX
-> FL (PrimOf p) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (PrimOf p wX wY
PrimOf p wX wZ
p PrimOf p wX wY -> FL (PrimOf p) wY wY -> FL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (PrimOf p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
forceCommutesPrim (p :: PrimOf p wX wZ
p :> (q :: WDDNamed p wZ wY
q :>: qs :: FL (WDDNamed p) wY wY
qs)) =
case (:>) (PrimOf p) (WDDNamed p) wX wY
-> (:>) (WDDNamed p) (FL (PrimOf p)) wX wY
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (PrimOf p) (WDDNamed p) wX wY
-> (:>) (WDDNamed p) (FL (PrimOf p)) wX wY
forceCommutePrim (PrimOf p wX wZ
p PrimOf p wX wZ
-> WDDNamed p wZ wY -> (:>) (PrimOf p) (WDDNamed p) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> WDDNamed p wZ wY
q) of
q' :: WDDNamed p wX wZ
q' :> p' :: FL (PrimOf p) wZ wY
p' -> case (:>) (FL (PrimOf p)) (FL (WDDNamed p)) wZ wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wZ wY
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (FL (PrimOf p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forceCommutessPrim ( FL (PrimOf p) wZ wY
p' FL (PrimOf p) wZ wY
-> FL (WDDNamed p) wY wY
-> (:>) (FL (PrimOf p)) (FL (WDDNamed p)) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wY wY
qs) of
qs' :: FL (WDDNamed p) wZ wZ
qs' :> p'' :: FL (PrimOf p) wZ wY
p'' -> (WDDNamed p wX wZ
q' WDDNamed p wX wZ -> FL (WDDNamed p) wZ wZ -> FL (WDDNamed p) wX wZ
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (WDDNamed p) wZ wZ
qs') FL (WDDNamed p) wX wZ
-> FL (PrimOf p) wZ wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (PrimOf p) wZ wY
p''
forceCommutessPrim :: (Merge p, Invert p, Effect p, FromPrim p)
=> (FL (PrimOf p) :> FL (WDDNamed p)) wX wY
-> (FL (WDDNamed p) :> FL (PrimOf p)) wX wY
forceCommutessPrim :: (:>) (FL (PrimOf p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forceCommutessPrim (NilFL :> qs :: FL (WDDNamed p) wZ wY
qs) = FL (WDDNamed p) wZ wY
qs FL (WDDNamed p) wZ wY
-> FL (PrimOf p) wY wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (PrimOf p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
forceCommutessPrim ((p :: PrimOf p wX wY
p :>: ps :: FL (PrimOf p) wY wZ
ps) :> qs :: FL (WDDNamed p) wZ wY
qs) =
case (:>) (FL (PrimOf p)) (FL (WDDNamed p)) wY wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wY wY
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (FL (PrimOf p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forceCommutessPrim (FL (PrimOf p) wY wZ
ps FL (PrimOf p) wY wZ
-> FL (WDDNamed p) wZ wY
-> (:>) (FL (PrimOf p)) (FL (WDDNamed p)) wY wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wZ wY
qs) of
qs' :: FL (WDDNamed p) wY wZ
qs' :> ps' :: FL (PrimOf p) wZ wY
ps' ->
case (:>) (PrimOf p) (FL (WDDNamed p)) wX wZ
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wZ
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (PrimOf p) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forceCommutesPrim (PrimOf p wX wY
p PrimOf p wX wY
-> FL (WDDNamed p) wY wZ -> (:>) (PrimOf p) (FL (WDDNamed p)) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wY wZ
qs') of
qs'' :: FL (WDDNamed p) wX wZ
qs'' :> p' :: FL (PrimOf p) wZ wZ
p' -> FL (WDDNamed p) wX wZ
qs'' FL (WDDNamed p) wX wZ
-> FL (PrimOf p) wZ wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (FL (PrimOf p) wZ wZ
p' FL (PrimOf p) wZ wZ -> FL (PrimOf p) wZ wY -> FL (PrimOf p) wZ wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ FL (PrimOf p) wZ wY
ps')
forceCommutess :: (Merge p, Invert p, Effect p, FromPrim p)
=> (FL (RebaseFixup p) :> FL (WDDNamed p)) wX wY
-> (FL (WDDNamed p) :> FL (RebaseFixup p)) wX wY
forceCommutess :: (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forceCommutess (NilFL :> qs :: FL (WDDNamed p) wZ wY
qs) = FL (WDDNamed p) wZ wY
qs FL (WDDNamed p) wZ wY
-> FL (RebaseFixup p) wY wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wZ wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
forceCommutess ((NameFixup n :: RebaseName p wX wY
n :>: ps :: FL (RebaseFixup p) wY wZ
ps) :> qs :: FL (WDDNamed p) wZ wY
qs) =
case (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wY wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wY wY
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forceCommutess (FL (RebaseFixup p) wY wZ
ps FL (RebaseFixup p) wY wZ
-> FL (WDDNamed p) wZ wY
-> (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wY wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wZ wY
qs) of
qs' :: FL (WDDNamed p) wY wZ
qs' :> ps' :: FL (RebaseFixup p) wZ wY
ps' ->
case TotalCommuteFn (RebaseName p) (WDDNamed p)
-> (:>) (RebaseName p) (FL (WDDNamed p)) wX wZ
-> (:>) (FL (WDDNamed p)) (RebaseName p) wX wZ
forall (p1 :: * -> * -> *) (p2 :: * -> * -> *).
TotalCommuteFn p1 p2 -> TotalCommuteFn p1 (FL p2)
totalCommuterIdFL TotalCommuteFn (RebaseName p) (WDDNamed p)
forall (p :: * -> * -> *) wX wY.
(:>) (RebaseName p) (WDDNamed p) wX wY
-> (:>) (WDDNamed p) (RebaseName p) wX wY
forceCommuteName (RebaseName p wX wY
n RebaseName p wX wY
-> FL (WDDNamed p) wY wZ
-> (:>) (RebaseName p) (FL (WDDNamed p)) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wY wZ
qs') of
qs'' :: FL (WDDNamed p) wX wZ
qs'' :> n' :: RebaseName p wZ wZ
n' -> FL (WDDNamed p) wX wZ
qs'' FL (WDDNamed p) wX wZ
-> FL (RebaseFixup p) wZ wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (RebaseName p wZ wZ -> RebaseFixup p wZ wZ
forall (p :: * -> * -> *) wX wY.
RebaseName p wX wY -> RebaseFixup p wX wY
NameFixup RebaseName p wZ wZ
n' RebaseFixup p wZ wZ
-> FL (RebaseFixup p) wZ wY -> FL (RebaseFixup p) wZ wY
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (RebaseFixup p) wZ wY
ps')
forceCommutess ((PrimFixup p :: PrimOf p wX wY
p :>: ps :: FL (RebaseFixup p) wY wZ
ps) :> qs :: FL (WDDNamed p) wZ wY
qs) =
case (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wY wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wY wY
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forceCommutess (FL (RebaseFixup p) wY wZ
ps FL (RebaseFixup p) wY wZ
-> FL (WDDNamed p) wZ wY
-> (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wY wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wZ wY
qs) of
qs' :: FL (WDDNamed p) wY wZ
qs' :> ps' :: FL (RebaseFixup p) wZ wY
ps' ->
case (:>) (PrimOf p) (FL (WDDNamed p)) wX wZ
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wZ
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (PrimOf p) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (PrimOf p)) wX wY
forceCommutesPrim (PrimOf p wX wY
p PrimOf p wX wY
-> FL (WDDNamed p) wY wZ -> (:>) (PrimOf p) (FL (WDDNamed p)) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (WDDNamed p) wY wZ
qs') of
qs'' :: FL (WDDNamed p) wX wZ
qs'' :> p' :: FL (PrimOf p) wZ wZ
p' -> FL (WDDNamed p) wX wZ
qs'' FL (WDDNamed p) wX wZ
-> FL (RebaseFixup p) wZ wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> ((forall wW wY. PrimOf p wW wY -> RebaseFixup p wW wY)
-> FL (PrimOf p) wZ wZ -> FL (RebaseFixup p) wZ wZ
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. PrimOf p wW wY -> RebaseFixup p wW wY
forall (p :: * -> * -> *) wX wY.
PrimPatch (PrimOf p) =>
PrimOf p wX wY -> RebaseFixup p wX wY
PrimFixup FL (PrimOf p) wZ wZ
p' FL (RebaseFixup p) wZ wZ
-> FL (RebaseFixup p) wZ wY -> FL (RebaseFixup p) wZ wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ FL (RebaseFixup p) wZ wY
ps')
extractRebaseSelect :: (Merge p, Invert p, Effect p, FromPrim p, PrimPatchBase p)
=> FL (RebaseSelect p) wX wY
-> (FL (WDDNamed p) :> FL (RebaseFixup p)) wX wY
NilFL = FL (WDDNamed p) wX wX
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL FL (WDDNamed p) wX wX
-> FL (RebaseFixup p) wX wX
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wX
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wX wX
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
extractRebaseSelect (RSFwd fixups :: FL (RebaseFixup p) wX wY
fixups toedit :: Named p wY wY
toedit :>: rest :: FL (RebaseSelect p) wY wY
rest)
= case FL (RebaseSelect p) wY wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wY wY
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p, PrimPatchBase p) =>
FL (RebaseSelect p) wX wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
extractRebaseSelect FL (RebaseSelect p) wY wY
rest of
toedits2 :: FL (WDDNamed p) wY wZ
toedits2 :> fixups2 :: FL (RebaseFixup p) wZ wY
fixups2 ->
case (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wX wZ
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wZ
forall (p :: * -> * -> *) wX wY.
(Merge p, Invert p, Effect p, FromPrim p) =>
(:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wX wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forceCommutess (FL (RebaseFixup p) wX wY
fixups FL (RebaseFixup p) wX wY
-> FL (WDDNamed p) wY wZ
-> (:>) (FL (RebaseFixup p)) (FL (WDDNamed p)) wX wZ
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (Named p wY wY -> [PatchInfo] -> WithDroppedDeps (Named p) wY wY
forall (p :: * -> * -> *) wX wY.
p wX wY -> [PatchInfo] -> WithDroppedDeps p wX wY
WithDroppedDeps Named p wY wY
toedit [] WithDroppedDeps (Named p) wY wY
-> FL (WDDNamed p) wY wZ -> FL (WDDNamed p) wY wZ
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (WDDNamed p) wY wZ
toedits2)) of
toedits' :: FL (WDDNamed p) wX wZ
toedits' :> fixups' :: FL (RebaseFixup p) wZ wZ
fixups' ->
FL (WDDNamed p) wX wZ
toedits' FL (WDDNamed p) wX wZ
-> FL (RebaseFixup p) wZ wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> (FL (RebaseFixup p) wZ wZ
fixups' FL (RebaseFixup p) wZ wZ
-> FL (RebaseFixup p) wZ wY -> FL (RebaseFixup p) wZ wY
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ FL (RebaseFixup p) wZ wY
fixups2)
extractRebaseSelect (RSRev{} :>: _) = (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forall a. a
impossible
reifyRebaseSelect :: forall p wX wY
. (PrimPatchBase p, FromPrim p)
=> FL (RebaseSelect p) wX wY
-> IO ((FL (WDDNamed p) :> FL (RebaseFixup p)) wX wY)
reifyRebaseSelect :: FL (RebaseSelect p) wX wY
-> IO ((:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY)
reifyRebaseSelect rs :: FL (RebaseSelect p) wX wY
rs = do FL (WDDNamed p) wX wY
res <- FL (FL (WDDNamed p)) wX wY -> FL (WDDNamed p) wX wY
forall (a :: * -> * -> *) wX wZ. FL (FL a) wX wZ -> FL a wX wZ
concatFL (FL (FL (WDDNamed p)) wX wY -> FL (WDDNamed p) wX wY)
-> IO (FL (FL (WDDNamed p)) wX wY) -> IO (FL (WDDNamed p) wX wY)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall wW wY. RebaseSelect p wW wY -> IO (FL (WDDNamed p) wW wY))
-> FL (RebaseSelect p) wX wY -> IO (FL (FL (WDDNamed p)) wX wY)
forall (m :: * -> *) (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
Monad m =>
(forall wW wY. a wW wY -> m (b wW wY))
-> FL a wX wZ -> m (FL b wX wZ)
mapFL_FL_M forall wW wY. RebaseSelect p wW wY -> IO (FL (WDDNamed p) wW wY)
reifyOne FL (RebaseSelect p) wX wY
rs
(:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
-> IO ((:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY)
forall (m :: * -> *) a. Monad m => a -> m a
return (FL (WDDNamed p) wX wY
res FL (WDDNamed p) wX wY
-> FL (RebaseFixup p) wY wY
-> (:>) (FL (WDDNamed p)) (FL (RebaseFixup p)) wX wY
forall (a1 :: * -> * -> *) (a2 :: * -> * -> *) wX wY wZ.
a1 wX wZ -> a2 wZ wY -> (:>) a1 a2 wX wY
:> FL (RebaseFixup p) wY wY
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
where reifyOne :: RebaseSelect p wA wB -> IO (FL (WDDNamed p) wA wB)
reifyOne :: RebaseSelect p wA wB -> IO (FL (WDDNamed p) wA wB)
reifyOne (RSFwd fixups :: FL (RebaseFixup p) wA wY
fixups toedit :: Named p wY wB
toedit) =
case FL (RebaseFixup p) wA wY
-> (:>) (FL (RebaseName p)) (FL (PrimOf p)) wA wY
forall (p :: * -> * -> *) wX wY.
PrimPatchBase p =>
FL (RebaseFixup p) wX wY
-> (:>) (FL (RebaseName p)) (FL (PrimOf p)) wX wY
flToNamesPrims FL (RebaseFixup p) wA wY
fixups of
names :: FL (RebaseName p) wA wZ
names :> NilFL ->
FL (WDDNamed p) wA wB -> IO (FL (WDDNamed p) wA wB)
forall (m :: * -> *) a. Monad m => a -> m a
return ((forall wW wY.
RebaseName p wW wY -> WithDroppedDeps (Named p) wW wY)
-> FL (RebaseName p) wA wZ -> FL (WDDNamed p) wA wZ
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL (Named p wW wY -> WithDroppedDeps (Named p) wW wY
forall (p :: * -> * -> *) wX wY. p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps (Named p wW wY -> WithDroppedDeps (Named p) wW wY)
-> (RebaseName p wW wY -> Named p wW wY)
-> RebaseName p wW wY
-> WithDroppedDeps (Named p) wW wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RebaseName p wW wY -> Named p wW wY
forall (p :: * -> * -> *) wX wY.
RebaseName p wX wY -> Named p wX wY
mkDummy) FL (RebaseName p) wA wZ
names FL (WDDNamed p) wA wZ
-> FL (WDDNamed p) wZ wB -> FL (WDDNamed p) wA wB
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ Named p wY wB -> WithDroppedDeps (Named p) wY wB
forall (p :: * -> * -> *) wX wY. p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps Named p wY wB
toedit WithDroppedDeps (Named p) wY wB
-> FL (WDDNamed p) wB wB -> FL (WDDNamed p) wY wB
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (WDDNamed p) wB wB
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
names :: FL (RebaseName p) wA wZ
names :> prims :: FL (PrimOf p) wZ wY
prims -> do
Named p wZ wY
n <- FL (PrimOf p) wZ wY -> IO (Named p wZ wY)
forall (p :: * -> * -> *) wX wY.
FromPrim p =>
FL (PrimOf p) wX wY -> IO (Named p wX wY)
mkReified FL (PrimOf p) wZ wY
prims
FL (WDDNamed p) wA wB -> IO (FL (WDDNamed p) wA wB)
forall (m :: * -> *) a. Monad m => a -> m a
return ((forall wW wY.
RebaseName p wW wY -> WithDroppedDeps (Named p) wW wY)
-> FL (RebaseName p) wA wZ -> FL (WDDNamed p) wA wZ
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL (Named p wW wY -> WithDroppedDeps (Named p) wW wY
forall (p :: * -> * -> *) wX wY. p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps (Named p wW wY -> WithDroppedDeps (Named p) wW wY)
-> (RebaseName p wW wY -> Named p wW wY)
-> RebaseName p wW wY
-> WithDroppedDeps (Named p) wW wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RebaseName p wW wY -> Named p wW wY
forall (p :: * -> * -> *) wX wY.
RebaseName p wX wY -> Named p wX wY
mkDummy) FL (RebaseName p) wA wZ
names FL (WDDNamed p) wA wZ
-> FL (WDDNamed p) wZ wB -> FL (WDDNamed p) wA wB
forall (a :: * -> * -> *) wX wY wZ.
FL a wX wY -> FL a wY wZ -> FL a wX wZ
+>+ Named p wZ wY -> WithDroppedDeps (Named p) wZ wY
forall (p :: * -> * -> *) wX wY. p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps Named p wZ wY
n WithDroppedDeps (Named p) wZ wY
-> FL (WDDNamed p) wY wB -> FL (WDDNamed p) wZ wB
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: Named p wY wB -> WithDroppedDeps (Named p) wY wB
forall (p :: * -> * -> *) wX wY. p wX wY -> WithDroppedDeps p wX wY
noDroppedDeps Named p wY wB
toedit WithDroppedDeps (Named p) wY wB
-> FL (WDDNamed p) wB wB -> FL (WDDNamed p) wY wB
forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: FL (WDDNamed p) wB wB
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
reifyOne (RSRev{}) = IO (FL (WDDNamed p) wA wB)
forall a. a
impossible
mkReified :: FromPrim p => FL (PrimOf p) wX wY -> IO (Named p wX wY)
mkReified :: FL (PrimOf p) wX wY -> IO (Named p wX wY)
mkReified ps :: FL (PrimOf p) wX wY
ps = do
let name :: String
name = "Reified fixup patch"
let desc :: [a]
desc = []
String
date <- IO String
getIsoDateTime
let author :: String
author = "Invalid <invalid@invalid>"
String
-> String -> String -> [String] -> FL p wX wY -> IO (Named p wX wY)
forall (p :: * -> * -> *) wX wY.
String
-> String -> String -> [String] -> FL p wX wY -> IO (Named p wX wY)
namepatch String
date String
name String
author [String]
forall a. [a]
desc ((forall wW wY. PrimOf p wW wY -> p wW wY)
-> FL (PrimOf p) wX wY -> FL p wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. PrimOf p wW wY -> p wW wY
forall (p :: * -> * -> *) wX wY.
FromPrim p =>
PrimOf p wX wY -> p wX wY
fromPrim FL (PrimOf p) wX wY
ps)
mkDummy :: RebaseName p wX wY -> Named p wX wY
mkDummy :: RebaseName p wX wY -> Named p wX wY
mkDummy (AddName pi :: PatchInfo
pi) = PatchInfo -> FL p wX wY -> Named p wX wY
forall (p :: * -> * -> *) wX wY.
PatchInfo -> FL p wX wY -> Named p wX wY
infopatch PatchInfo
pi (FL p Any Any -> FL p wX wY
forall (a :: * -> * -> *) wX wY wB wC. a wX wY -> a wB wC
unsafeCoerceP FL p Any Any
forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
mkDummy (DelName _) = String -> Named p wX wY
forall a. HasCallStack => String -> a
error "internal error: can't make a dummy patch from a delete"
mkDummy (Rename _ _) = String -> Named p wX wY
forall a. HasCallStack => String -> a
error "internal error: can't make a dummy patch from a rename"
instance CommuteNoConflicts (RebaseChange p) where
commuteNoConflicts :: (:>) (RebaseChange p) (RebaseChange p) wX wY
-> Maybe ((:>) (RebaseChange p) (RebaseChange p) wX wY)
commuteNoConflicts _ = Maybe ((:>) (RebaseChange p) (RebaseChange p) wX wY)
forall a. a
impossible
instance IsHunk (RebaseChange p) where
isHunk :: RebaseChange p wX wY -> Maybe (FileHunk wX wY)
isHunk _ = Maybe (FileHunk wX wY)
forall a. Maybe a
Nothing
instance PatchListFormat (RebaseChange p)
instance ( PrimPatchBase p, Apply p, Invert p
, PatchInspect p
, ApplyState p ~ ApplyState (PrimOf p)
)
=> Matchable (RebaseChange p)