packages feed

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 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