cabal-bounds 0.4.1 → 0.5
raw patch · 7 files changed
+45/−136 lines, 7 filesdep +cabal-lensesPVP ok
version bump matches the API change (PVP)
Dependencies added: cabal-lenses
API changes (from Hackage documentation)
Files
- cabal-bounds.cabal +2/−2
- lib/CabalBounds/Dependencies.hs +8/−8
- lib/CabalBounds/Drop.hs +7/−14
- lib/CabalBounds/Lenses.hs +0/−55
- lib/CabalBounds/Main.hs +2/−2
- lib/CabalBounds/Sections.hs +12/−35
- lib/CabalBounds/Update.hs +14/−20
cabal-bounds.cabal view
@@ -1,5 +1,5 @@ name: cabal-bounds-version: 0.4.1+version: 0.5 cabal-version: >=1.9.2 build-type: Simple license: BSD3@@ -178,6 +178,7 @@ unordered-containers >=0.2.3.3 && <0.3, transformers >=0.3.0.0 && <0.4, either >=4.1.1 && <4.2,+ cabal-lenses >=0.1 && <0.2, Cabal >=1.18.0 && <1.21 exposed-modules: CabalBounds.Args@@ -194,7 +195,6 @@ CabalBounds.Dependencies CabalBounds.Drop CabalBounds.Update- CabalBounds.Lenses ghc-options: -W executable cabal-bounds
lib/CabalBounds/Dependencies.hs view
@@ -3,7 +3,7 @@ module CabalBounds.Dependencies ( Dependencies(..) , dependencies- , filterDependencies+ , filterDependency ) where import Control.Lens@@ -28,12 +28,12 @@ = AllDependencies -filterDependencies :: Dependencies -> Traversal' [Dependency] Dependency-filterDependencies AllDependencies =- traversed+filterDependency :: Dependencies -> Traversal' Dependency Dependency+filterDependency AllDependencies =+ filtered (const True) -filterDependencies (OnlyDependencies deps) =- traversed . filtered (\(Dependency (PackageName pkgName) _) -> pkgName `elem` deps)+filterDependency (OnlyDependencies deps) =+ filtered (\(Dependency (PackageName pkgName) _) -> pkgName `elem` deps) -filterDependencies (IgnoreDependencies deps) =- traversed . filtered (\(Dependency (PackageName pkgName) _) -> pkgName `notElem` deps)+filterDependency (IgnoreDependencies deps) =+ filtered (\(Dependency (PackageName pkgName) _) -> pkgName `notElem` deps)
lib/CabalBounds/Drop.hs view
@@ -7,31 +7,24 @@ import Prelude hiding (drop) import Control.Lens import CabalBounds.Bound (DropBound(..))-import CabalBounds.Sections (Sections(..), dependenciesOf)-import CabalBounds.Dependencies (Dependencies, filterDependencies)-import qualified CabalBounds.Lenses as L+import CabalBounds.Dependencies (Dependencies, filterDependency)+import qualified CabalLenses as CL import Data.List (foldl') import Distribution.PackageDescription (GenericPackageDescription) import Distribution.Package (Dependency(..)) import Distribution.Version (mkVersionIntervals, fromVersionIntervals, asVersionIntervals, UpperBound(..), anyVersion) -drop :: DropBound -> Sections -> Dependencies -> GenericPackageDescription -> GenericPackageDescription-drop bound AllSections deps pkgDescrp =- pkgDescrp & L.allDependencies . filterDeps %~ dropFromDep- where- filterDeps = filterDependencies deps- dropFromDep = dropFromDependency bound---drop bound (Sections sections) deps pkgDescrp =+drop :: DropBound -> [CL.Section] -> Dependencies -> GenericPackageDescription -> GenericPackageDescription+drop bound sections deps pkgDescrp = foldl' dropFromSection pkgDescrp sections where dropFromSection pkgDescrp section =- pkgDescrp & dependenciesOf section . filterDeps %~ dropFromDep+ pkgDescrp & CL.dependencyIf condVars section . filterDep %~ dropFromDep - filterDeps = filterDependencies deps+ filterDep = filterDependency deps dropFromDep = dropFromDependency bound+ condVars = CL.fromDefaults pkgDescrp dropFromDependency :: DropBound -> Dependency -> Dependency
− lib/CabalBounds/Lenses.hs
@@ -1,55 +0,0 @@-{-# LANGUAGE TemplateHaskell, Rank2Types #-}--module CabalBounds.Lenses- ( vbranch- , vtags- , allDependencies- , dependenciesOfLib- , dependenciesOfAllExes- , dependenciesOfExe- , dependenciesOfAllTests- , dependenciesOfTest- , dependenciesOfAllBenchms- , dependenciesOfBenchm- ) where--import Distribution.PackageDescription-import Distribution.Package-import Distribution.Version-import Control.Lens-import Data.Data.Lens--makeLensesFor [ ("condLibrary" , "condLibraryL")- , ("condExecutables", "condExecutablesL")- , ("condTestSuites" , "condTestSuitesL")- , ("condBenchmarks" , "condBenchmarksL")- ] ''GenericPackageDescription--makeLensesFor [ ("versionBranch", "vbranch")- , ("versionTags" , "vtags")- ] ''Version---allDependencies :: Traversal' GenericPackageDescription [Dependency]-allDependencies = biplate--dependenciesOfLib :: Traversal' GenericPackageDescription [Dependency]-dependenciesOfLib = condLibraryL . _Just . biplate--dependenciesOfAllExes :: Traversal' GenericPackageDescription [Dependency]-dependenciesOfAllExes = condExecutablesL . traversed . _2 . biplate--dependenciesOfExe :: String -> Traversal' GenericPackageDescription [Dependency]-dependenciesOfExe exe = condExecutablesL . traversed . filtered ((== exe) . fst) . _2 . biplate--dependenciesOfAllTests :: Traversal' GenericPackageDescription [Dependency]-dependenciesOfAllTests = condTestSuitesL . traversed . _2 . biplate--dependenciesOfTest :: String -> Traversal' GenericPackageDescription [Dependency]-dependenciesOfTest test = condTestSuitesL . traversed . filtered ((== test) . fst) . _2 . biplate--dependenciesOfAllBenchms :: Traversal' GenericPackageDescription [Dependency]-dependenciesOfAllBenchms = condBenchmarksL . traversed . _2 . biplate--dependenciesOfBenchm :: String -> Traversal' GenericPackageDescription [Dependency]-dependenciesOfBenchm benchm = condBenchmarksL . traversed . filtered ((== benchm) . fst) . _2 . biplate
lib/CabalBounds/Main.hs view
@@ -26,14 +26,14 @@ cabalBounds args@A.Drop {} = leftToJust <$> runEitherT (do pkgDescrp <- packageDescription $ A.cabalFile args- let pkgDescrp' = D.drop (B.boundOfDrop args) (S.sections args) (DP.dependencies args) pkgDescrp+ let pkgDescrp' = D.drop (B.boundOfDrop args) (S.sections args pkgDescrp) (DP.dependencies args) pkgDescrp liftIO $ writeFile (A.outputFile args) (showGenericPackageDescription pkgDescrp')) cabalBounds args@A.Update {} = leftToJust <$> runEitherT (do pkgDescrp <- packageDescription $ A.cabalFile args buildInfo <- localBuildInfo $ A.setupConfigFile args- let pkgDescrp' = U.update (B.boundOfUpdate args) (S.sections args) (DP.dependencies args) pkgDescrp buildInfo+ let pkgDescrp' = U.update (B.boundOfUpdate args) (S.sections args pkgDescrp) (DP.dependencies args) pkgDescrp buildInfo liftIO $ writeFile (A.outputFile args) (showGenericPackageDescription pkgDescrp'))
lib/CabalBounds/Sections.hs view
@@ -1,45 +1,22 @@-{-# LANGUAGE PatternGuards, Rank2Types #-}+{-# LANGUAGE PatternGuards #-} module CabalBounds.Sections- ( Sections(..)- , Section(..)- , sections- , dependenciesOf+ ( sections ) where -import Control.Lens-import Distribution.PackageDescription (GenericPackageDescription(..))-import Distribution.Package (Dependency(..))+import Distribution.PackageDescription (GenericPackageDescription) import CabalBounds.Args (Args) import qualified CabalBounds.Args as A-import qualified CabalBounds.Lenses as L--data Sections = Sections [Section]- | AllSections- deriving (Show, Eq)---- | A section of the cabal file.-data Section = Library- | Executable String- | TestSuite String- | Benchmark String- deriving (Show, Eq)+import qualified CabalLenses as CL -sections :: Args -> Sections-sections args- | ts@(_:_) <- concat [ [ Library | A.library args ]- , map Executable (A.executable args)- , map TestSuite (A.testSuite args)- , map Benchmark (A.benchmark args)+sections :: Args -> GenericPackageDescription -> [CL.Section]+sections args pkgDescrp+ | ss@(_:_) <- concat [ [ CL.Library | A.library args ]+ , map CL.Executable (A.executable args)+ , map CL.TestSuite (A.testSuite args)+ , map CL.Benchmark (A.benchmark args) ]- = Sections ts+ = ss | otherwise- = AllSections---dependenciesOf :: Section -> Traversal' GenericPackageDescription [Dependency]-dependenciesOf Library = L.dependenciesOfLib-dependenciesOf (Executable exe) = L.dependenciesOfExe exe-dependenciesOf (TestSuite test) = L.dependenciesOfTest test-dependenciesOf (Benchmark benchm) = L.dependenciesOfBenchm benchm+ = CL.allSections pkgDescrp
lib/CabalBounds/Update.hs view
@@ -10,10 +10,9 @@ import qualified Distribution.InstalledPackageInfo as PI import Control.Lens import CabalBounds.Bound (UpdateBound(..))-import CabalBounds.Sections (Sections(..), dependenciesOf)-import CabalBounds.Dependencies (Dependencies, filterDependencies)+import CabalBounds.Dependencies (Dependencies, filterDependency) import CabalBounds.VersionComp (VersionComp(..))-import qualified CabalBounds.Lenses as L+import qualified CabalLenses as CL import Data.List (foldl') import qualified Data.HashMap.Strict as HM import Data.Maybe (fromMaybe)@@ -22,21 +21,16 @@ type InstalledPackages = HM.HashMap PkgName V.Version -update :: UpdateBound -> Sections -> Dependencies -> D.GenericPackageDescription -> BI.LocalBuildInfo -> D.GenericPackageDescription-update bound AllSections deps pkgDescrp buildInfo =- pkgDescrp & L.allDependencies . filterDeps %~ updateDep- where- filterDeps = filterDependencies deps- updateDep = updateDependency bound (installedPackages buildInfo)--update bound (Sections sections) deps pkgDescrp buildInfo =+update :: UpdateBound -> [CL.Section] -> Dependencies -> D.GenericPackageDescription -> BI.LocalBuildInfo -> D.GenericPackageDescription+update bound sections deps pkgDescrp buildInfo = foldl' updateSection pkgDescrp sections where updateSection pkgDescrp section =- pkgDescrp & dependenciesOf section . filterDeps %~ updateDep+ pkgDescrp & CL.dependencyIf condVars section . filterDep %~ updateDep - filterDeps = filterDependencies deps- updateDep = updateDependency bound (installedPackages buildInfo)+ filterDep = filterDependency deps+ updateDep = updateDependency bound (installedPackages buildInfo)+ condVars = CL.fromDefaults pkgDescrp updateDependency :: UpdateBound -> InstalledPackages -> P.Dependency -> P.Dependency@@ -81,20 +75,20 @@ compOf :: VersionComp -> V.Version -> V.Version Major1 `compOf` version =- version & L.vbranch %~ take 1- & L.vtags .~ []+ version & CL.versionBranchL %~ take 1+ & CL.versionTagsL .~ [] Major2 `compOf` version =- version & L.vbranch %~ take 2- & L.vtags .~ []+ version & CL.versionBranchL %~ take 2+ & CL.versionTagsL .~ [] Minor `compOf` version =- version & L.vtags .~ []+ version & CL.versionTagsL .~ [] nextVersion :: V.Version -> V.Version nextVersion version =- version & L.vbranch %~ increaseLastComp+ version & CL.versionBranchL %~ increaseLastComp where increaseLastComp = reverse . (& ix 0 %~ (+ 1)) . reverse