filediff 0.1.0.6 → 0.1.0.7
raw patch · 4 files changed
+82/−2 lines, 4 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Filediff.Stats: numAddedLines :: Diff -> Int
+ Filediff.Stats: numDeletedLines :: Diff -> Int
+ Filediff.Stats: numFilesAffected :: Diff -> Int
+ Filediff.Types: isAdd :: FileChange -> Bool
+ Filediff.Types: isDel :: FileChange -> Bool
+ Filediff.Types: isMod :: FileChange -> Bool
+ Filediff.Types: seqDiff :: FileChange -> SeqDiff Line
Files
- Tests/test-filediff.hs +21/−0
- filediff.cabal +2/−2
- src/Filediff/Stats.hs +33/−0
- src/Filediff/Types.hs +26/−0
Tests/test-filediff.hs view
@@ -37,6 +37,7 @@ import Filediff.Sequence (SeqDiff(..)) import qualified Filediff.Sequence as FSeq import qualified Filediff as F+import qualified Filediff.Stats as F import qualified Filediff.Types as F -- helper functions@@ -600,6 +601,23 @@ actualDiff <- F.diffDirectories a b actualDiff @?= relativePathExpectedDiff +testDiffStats :: Assertion+testDiffStats = do+ D.createDirectory "a"+ D.createDirectory "b"++ createFileWithContents "a/common" "x\na\nx"+ createFileWithContents "b/common" "x\nb\nx"++ createFileWithContents "a/afile" "a\na"+ createFileWithContents "b/bfile" "b\nb\nb"++ diff <- F.diffDirectories "a" "b"++ F.numFilesAffected diff @?= 3+ F.numAddedLines diff @?= 1 + 3+ F.numDeletedLines diff @?= 1 + 2+ -- tests tests :: TestTree@@ -716,6 +734,9 @@ , testCase "Testing that paths are relative (edge cases)" (runTest testRelativePathnessEdgeCases)+ , testCase+ "Testing diff statistics"+ (runTest testDiffStats) ] main :: IO ()
filediff.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: filediff-version: 0.1.0.6+version: 0.1.0.7 synopsis: Diffing and patching module description: `filediff` is a Haskell library for creating diffs, and applying diffs to files and directories. homepage: https://github.com/bgwines/filediff@@ -20,7 +20,7 @@ location: git://github.com/bgwines/filediff.git library- exposed-modules: Filediff, Filediff.Types, Filediff.Sequence+ exposed-modules: Filediff, Filediff.Types, Filediff.Sequence, Filediff.Stats other-modules: Filediff.Utils -- other-extensions: build-depends: base >=4.7 && <4.8, mtl, time, directory, either, transformers, data-memocombinators, Zora >=1.1.22, text, data-default, tasty, tasty-hunit
+ src/Filediff/Stats.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE InstanceSigs #-}++-- | Statistics on diffs+module Filediff.Stats+( -- * basic stats+ numFilesAffected+, numAddedLines+, numDeletedLines+) where++import Filediff.Types+import Filediff.Sequence++-- | Number of files added, modified, or deleted in a diff.+numFilesAffected :: Diff -> Int+numFilesAffected = length . filediffs++numMatchingLines :: (FileChange -> Bool) -> (SeqDiff Line -> [b]) -> Diff -> Int+numMatchingLines isMatchingChange matchingLines+ = sum+ . map (length . matchingLines . seqDiff)+ . filter isMatchingChange+ . map change+ . filediffs++-- | Number of lines added in a diff.+numAddedLines :: Diff -> Int+numAddedLines = numMatchingLines (not . isDel) adds++-- | Number of lines deleted in a diff.+numDeletedLines :: Diff -> Int+numDeletedLines = numMatchingLines (not . isAdd) dels
src/Filediff/Types.hs view
@@ -6,6 +6,10 @@ ( Filediff(..) , Diff(..) , FileChange(..)+, seqDiff+, isDel+, isMod+, isAdd , Line , Error ) where@@ -42,6 +46,28 @@ = Del (SeqDiff Line) | Mod (SeqDiff Line) | Add (SeqDiff Line) deriving (Eq, Show, Generic)++-- | Gets the 'SeqDiff' stored in a 'FileChange'.+seqDiff :: FileChange -> SeqDiff Line+seqDiff (Del diff) = diff+seqDiff (Mod diff) = diff+seqDiff (Add diff) = diff++-- | Whether a 'FileChange' is a deletion or not.+isDel :: FileChange -> Bool+isDel (Del _) = True+isDel (Mod _) = False+isDel (Add _) = False+-- | Whether a 'FileChange' is a modification or not.+isMod :: FileChange -> Bool+isMod (Del _) = False+isMod (Mod _) = True+isMod (Add _) = False+-- | Whether a 'FileChange' is a addition or not.+isAdd :: FileChange -> Bool+isAdd (Del _) = False+isAdd (Mod _) = False+isAdd (Add _) = True instance Monoid FileChange where mempty :: FileChange