Skip to content

Add uploaded_at field in package api #1080

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/Distribution/Server/Features/PackageInfoJSON.hs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import Distribution.Utils.ShortText (fromShortText)
import Data.Foldable (toList)
import Data.Traversable (for)
import qualified Data.List as List
import Data.Time (UTCTime)


data PackageInfoJSONFeature = PackageInfoJSONFeature {
Expand Down Expand Up @@ -130,12 +131,14 @@ initPackageInfoJSONFeature env = do

-- | Pure function for extracting basic package info from a Cabal file
getBasicDescription
:: CabalFileText
:: UTCTime
-- ^ Time of upload
-> CabalFileText
-> Int
-- ^ Metadata revision. This will be added to the resulting
-- @PackageBasicDescription@
-> Either String PackageBasicDescription
getBasicDescription (CabalFileText cf) metadataRev =
getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
let parseResult = PkgDescr.parseGenericPackageDescription (BS.toStrict cf)
in case PkgDescr.runParseResult parseResult of
(_, Right pkg) -> let
Expand All @@ -148,6 +151,7 @@ getBasicDescription (CabalFileText cf) metadataRev =
PkgDescr.licenseRaw pkgd
pbd_homepage = T.pack . fromShortText $ PkgDescr.homepage pkgd
pbd_metadata_revision = metadataRev
pbd_uploaded_at = uploadedAt
in
return $ PackageBasicDescription {..}
(_, Left (_, perrs)) ->
Expand Down Expand Up @@ -201,6 +205,7 @@ servePackageBasicDescription resource preferred packageInfoState dpath = do
pkg <- lookupPackageId resource pkgid

let metadataRevs = fst <$> pkgMetadataRevisions pkg
uploadInfos = snd <$> pkgMetadataRevisions pkg
nMetadata = Vector.length metadataRevs
metadataInd = fromMaybe (nMetadata - 1) metadataRev

Expand All @@ -212,7 +217,8 @@ servePackageBasicDescription resource preferred packageInfoState dpath = do
)

let cabalFile = metadataRevs Vector.! metadataInd
pkgDescr = getBasicDescription cabalFile metadataInd
uploadedAt = fst $ uploadInfos Vector.! metadataInd
pkgDescr = getBasicDescription uploadedAt cabalFile metadataInd
case pkgDescr of
Left e -> Framework.errInternalError [Framework.MText e]
Right d -> return d
Expand Down
16 changes: 10 additions & 6 deletions src/Distribution/Server/Features/PackageInfoJSON/State.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ import Data.Monoid (Sum(..))
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Data.SafeCopy (SafeCopy(..), base, contain,
deriveSafeCopy)
deriveSafeCopy, safeGet, safePut)
import Data.Serialize (Get, get, getListOf, getTwoOf, put,
putListOf, putTwoOf)
import Data.Typeable (Typeable)
import Data.Word (Word8)
import Distribution.License (licenseToSPDX)
import Distribution.Text (display, simpleParse)
import GHC.Generics (Generic)
import Data.Time (UTCTime)

import Distribution.SPDX.License (License)
import Distribution.Package (PackageIdentifier, PackageName)
Expand All @@ -40,8 +41,7 @@ import qualified Distribution.Parsec as Parsec

import qualified Distribution.Server.Features.PreferredVersions as Preferred
import Distribution.Server.Framework.MemSize (MemSize,
memSize,
memSize7)
memSize, memSize8)


-- | Basic information about a package. These values are
Expand All @@ -54,10 +54,10 @@ data PackageBasicDescription = PackageBasicDescription
, pbd_author :: !T.Text
, pbd_homepage :: !T.Text
, pbd_metadata_revision :: !Int
, pbd_uploaded_at :: !UTCTime
} deriving (Eq, Show, Generic)

instance SafeCopy PackageBasicDescription where

putCopy PackageBasicDescription{..} = contain $ do
put (Pretty.prettyShow pbd_license)
put $ T.encodeUtf8 pbd_copyright
Expand All @@ -66,6 +66,7 @@ instance SafeCopy PackageBasicDescription where
put $ T.encodeUtf8 pbd_author
put $ T.encodeUtf8 pbd_homepage
put pbd_metadata_revision
safePut pbd_uploaded_at

getCopy = contain $ do
licenseStr <- get
Expand All @@ -78,6 +79,7 @@ instance SafeCopy PackageBasicDescription where
pbd_author <- T.decodeUtf8 <$> get
pbd_homepage <- T.decodeUtf8 <$> get
pbd_metadata_revision <- get
pbd_uploaded_at <- safeGet
return PackageBasicDescription{..}


Expand All @@ -93,6 +95,7 @@ instance Aeson.ToJSON PackageBasicDescription where
, Key.fromString "author" .= pbd_author
, Key.fromString "homepage" .= pbd_homepage
, Key.fromString "metadata_revision" .= pbd_metadata_revision
, Key.fromString "uploaded_at" .= pbd_uploaded_at
]


Expand All @@ -110,6 +113,7 @@ instance Aeson.FromJSON PackageBasicDescription where
pbd_author <- obj .: Key.fromString "author"
pbd_homepage <- obj .: Key.fromString "homepage"
pbd_metadata_revision <- obj .: Key.fromString "metadata_revision"
pbd_uploaded_at <- obj .: Key.fromString "uploaded_at"
return $
PackageBasicDescription {..}

Expand Down Expand Up @@ -225,8 +229,8 @@ deriveSafeCopy 0 'base ''PackageInfoState

instance MemSize PackageBasicDescription where
memSize PackageBasicDescription{..} =
memSize7 (Pretty.prettyShow pbd_license) pbd_copyright pbd_synopsis
pbd_description pbd_author pbd_homepage pbd_metadata_revision
memSize8 (Pretty.prettyShow pbd_license) pbd_copyright pbd_synopsis
pbd_description pbd_author pbd_homepage pbd_metadata_revision pbd_uploaded_at

instance MemSize PackageVersions where
memSize (PackageVersions ps) = getSum $
Expand Down