@@ -225,6 +225,7 @@ data CoreResource = CoreResource {
225225 corePackageTarball :: Resource ,
226226 -- | A Cabal file metatada revision.
227227 coreCabalFileRev :: Resource ,
228+ coreCabalFileRevName :: Resource ,
228229
229230 -- Rendering resources.
230231 -- | URI for `corePackagesPage`, given a format (blank for none).
@@ -403,6 +404,7 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
403404 , coreCabalFile
404405 , coreCabalFileRevs
405406 , coreCabalFileRev
407+ , coreCabalFileRevName
406408 , coreUserDeauth
407409 , coreAdminDeauth
408410 , corePackUserDeauth
@@ -456,6 +458,11 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
456458 resourceDesc = [(GET , " Get package .cabal file revision" )]
457459 , resourceGet = [(" cabal" , serveCabalFileRevision)]
458460 }
461+ coreCabalFileRevName = (resourceAt " /package/:package/revision/:tarball-:revision.:format" ) {
462+ resourceDesc = [(GET , " Get package .cabal file revision with name" )]
463+ , resourceGet = [(" cabal" , serveCabalFileRevisionName)]
464+ }
465+
459466
460467 coreUserDeauth = (resourceAt " /packages/deauth" ) {
461468 resourceDesc = [(GET , " Deauth Package user" )]
@@ -750,6 +757,21 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
750757 Nothing -> errNotFound " Package revision not found"
751758 [MText " Cannot parse revision, or revision out of range." ]
752759
760+ serveCabalFileRevisionName :: DynamicPath -> ServerPartE Response
761+ serveCabalFileRevisionName dpath = do
762+ pkgid1 <- packageTarballInPath dpath
763+ pkgid2 <- packageInPath dpath
764+ guard (pkgVersion pkgid2 == pkgVersion pkgid2)
765+ pkginfo <- packageInPath dpath >>= lookupPackageId
766+ let mrev = lookup " revision" dpath >>= fromReqURI
767+ revisions = pkgMetadataRevisions pkginfo
768+ case mrev >>= \ rev -> revisions Vec. !? rev of
769+ Just (fileRev, (utime, _uid)) -> return $ toResponse cabalfile
770+ where
771+ cabalfile = Resource. CabalFile (cabalFileByteString fileRev) utime
772+ Nothing -> errNotFound " Package revision not found"
773+ [MText " Cannot parse revision, or revision out of range." ]
774+
753775
754776 deauth :: DynamicPath -> ServerPartE Response
755777 deauth _ = do
0 commit comments