#include "gadts.h"
module Darcs.Repository.ApplyPatches ( applyPatches ) where
import Darcs.Patch.ApplyMonad( ApplyMonad )
import Darcs.MonadProgress ( MonadProgress, ProgressAction(..), runProgressActions)
import Darcs.Patch ( Patchy, apply )
import Darcs.IO ()
import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, hopefully, info )
import Darcs.Patch.Info ( humanFriendly )
import Darcs.Patch.Apply( ApplyState )
import Darcs.Witnesses.Ordered ( FL(..), mapFL )
import Printer ( text, ($$) )
applyPatches :: (MonadProgress m, ApplyMonad m (ApplyState p), Patchy p) => FL (PatchInfoAnd p) C(x y) -> m ()
applyPatches ps = runProgressActions "Applying patch" (mapFL doApply ps)
where doApply hp =
ProgressAction { paAction = apply (hopefully hp)
, paMessage = humanFriendly (info hp)
, paOnError = text "Unapplicable patch:" $$ humanFriendly (info hp) }