From 1e8dd991bca9a5d385abf24499f231d76bb70c03 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Wed, 16 Apr 2014 17:38:48 +0300 Subject: [PATCH] Don't recreate view cabal files --- Data/Hackage.hs | 50 ++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/Data/Hackage.hs b/Data/Hackage.hs index 34886af..aff7403 100644 --- a/Data/Hackage.hs +++ b/Data/Hackage.hs @@ -262,29 +262,33 @@ createView viewName modifyCabal src sink = withSystemTempDirectory "createview" , toPathPiece version , ".cabal" ]) - msrc <- storeRead $ HackageCabal name version - case msrc of - Nothing -> return mempty - Just src -> do - -- FIXME only create a new file if the old one doesn't exist? - orig <- src $$ sinkLazy - new <- - case parsePackageDescription $ unpack $ decodeUtf8 orig of - ParseOk _ gpd -> do - gpd' <- modifyCabal name version time gpd - let str = showGenericPackageDescription gpd' - -- sanity check - case parsePackageDescription str of - ParseOk _ _ -> return $ encodeUtf8 $ pack str - x -> do - $logError $ "Created cabal file that could not be parsed: " ++ tshow (x, str) - return orig - _ -> return orig - sourceLazy new $$ storeWrite (HackageViewCabal viewName name version) - let fp = fpFromString dir relfp - liftIO $ createTree $ directory fp - writeFile fp new - return $ asSet $ singletonSet relfp + let key = HackageViewCabal viewName name version + exists <- storeExists key + if exists + then return mempty + else do + msrc <- storeRead $ HackageCabal name version + case msrc of + Nothing -> return mempty + Just src -> do + orig <- src $$ sinkLazy + new <- + case parsePackageDescription $ unpack $ decodeUtf8 orig of + ParseOk _ gpd -> do + gpd' <- modifyCabal name version time gpd + let str = showGenericPackageDescription gpd' + -- sanity check + case parsePackageDescription str of + ParseOk _ _ -> return $ encodeUtf8 $ pack str + x -> do + $logError $ "Created cabal file that could not be parsed: " ++ tshow (x, str) + return orig + _ -> return orig + sourceLazy new $$ storeWrite key + let fp = fpFromString dir relfp + liftIO $ createTree $ directory fp + writeFile fp new + return $ asSet $ singletonSet relfp sourceHistory :: Monad m => UploadHistory -> Producer m Uploaded sourceHistory =