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 addPackageHeader pkg version
void $ recordMetrics pkg version void $ recordMetrics pkg version
(len, src) <- getPackage pkg version >>= \case (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 Just a -> pure a
addHeader "Content-Length" (show len) addHeader "Content-Length" (show len)
respondSource typeOctet $ src .| awaitForever sendChunkBS respondSource typeOctet $ src .| awaitForever sendChunkBS

View File

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