Current section

Files

Jump to
mate lib mate.ex
Raw

lib/mate.ex

defmodule Mate do
alias Mate.Session
def local_cmd(%Session{} = session, cmd, args \\ []) when is_list(args) do
if session.verbosity > 0,
do:
Mix.shell().info([
:yellow,
:bright,
"local >",
:reset,
" ",
cmd,
" ",
Enum.join(args, " ")
])
case System.cmd(cmd, args, stderr_to_stdout: true) do
{stdout, _exit_status = 0} ->
{:ok, String.trim(stdout)}
{stdout, exit_status} ->
{:error,
"Local command exited with non-ok exit status (#{exit_status})\n\nCommand: #{cmd} #{Enum.join(args, " ")}\nOutput:\n#{stdout}"}
end
|> print_result("local", session.verbosity)
end
def local_script(%Session{} = session, script) do
if session.verbosity > 0,
do: Mix.shell().info([:yellow, "local >", :reset, " ", script])
case System.cmd("/usr/bin/env", ["bash", "-c", script], stderr_to_stdout: true) do
{stdout, _exit_status = 0} ->
{:ok, String.trim(stdout)}
{stdout, exit_status} ->
{:error,
"Local script exited with non-ok exit status (#{exit_status})\n\nScript:\n #{script}\n\nOutput:\n#{stdout}"}
end
|> print_result("local", session.verbosity)
end
def remote_cmd(%Session{driver: driver} = session, cmd, args \\ []) when is_list(args) do
if session.verbosity > 0,
do: Mix.shell().info([:yellow, "remote >", :reset, " ", cmd, " ", Enum.join(args, " ")])
driver.exec(session, cmd, args)
|> print_result("remote", session.verbosity)
end
def remote_script(%Session{driver: driver} = session, script) do
if session.verbosity > 0,
do: Mix.shell().info([:yellow, "remote > ", :reset, " ", script])
driver.exec(session, script, [])
|> print_result("remote", session.verbosity)
end
def copy_from(%Session{driver: driver} = session, src, dest) do
if session.verbosity > 0,
do:
Mix.shell().info([
:cyan,
"remote -> local",
:reset,
" ",
"copying",
:bright,
src,
:reset,
" to ",
:bright,
dest
])
driver.copy_from(session, src, dest)
end
def copy_to(%Session{driver: driver} = session, src, dest) do
if session.verbosity > 0,
do:
Mix.shell().info([
:cyan,
"local -> remote",
:reset,
" ",
"copying",
:bright,
src,
:reset,
" to ",
:bright,
dest
])
driver.copy_to(session, src, dest)
end
defp print_result({:ok, stdout} = result, tag, verbosity) when verbosity > 1 do
Mix.shell().info([:green, :bright, "#{tag} <", :reset, " ", stdout])
result
end
defp print_result(result, _tag, _verbosity) do
result
end
end