Current section
Files
Jump to
Current section
Files
lib/kvasir/mix/tasks/dev.ex
defmodule Mix.Tasks.Kvasir.Dev do
use Mix.Task
@impl Mix.Task
def run(args)
def run([command | args]) do
case command do
"add" ->
if add(args) == :ok, do: recompile()
"update" ->
if update(args), do: recompile()
_ ->
# warn: commaand
help()
end
end
def run(_), do: help()
defp recompile do
# File.rm_rf(Application.app_dir(:kvasir_dev))
# alias Mix.Tasks.Deps.{Compile, Get}
# Get.run([])
# Compile.run([])
:ok
end
defp add([component | opts]) do
:application.ensure_all_started(:hackney)
Kvasir.Dev.Downloader.clear(component)
with :ok <- Kvasir.Dev.Downloader.component(component, List.first(opts)) do
c = Kvasir.Dev.Downloader.commit(component)
f = Kvasir.Dev.lock()
lock = File.read!(f)
data =
lock
|> String.split("\n", trim: true)
|> Enum.map(&String.trim/1)
|> Enum.reject(&(&1 == ""))
|> Enum.reject(&String.starts_with?(&1, "#{component}:"))
|> Kernel.++(["#{component}:#{c}"])
|> Enum.sort()
File.write(f, Enum.join(data, "\n") <> "\n")
:ok
end
end
defp update(["all" | _]) do
Kvasir.Dev.lock()
|> File.read!()
|> String.split("\n", trim: true)
|> Enum.map(&String.trim/1)
|> Enum.reject(&(&1 == ""))
|> Enum.map(&List.first(String.split(&1, ":")))
|> Enum.map(&add([&1, "release/v1.0"]))
|> Enum.any?(&(&1 == :ok))
end
defp update([component | _]), do: add([component, "release/v1.0"]) == :ok
defp help do
:ok
end
end