Collect hash during creating an archive
This commit is contained in:
35
src/Main.hs
35
src/Main.hs
@ -49,7 +49,6 @@ import System.Process
|
||||
( CmdSpec(..)
|
||||
, CreateProcess(..)
|
||||
, StdStream(..)
|
||||
, callProcess
|
||||
, withCreateProcess
|
||||
, waitForProcess
|
||||
)
|
||||
@ -61,11 +60,13 @@ import System.Console.ANSI
|
||||
, ConsoleLayer(..)
|
||||
)
|
||||
import System.Directory (listDirectory, doesDirectoryExist, withCurrentDirectory, removeDirectoryRecursive)
|
||||
import Control.Monad (filterM)
|
||||
import Control.Monad (filterM, void)
|
||||
import Data.List (isPrefixOf, isSuffixOf, partition)
|
||||
import Conduit (runConduitRes, (.|), sourceFile)
|
||||
import Conduit (runConduitRes, (.|), yield)
|
||||
import Data.Functor ((<&>))
|
||||
import Data.Bifunctor (Bifunctor(..))
|
||||
import Data.Conduit.Tar (tarFilePath)
|
||||
import qualified Data.Conduit.Lzma as Lzma
|
||||
|
||||
autoUpdatable :: [PackageDescription]
|
||||
autoUpdatable =
|
||||
@ -403,31 +404,33 @@ reuploadWithTemplate downloadTemplate commands packagePath version = do
|
||||
$ NonEmpty.last $ snd $ fromJust $ URI.uriPath uri'
|
||||
packagePathRelativeToCurrent = repository' </> Text.unpack packagePath
|
||||
|
||||
(checksum, relativeTarball') <- case commands of
|
||||
(relativeTarball', checksum) <- case commands of
|
||||
[] -> do
|
||||
(downloadedFileName, checksum) <- download uri' packagePathRelativeToCurrent
|
||||
pure (checksum, packagePathRelativeToCurrent </> downloadedFileName)
|
||||
pure (packagePathRelativeToCurrent </> downloadedFileName, checksum)
|
||||
_ -> do
|
||||
changedArchiveRootName <- extractRemote uri' packagePathRelativeToCurrent
|
||||
let relativeTarball = packagePathRelativeToCurrent
|
||||
</> fromMaybe downloadFileName changedArchiveRootName
|
||||
prepareSource relativeTarball
|
||||
checksum <- liftIO $ runConduitRes $ sourceFile relativeTarball .| sinkHash
|
||||
|
||||
pure (checksum, relativeTarball)
|
||||
|
||||
download' <- handleReupload relativeTarball' downloadFileName
|
||||
pure $ Package.Download download' checksum
|
||||
where
|
||||
name' = Text.pack $ takeBaseName $ Text.unpack packagePath
|
||||
prepareSource tarballPath = do
|
||||
let packedDirectory = dropExtension $ dropExtension tarballPath
|
||||
in liftIO (traverse (defaultCreateProcess packedDirectory) commands)
|
||||
>> liftIO
|
||||
( withCurrentDirectory (takeDirectory tarballPath)
|
||||
$ callProcess "tar" ["Jcvf", takeFileName tarballPath, takeFileName packedDirectory]
|
||||
)
|
||||
>> liftIO (removeDirectoryRecursive packedDirectory)
|
||||
prepareSource tarballPath =
|
||||
liftIO (traverse (defaultCreateProcess tarballPath) commands)
|
||||
>> liftIO (tarCompress tarballPath)
|
||||
<* liftIO (removeDirectoryRecursive tarballPath)
|
||||
tarCompress tarballPath =
|
||||
let archiveBaseFilename = takeFileName tarballPath
|
||||
appendTarExtension = (<.> "tar.xz")
|
||||
in fmap (appendTarExtension tarballPath,)
|
||||
$ withCurrentDirectory (takeDirectory tarballPath)
|
||||
$ runConduitRes $ yield archiveBaseFilename
|
||||
.| void tarFilePath
|
||||
.| Lzma.compress Nothing
|
||||
.| sinkFileAndHash (appendTarExtension archiveBaseFilename)
|
||||
handleReupload relativeTarball downloadFileName = do
|
||||
downloadURL' <- SlackBuilderT $ asks downloadURL
|
||||
|
||||
|
Reference in New Issue
Block a user