defmodule Mix.Tasks.Kvasir.Dev do use Mix.Task @impl Mix.Task def run(args) def run([command | args]) do case command do "add" -> add(args) "update" -> update(args) _ -> # warn: commaand help() end end def run(_), do: help() defp add([component | opts]) do :application.ensure_all_started(:hackney) Kvasir.Dev.Downloader.clear(component) p = if c = List.first(opts) do if(String.trim(c) != "", do: c) end with :ok <- Kvasir.Dev.Downloader.component(component, p) 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") 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.each(&add([&1, "release/v1.0"])) end defp update([component | _]), do: add([component, "release/v1.0"]) defp help do :ok end end