packages feed

cabal-install-parsers 0.5 → 0.6

raw patch · 4 files changed

+85/−44 lines, 4 filesdep ~tree-diffPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: tree-diff

API changes (from Hackage documentation)

- Cabal.Index: [riCabal] :: ReleaseInfo -> !SHA256
- Cabal.Index: [riTarball] :: ReleaseInfo -> !SHA256
- Cabal.Index: data InvalidHash
- Cabal.Index: instance GHC.Exception.Type.Exception Cabal.Index.InvalidHash
- Cabal.Index: instance GHC.Show.Show Cabal.Index.InvalidHash
+ Cabal.Index: InvalidSize :: PackageName -> Version -> String -> InvalidData
+ Cabal.Index: [riCabalHash] :: ReleaseInfo -> !SHA256
+ Cabal.Index: [riCabalSize] :: ReleaseInfo -> !Word64
+ Cabal.Index: [riTarballHash] :: ReleaseInfo -> !SHA256
+ Cabal.Index: [riTarballSize] :: ReleaseInfo -> !Word64
+ Cabal.Index: data InvalidData
+ Cabal.Index: instance GHC.Exception.Type.Exception Cabal.Index.InvalidData
+ Cabal.Index: instance GHC.Show.Show Cabal.Index.InvalidData
- Cabal.Index: InvalidHash :: PackageName -> Version -> String -> InvalidHash
+ Cabal.Index: InvalidHash :: PackageName -> Version -> String -> InvalidData
- Cabal.Index: ReleaseInfo :: !Word32 -> !TarEntryOffset -> !SHA256 -> !SHA256 -> ReleaseInfo
+ Cabal.Index: ReleaseInfo :: !Word32 -> !TarEntryOffset -> !SHA256 -> !Word64 -> !SHA256 -> !Word64 -> ReleaseInfo

Files

Changelog.md view
@@ -1,3 +1,7 @@+## 0.6++- Add sizes of tarball and cabal files to `Cabal.Index.ReleaseInfo` data structure.+ ## 0.5  - Move to use `Cabal-syntax` package
cabal-install-parsers.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.2 name:               cabal-install-parsers-version:            0.5+version:            0.6 synopsis:           Utilities to work with cabal-install files description:   @cabal-install-parsers@ provides parsers for @cabal-install@ files:@@ -15,18 +15,29 @@ homepage:           https://haskell-ci.rtfd.org/ bug-reports:        https://github.com/haskell-CI/haskell-ci/issues license:            GPL-2.0-or-later AND BSD-3-Clause-license-files:      LICENSE LICENSE.GPLv2 LICENSE.GPLv3+license-files:+  LICENSE+  LICENSE.GPLv2+  LICENSE.GPLv3+ author:             Herbert Valerio Riedel, Oleg Grenrus maintainer:         hvr@gnu.org, oleg.grenrus@iki.fi category:           Development build-type:         Simple tested-with:-  GHC ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.1+  GHC ==8.2.2+   || ==8.4.4+   || ==8.6.5+   || ==8.8.4+   || ==8.10.7+   || ==9.0.2+   || ==9.2.5+   || ==9.4.4  extra-source-files:   Changelog.md-  fixtures/*.project   fixtures/*.golden+  fixtures/*.project  source-repository head   type:     git@@ -54,18 +65,18 @@    -- GHC-boot libraries   build-depends:-    , base          >=4.10     && <4.18+    , base          >=4.10      && <4.18     , binary        ^>=0.8.5     , bytestring    ^>=0.10.8.1 || ^>=0.11.1.0     , Cabal-syntax  ^>=3.8.1.0-    , containers    ^>=0.5.7.1 || ^>=0.6.0.1+    , containers    ^>=0.5.7.1  || ^>=0.6.0.1     , deepseq       ^>=1.4.2.0     , directory     ^>=1.3.0.0     , filepath      ^>=1.4.1.1     , parsec        ^>=3.1.13.0     , pretty        ^>=1.1.3.3-    , text          ^>=1.2.3.0 || ^>=2.0.1-    , time          ^>=1.8.0.2 || ^>=1.9.3 || ^>=1.11.1.1 || ^>=1.12.2+    , text          ^>=1.2.3.0  || ^>=2.0.1+    , time          ^>=1.8.0.2  || ^>=1.9.3    || ^>=1.11.1.1 || ^>=1.12.2     , transformers  ^>=0.5.2.0    -- extra dependencies@@ -92,8 +103,8 @@     , base     , base16-bytestring     , bytestring-    , Cabal-syntax     , cabal-install-parsers+    , Cabal-syntax     , containers     , tar @@ -112,8 +123,8 @@   build-depends:     , base     , bytestring-    , Cabal-syntax     , cabal-install-parsers+    , Cabal-syntax     , containers     , directory     , filepath@@ -121,10 +132,10 @@    -- dependencies needing explicit constraints   build-depends:-    , ansi-terminal  >=0.10    && <0.12+    , ansi-terminal  >=0.10     && <0.12     , tasty          ^>=1.4     , tasty-golden   ^>=2.3.1.1-    , tree-diff      ^>=0.2+    , tree-diff      >=0.2      && <0.4  benchmark cabal-parsers-bench   default-language: Haskell2010@@ -136,8 +147,8 @@   build-depends:     , base     , bytestring-    , Cabal-syntax     , cabal-install-parsers+    , Cabal-syntax     , containers     , directory     , filepath
src/Cabal/Index.hs view
@@ -10,7 +10,7 @@     cachedHackageMetadata,     -- ** Exceptions thrown     MetadataParseError (..),-    InvalidHash (..),+    InvalidData (..),     InvalidIndexFile (..),     NoHackageRepository (..),     -- * Metadata types@@ -35,7 +35,7 @@     foldIndex,     IndexEntry (..),     IndexFileType (..),-    ) where+) where  import Prelude hiding (pi) @@ -354,10 +354,12 @@  -- | Package's release information. data ReleaseInfo = ReleaseInfo-    { riRevision  :: !Word32              -- ^ revision number-    , riTarOffset :: !Tar.TarEntryOffset  -- ^ offset into tar file-    , riCabal     :: !SHA256              -- ^ hash of the last revision of @.cabal@ file-    , riTarball   :: !SHA256              -- ^ hash of the @.tar.gz@ file.+    { riRevision    :: !Word32              -- ^ revision number+    , riTarOffset   :: !Tar.TarEntryOffset  -- ^ offset into tar file+    , riCabalHash   :: !SHA256              -- ^ hash of the last revision of @.cabal@ file+    , riCabalSize   :: !Word64              -- ^ size of the last revision of @.cabal@ file+    , riTarballHash :: !SHA256              -- ^ hash of the @.tar.gz@ file+    , riTarballSize :: !Word64              -- ^ size of the @.tar.gz@ file     }   deriving (Eq, Show, Generic) @@ -389,20 +391,30 @@                 digest :: SHA256                 digest = sha256 contents +                size :: Word64+                size = fromIntegral $ BS.length contents+                 offset :: Tar.TarEntryOffset                 offset = entryTarOffset indexEntry                  f :: Maybe TmpPackageInfo -> Maybe TmpPackageInfo                 f Nothing = Just TmpPackageInfo-                    { tmpPiVersions  = Map.singleton ver (TmpReleaseInfo 0 offset (Just digest) Nothing)+                    { tmpPiVersions  = Map.singleton ver TmpReleaseInfo +                        { tmpRiRevision    = 0+                        , tmpRiTarOffset   = offset+                        , tmpRiCabalHash   = Just digest+                        , tmpRiCabalSize   = Just size+                        , tmpRiTarballHash = Nothing+                        , tmpRiTarballSize = Nothing+                        }                     , tmpPiPreferred = C.anyVersion                     }                 f (Just pi) = Just pi { tmpPiVersions = Map.alter g ver (tmpPiVersions pi) }                  g :: Maybe TmpReleaseInfo -> Maybe TmpReleaseInfo-                g Nothing                                 = Just $ TmpReleaseInfo 0        offset (Just digest) Nothing-                g (Just (TmpReleaseInfo _r _o Nothing t)) = Just $ TmpReleaseInfo 0        offset (Just digest) t-                g (Just (TmpReleaseInfo  r _o _c      t)) = Just $ TmpReleaseInfo (succ r) offset (Just digest) t+                g Nothing                                       = Just $ TmpReleaseInfo 0        offset (Just digest) (Just size) Nothing Nothing+                g (Just (TmpReleaseInfo _r _o Nothing _ th ts)) = Just $ TmpReleaseInfo 0        offset (Just digest) (Just size) th      ts+                g (Just (TmpReleaseInfo  r _o _c      _ th ts)) = Just $ TmpReleaseInfo (succ r) offset (Just digest) (Just size) th      ts              PackageJson pn ver -> case A.eitherDecodeStrict contents of                     Left err -> throwIO $ MetadataParseError (entryPath indexEntry) err@@ -413,14 +425,14 @@                       where                         f :: Target -> Maybe TmpPackageInfo -> Maybe TmpPackageInfo                         f t Nothing   = Just TmpPackageInfo-                            { tmpPiVersions  = Map.singleton ver (TmpReleaseInfo 0 0 Nothing (Just (hashSHA256 (targetHashes t))))+                            { tmpPiVersions  = Map.singleton ver $ TmpReleaseInfo 0 0 Nothing Nothing (Just (hashSHA256 (targetHashes t))) (Just (targetLength t))                             , tmpPiPreferred = C.anyVersion                             }                         f t (Just pi) = Just pi { tmpPiVersions = Map.alter (g t) ver (tmpPiVersions pi) }                          g :: Target -> Maybe TmpReleaseInfo -> Maybe TmpReleaseInfo-                        g t Nothing                         = Just $ TmpReleaseInfo 0 0 Nothing (Just (hashSHA256 (targetHashes t)))-                        g t (Just (TmpReleaseInfo r o c _)) = Just $ TmpReleaseInfo r o c       (Just (hashSHA256 (targetHashes t)))+                        g t Nothing                               = Just $ TmpReleaseInfo 0 0 Nothing Nothing (Just (hashSHA256 (targetHashes t))) (Just (targetLength t))+                        g t (Just (TmpReleaseInfo r o ch cs _ _)) = Just $ TmpReleaseInfo r o ch      cs      (Just (hashSHA256 (targetHashes t))) (Just (targetLength t))              PreferredVersions pn                     | BS.null contents -> return m@@ -446,13 +458,17 @@ postCheck :: Map C.PackageName TmpPackageInfo -> IO (Map C.PackageName PackageInfo) postCheck meta = ifor meta $ \pn pi -> do     versions <- ifor (tmpPiVersions pi) $ \ver ri -> do-        cabal   <- maybe (throwIO $ InvalidHash pn ver "cabal")   return (tmpRiCabal   ri)-        tarball <- maybe (throwIO $ InvalidHash pn ver "tarball") return (tmpRiTarball ri)+        cabalHash   <- maybe (throwIO $ InvalidHash pn ver "cabal")   return (tmpRiCabalHash   ri)+        cabalSize   <- maybe (throwIO $ InvalidSize pn ver "cabal")   return (tmpRiCabalSize   ri)+        tarballHash <- maybe (throwIO $ InvalidHash pn ver "tarball") return (tmpRiTarballHash ri)+        tarballSize <- maybe (throwIO $ InvalidSize pn ver "tarball") return (tmpRiTarballSize ri)         return ReleaseInfo-            { riRevision  = tmpRiRevision ri-            , riTarOffset = tmpRiTarOffset ri-            , riCabal     = cabal-            , riTarball   = tarball+            { riRevision    = tmpRiRevision ri+            , riTarOffset   = tmpRiTarOffset ri+            , riCabalHash   = cabalHash+            , riCabalSize   = cabalSize+            , riTarballHash = tarballHash+            , riTarballSize = tarballSize             }      return PackageInfo@@ -470,10 +486,12 @@ instance Exception MetadataParseError  -- | Thrown if we fail consistency check, we don't know a hash for some file.-data InvalidHash = InvalidHash C.PackageName C.Version String+data InvalidData+    = InvalidHash C.PackageName C.Version String+    | InvalidSize C.PackageName C.Version String   deriving (Show) -instance Exception InvalidHash+instance Exception InvalidData  ------------------------------------------------------------------------------- -- Temporary types for indexMetadata@@ -485,10 +503,12 @@     }  data TmpReleaseInfo = TmpReleaseInfo-    { tmpRiRevision  :: !Word32              -- ^ revision number-    , tmpRiTarOffset :: !Tar.TarEntryOffset  -- ^ offset into tar file-    , tmpRiCabal     :: !(Maybe SHA256)      -- ^ hash of the last revision of @.cabal@ file-    , tmpRiTarball   :: !(Maybe SHA256)      -- ^ hash of the @.tar.gz@ file.+    { tmpRiRevision    :: !Word32               -- ^ revision number+    , tmpRiTarOffset   :: !Tar.TarEntryOffset   -- ^ offset into tar file+    , tmpRiCabalHash   :: !(Maybe SHA256)       -- ^ hash of the last revision of @.cabal@ file+    , tmpRiCabalSize   :: !(Maybe Word64)       -- ^ size of the last revision of @.cabal@ file+    , tmpRiTarballHash :: !(Maybe SHA256)       -- ^ hash of the @.tar.gz@ file.+    , tmpRiTarballSize :: !(Maybe Word64)       -- ^ size of the @.tar.gz@ file.     }  -------------------------------------------------------------------------------@@ -656,14 +676,14 @@   deriving Show  data Target = Target-    { _targetLength :: Word-    , targetHashes :: Hashes+    { targetLength :: !Word64+    , targetHashes :: !Hashes     }   deriving Show  data Hashes = Hashes-    { _hashMD5    :: MD5-    , hashSHA256 :: SHA256+    { _hashMD5   :: !MD5+    , hashSHA256 :: !SHA256     }   deriving Show 
test/Index.hs view
@@ -57,12 +57,18 @@                     -- revision and cabal hash check will start failing                     -- tarball hash shouldn't ever change.                     assertEqual "revision" 1 (riRevision ri)+                    assertEqual "cabal size"+                        7251+                        (riCabalSize ri)                     assertEqual "cabal hash"                         (unsafeMkSHA256 "a6f5eddcff9526c786a1b77bdfade54b42f67c066b379bbc4b55ffb291e6c7d6")-                        (riCabal ri)+                        (riCabalHash ri)+                    assertEqual "tarball size"+                        279980+                        (riTarballSize ri)                     assertEqual "tarball hash"                         (unsafeMkSHA256 "17c67cdaca651e18f310b21b2b12bac6bcec5188c3ac0e4b64cc60c94d7e4d2e")-                        (riTarball ri)+                        (riTarballHash ri)                      -- check contents                     withFile indexPath ReadMode $ \hdl -> do