diff --git a/Remote/Directory.hs b/Remote/Directory.hs index 5b8416664d..af000a3fdc 100644 --- a/Remote/Directory.hs +++ b/Remote/Directory.hs @@ -392,22 +392,20 @@ storeExportWithContentIdentifierM :: FilePath -> FilePath -> Key -> ExportLocati storeExportWithContentIdentifierM dir src _k loc overwritablecids p = catchDefaultIO Nothing $ do liftIO $ createDirectoryIfMissing True destdir - docopy + withTmpFileIn destdir template $ \tmpf tmph -> do + liftIO $ withMeteredFile src p (L.hPut tmph) + liftIO $ hFlush tmph + liftIO (getFileStatus tmpf) >>= liftIO . mkContentIdentifier tmpf >>= \case + Nothing -> return Nothing + Just newcid -> + checkExportContent dir loc (newcid:overwritablecids) Nothing $ do + liftIO $ rename tmpf dest + return (Just newcid) where dest = exportPath dir loc (destdir, base) = splitFileName dest template = relatedTemplate (base ++ ".tmp") - docopy = withTmpFileIn destdir template $ \tmpf tmph -> do - liftIO $ withMeteredFile src p (L.hPut tmph) - liftIO $ hFlush tmph - liftIO (getFileStatus tmpf) >>= liftIO . mkContentIdentifier tmpf >>= \case - Nothing -> return Nothing - Just newcid -> - checkExportContent dir loc (newcid:overwritablecids) Nothing $ do - liftIO $ rename tmpf dest - return (Just newcid) - removeExportWithContentIdentifierM :: FilePath -> Key -> ExportLocation -> [ContentIdentifier] -> Annex Bool removeExportWithContentIdentifierM dir k loc removeablecids = checkExportContent dir loc removeablecids False $