add check for directory existence during package version enumeration (#80)

* add check for directory existence during package version enumeration

* cleanup

* error consistency

* errmsg cleanup
This commit is contained in:
Keagan McClelland
2021-11-23 16:33:35 -07:00
committed by GitHub
parent bd99c77102
commit ee32e9b776
2 changed files with 13 additions and 7 deletions

View File

@@ -76,7 +76,7 @@ getAppR file = do
addPackageHeader pkg version
void $ recordMetrics pkg version
(len, src) <- getPackage pkg version >>= \case
Nothing -> sendResponseStatus status404 ([i|#{pkg}@#{version} not found|] :: Text)
Nothing -> sendResponseStatus status404 (NotFoundE [i|#{pkg}@#{version}|])
Just a -> pure a
addHeader "Content-Length" (show len)
respondSource typeOctet $ src .| awaitForever sendChunkBS

View File

@@ -96,7 +96,8 @@ import UnliftIO ( MonadUnliftIO
)
import UnliftIO ( tryPutMVar )
import UnliftIO.Concurrent ( forkIO )
import UnliftIO.Directory ( doesPathExist
import UnliftIO.Directory ( doesDirectoryExist
, doesPathExist
, getFileSize
, listDirectory
, removeFile
@@ -122,11 +123,16 @@ data PkgRepo = PkgRepo
getVersionsFor :: (MonadIO m, MonadReader r m, Has PkgRepo r, MonadLogger m) => PkgId -> m [Version]
getVersionsFor pkg = do
root <- asks pkgRepoFileRoot
subdirs <- listDirectory $ root </> show pkg
let (failures, successes) = partitionEithers $ (Atto.parseOnly parseVersion . T.pack) <$> subdirs
for_ failures $ \f -> $logWarn [i|Emver Parse Failure for #{pkg}: #{f}|]
pure successes
root <- asks pkgRepoFileRoot
let pkgDir = root </> show pkg
exists <- doesDirectoryExist pkgDir
if exists
then do
subdirs <- listDirectory pkgDir
let (failures, successes) = partitionEithers $ (Atto.parseOnly parseVersion . T.pack) <$> subdirs
for_ failures $ \f -> $logWarn [i|Emver Parse Failure for #{pkg}: #{f}|]
pure successes
else pure []
getViableVersions :: (MonadIO m, MonadReader r m, Has PkgRepo r, MonadLogger m) => PkgId -> VersionRange -> m [Version]
getViableVersions pkg spec = filter (`satisfies` spec) <$> getVersionsFor pkg