Current section
Files
Jump to
Current section
Files
lib/mix/tasks/spec.export.tools.ex
defmodule Mix.Tasks.Spec.Export.Tools do
use Mix.Task
@shortdoc "Copy Mix spec tasks and schemas into another repo for replication"
@moduledoc """
Usage:
mix spec.export.tools --dest /path/to/other/repo
Copies sender/receiver Mix tasks and required schemas so the other repo can
participate fully in the handoff flow.
"""
@task_glob ~w(
lib/mix/tasks/spec.*.ex
)
@impl true
def run(argv) do
{opts, _, _} = OptionParser.parse(argv, switches: [dest: :string])
dest = Keyword.get(opts, :dest) || Mix.raise("Provide --dest")
# Copy tasks
for path <- Path.wildcard(Path.join([File.cwd!(), "lib/mix/tasks", "spec.*.ex"])) do
copy!(path, Path.join(dest, "lib/mix/tasks/" <> Path.basename(path)))
end
# Copy schemas and receiver docs
Mix.Task.reenable("spec.export.docs")
Mix.Task.run("spec.export.docs", ["--dest", dest])
Mix.shell().info("Exported spec tools to #{dest}")
end
defp copy!(src, dst) do
File.mkdir_p!(Path.dirname(dst))
File.cp!(src, dst)
end
end