module Buffet.Assemble.JoinConsecutiveRunInstructions ( get ) where import qualified Buffet.Ir.Ir as Ir import qualified Data.Text as T import qualified Language.Docker as Docker import qualified Language.Docker.Syntax as Syntax import Prelude (($), (==), foldr, mconcat) get :: Ir.DockerfilePart -> Ir.DockerfilePart get = foldr process [] where process (Docker.Run (Syntax.RunArgs first flags)) (Docker.Run (Syntax.RunArgs second flags'):rest) | flags == flags' = Docker.Run (Syntax.RunArgs (joinRuns first second) flags) : rest process first rest = first : rest joinRuns :: Docker.Arguments T.Text -> Docker.Arguments T.Text -> Docker.Arguments T.Text joinRuns first second = Syntax.ArgumentsText $ mconcat [command first, T.pack " && ", command second] where command (Syntax.ArgumentsText shell) = shell command (Syntax.ArgumentsList exec) = exec