Packages

fnord

0.9.26

AI code archaeology

Current section

Files

Jump to
fnord lib settings migrate.ex
Raw

lib/settings/migrate.ex

defmodule Settings.Migrate do
# ----------------------------------------------------------------------------
# Cleans up the "default" project directory within the store on startup.
#
# This function exists to remove any lingering "default" project data which
# might cause inconsistencies or conflicts. It is safe to call repeatedly
# and will not raise errors if the directory does not exist. Moreover, no
# code depends on this directory being present, so removing it has no adverse
# side effects.
# ----------------------------------------------------------------------------
def cleanup_default_project_dir do
path = Path.join(Settings.fnord_home(), "default")
if File.exists?(path) do
File.rm_rf!(path)
end
end
def maybe_migrate_settings(path) do
ver = Settings.get_running_version()
if Version.compare(ver, "0.8.30") != :lt do
data =
with {:ok, content} <- File.read(path),
{:ok, parsed} <- SafeJson.decode(content) do
parsed
else
_ ->
raise """
Corrupted settings file: #{path}
You may need to reset your fnord settings. Consider backing up the file
and running 'fnord init' to recreate it.
"""
end
globals = ["approvals", "projects", "version"]
{projects, globals_map} = Enum.split_with(data, fn {k, _v} -> k not in globals end)
if Map.has_key?(data, "projects") do
:ok
else
new_data =
globals_map
|> Map.new()
|> Map.put("projects", Map.new(projects))
|> Map.put("version", "0.8.30")
|> Map.put_new("approvals", %{})
|> SafeJson.encode!(pretty: true)
Settings.write_atomic!(path, new_data)
end
end
end
end