@@ -226,6 +226,7 @@ data CoreResource = CoreResource {
226226 corePackageTarball :: Resource ,
227227 -- | A Cabal file metatada revision.
228228 coreCabalFileRev :: Resource ,
229+ coreCabalFileRevName :: Resource ,
229230
230231 -- Rendering resources.
231232 -- | URI for `corePackagesPage`, given a format (blank for none).
@@ -404,6 +405,7 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
404405 , coreCabalFile
405406 , coreCabalFileRevs
406407 , coreCabalFileRev
408+ , coreCabalFileRevName
407409 , coreUserDeauth
408410 , coreAdminDeauth
409411 , corePackUserDeauth
@@ -457,6 +459,11 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
457459 resourceDesc = [(GET , " Get package .cabal file revision" )]
458460 , resourceGet = [(" cabal" , serveCabalFileRevision)]
459461 }
462+ coreCabalFileRevName = (resourceAt " /package/:package/revision/:tarball-:revision.:format" ) {
463+ resourceDesc = [(GET , " Get package .cabal file revision with name" )]
464+ , resourceGet = [(" cabal" , serveCabalFileRevisionName)]
465+ }
466+
460467
461468 coreUserDeauth = (resourceAt " /packages/deauth" ) {
462469 resourceDesc = [(GET , " Deauth Package user" )]
@@ -754,6 +761,21 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
754761 Nothing -> errNotFound " Package revision not found"
755762 [MText " Cannot parse revision, or revision out of range." ]
756763
764+ serveCabalFileRevisionName :: DynamicPath -> ServerPartE Response
765+ serveCabalFileRevisionName dpath = do
766+ pkgid1 <- packageTarballInPath dpath
767+ pkgid2 <- packageInPath dpath
768+ guard (pkgVersion pkgid2 == pkgVersion pkgid2)
769+ pkginfo <- packageInPath dpath >>= lookupPackageId
770+ let mrev = lookup " revision" dpath >>= fromReqURI
771+ revisions = pkgMetadataRevisions pkginfo
772+ case mrev >>= \ rev -> revisions Vec. !? rev of
773+ Just (fileRev, (utime, _uid)) -> return $ toResponse cabalfile
774+ where
775+ cabalfile = Resource. CabalFile (cabalFileByteString fileRev) utime
776+ Nothing -> errNotFound " Package revision not found"
777+ [MText " Cannot parse revision, or revision out of range." ]
778+
757779
758780 deauth :: DynamicPath -> ServerPartE Response
759781 deauth _ = do
0 commit comments