summaryrefslogtreecommitdiff
path: root/lib/SlackBuilder/Download.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/SlackBuilder/Download.hs')
-rw-r--r--lib/SlackBuilder/Download.hs26
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/SlackBuilder/Download.hs b/lib/SlackBuilder/Download.hs
index b3723e0..096ede8 100644
--- a/lib/SlackBuilder/Download.hs
+++ b/lib/SlackBuilder/Download.hs
@@ -14,12 +14,13 @@ module SlackBuilder.Download
, sinkFileAndHash
, sinkHash
, updateSlackBuildVersion
- , uploadCommand
+ , uploadSource
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Char8 as Char8
+import Data.List.NonEmpty (NonEmpty(..))
import qualified Data.List.NonEmpty as NonEmpty
import Data.Foldable (find)
import Data.Map.Strict (Map)
@@ -195,10 +196,10 @@ cloneAndUpload :: Text -> FilePath -> Text -> SlackBuilderT (URI, Digest MD5)
cloneAndUpload repo tarballPath tagPrefix = do
localPath <- relativeToRepository $ tarballPath <.> "tar.xz"
let packageName = takeFileName $ takeDirectory tarballPath
- remoteArchivePath = Text.cons '/' $ Text.pack
+ remoteArchivePath = Text.pack
$ packageName </> takeFileName tarballPath <.> "tar.xz"
- remoteResultURI <- hostedSources remoteArchivePath
- remoteFileExists' <- remoteFileExists remoteArchivePath
+ remoteResultURI <- hostedSources $ Text.cons '/' remoteArchivePath
+ remoteFileExists' <- remoteFileExists $ Text.cons '/' remoteArchivePath
if remoteFileExists'
then (remoteResultURI,) . snd
@@ -206,21 +207,22 @@ cloneAndUpload repo tarballPath tagPrefix = do
else
let go = sourceFile localPath .| sinkHash
in cloneAndArchive repo tarballPath tagPrefix
- >> uploadCommand localPath remoteArchivePath
+ >> uploadSource localPath remoteArchivePath
>> liftIO (runConduitRes go) <&> (remoteResultURI,)
-- | Given a path to a local file and a remote path uploads the file using
-- the settings given in the configuration file.
--
-- The remote path is given relative to the path in the configuration.
-uploadCommand :: FilePath -> Text -> SlackBuilderT ()
-uploadCommand localPath remotePath' = do
- remoteRoot <- SlackBuilderT $ asks remotePath
+uploadSource :: FilePath -> Text -> SlackBuilderT ()
+uploadSource localPath remotePath' = do
+ uploadCommand' :| uploadArguments <- SlackBuilderT $ asks uploadCommand
+ let uploadArguments' = Text.unpack
+ . Text.replace "%s" (Text.pack localPath)
+ . Text.replace "%c" remotePath'
+ <$> uploadArguments
- liftIO $ callProcess "scp"
- [ localPath
- , Text.unpack $ remoteRoot <> remotePath'
- ]
+ liftIO $ callProcess (Text.unpack uploadCommand') uploadArguments'
-- | Downlaods a file into the directory. Returns name of the downloaded file
-- and checksum.