module Darcs.Patch.Inspect ( PatchInspect(..) ) where import Prelude () import Darcs.Prelude import Darcs.Patch.Witnesses.Ordered ( FL, RL, reverseRL, mapFL ) import qualified Data.ByteString.Char8 as BC import Data.List ( nub ) class PatchInspect p where listTouchedFiles :: p wX wY -> [FilePath] hunkMatches :: (BC.ByteString -> Bool) -> p wX wY -> Bool instance PatchInspect p => PatchInspect (FL p) where listTouchedFiles :: FL p wX wY -> [FilePath] listTouchedFiles xs :: FL p wX wY xs = [FilePath] -> [FilePath] forall a. Eq a => [a] -> [a] nub ([FilePath] -> [FilePath]) -> [FilePath] -> [FilePath] forall a b. (a -> b) -> a -> b $ [[FilePath]] -> [FilePath] forall (t :: * -> *) a. Foldable t => t [a] -> [a] concat ([[FilePath]] -> [FilePath]) -> [[FilePath]] -> [FilePath] forall a b. (a -> b) -> a -> b $ (forall wW wZ. p wW wZ -> [FilePath]) -> FL p wX wY -> [[FilePath]] forall (a :: * -> * -> *) b wX wY. (forall wW wZ. a wW wZ -> b) -> FL a wX wY -> [b] mapFL forall wW wZ. p wW wZ -> [FilePath] forall (p :: * -> * -> *) wX wY. PatchInspect p => p wX wY -> [FilePath] listTouchedFiles FL p wX wY xs hunkMatches :: (ByteString -> Bool) -> FL p wX wY -> Bool hunkMatches f :: ByteString -> Bool f = [Bool] -> Bool forall (t :: * -> *). Foldable t => t Bool -> Bool or ([Bool] -> Bool) -> (FL p wX wY -> [Bool]) -> FL p wX wY -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . (forall wW wZ. p wW wZ -> Bool) -> FL p wX wY -> [Bool] forall (a :: * -> * -> *) b wX wY. (forall wW wZ. a wW wZ -> b) -> FL a wX wY -> [b] mapFL ((ByteString -> Bool) -> p wW wZ -> Bool forall (p :: * -> * -> *) wX wY. PatchInspect p => (ByteString -> Bool) -> p wX wY -> Bool hunkMatches ByteString -> Bool f) instance PatchInspect p => PatchInspect (RL p) where listTouchedFiles :: RL p wX wY -> [FilePath] listTouchedFiles = FL p wX wY -> [FilePath] forall (p :: * -> * -> *) wX wY. PatchInspect p => p wX wY -> [FilePath] listTouchedFiles (FL p wX wY -> [FilePath]) -> (RL p wX wY -> FL p wX wY) -> RL p wX wY -> [FilePath] forall b c a. (b -> c) -> (a -> b) -> a -> c . RL p wX wY -> FL p wX wY forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> FL a wX wZ reverseRL hunkMatches :: (ByteString -> Bool) -> RL p wX wY -> Bool hunkMatches f :: ByteString -> Bool f = (ByteString -> Bool) -> FL p wX wY -> Bool forall (p :: * -> * -> *) wX wY. PatchInspect p => (ByteString -> Bool) -> p wX wY -> Bool hunkMatches ByteString -> Bool f (FL p wX wY -> Bool) -> (RL p wX wY -> FL p wX wY) -> RL p wX wY -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . RL p wX wY -> FL p wX wY forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> FL a wX wZ reverseRL