Packages

fnord

0.8.94

AI code archaeology

Current section

Files

Jump to
fnord lib cmd upgrade.ex
Raw

lib/cmd/upgrade.ex

defmodule Cmd.Upgrade do
@behaviour Cmd
@impl Cmd
def requires_project?(), do: false
@impl Cmd
def spec do
[
upgrade: [
name: "upgrade",
about: "Upgrade fnord to the latest version",
flags: [
yes: [
long: "--yes",
short: "-y",
help: "Automatically answer 'yes' to all prompts",
default: false
]
]
]
]
end
@impl Cmd
def run(opts, _subcommands, _unknown) do
Util.get_latest_version()
|> case do
{:ok, version} ->
current = Util.get_running_version()
cmp = Version.compare(current, version)
confirm =
case cmp do
:lt ->
"Do you want to upgrade to the latest version of fnord?"
:eq ->
"You are on the latest version of fnord. Would you like to reinstall?"
:gt ->
raise "Current version is greater than the latest version. Versions are really made of wibbly-wobbly, timey-wimey stuff."
end
if Version.compare(current, version) != :gt do
UI.puts("Current version: #{current}")
UI.puts("Latest version: #{version}")
if UI.confirm(confirm, opts.yes) do
System.cmd("mix", ["escript.install", "--force", "github", "sysread/fnord"],
stderr_to_stdout: true,
into: IO.stream(:stdio, :line)
)
else
UI.puts("Cancelled")
end
else
UI.puts("You are already on the latest version: #{current}")
false
end
{:error, reason} ->
UI.puts("Error checking for updates: #{reason}")
false
end
end
end