80 lines
1.3 KiB
Elixir
80 lines
1.3 KiB
Elixir
defmodule Logsrv do
|
|
@moduledoc """
|
|
Documentation for `Logsrv`.
|
|
"""
|
|
|
|
def dir do
|
|
Application.get_env(:logsrv, :dir) <> "/"
|
|
end
|
|
|
|
def dir(subdir) do
|
|
"#{dir()}/#{subdir}/"
|
|
end
|
|
|
|
def journals do
|
|
dir(:journals)
|
|
|> File.ls!
|
|
end
|
|
|
|
def pages do
|
|
dir(:pages)
|
|
|> File.ls!
|
|
end
|
|
|
|
def compare(fd) do
|
|
sync_conflict_fd = fd
|
|
orig_fd = fd
|
|
|> String.replace(~r/\.sync.*/,"\.md")
|
|
|
|
sync_conflict = sync_conflict_fd |> File.read!
|
|
orig = orig_fd |> File.read!
|
|
|
|
# FOR NOW, just return the diff
|
|
diff = orig
|
|
|> String.myers_difference(sync_conflict)
|
|
|
|
diff
|
|
|> Kernel.inspect()
|
|
|> Jason.encode!
|
|
|
|
end
|
|
|
|
def conflicts do
|
|
{conflicts(journals()), conflicts(pages())}
|
|
end
|
|
|
|
def conflicts(list) do
|
|
list
|
|
|> Enum.filter( fn (fd) ->
|
|
fd |> String.match?(~r/.*sync.*/)
|
|
end)
|
|
end
|
|
|
|
def resolve_conflicts do
|
|
{journal_conflicts, pages_conflicts} = conflicts()
|
|
|
|
[
|
|
journal_conflicts
|
|
|> Enum.map( fn(fd) ->
|
|
%{
|
|
:type => :journal,
|
|
:date => fd |> Logsrv.Helpers.to_date,
|
|
:file => fd,
|
|
:diff => compare(dir(:journals) <> fd),
|
|
}
|
|
end),
|
|
|
|
pages_conflicts
|
|
|> Enum.map( fn(fd) ->
|
|
%{
|
|
:type => :page,
|
|
:file => fd,
|
|
:diff => compare(dir(:pages) <> fd),
|
|
} end)
|
|
]
|
|
|> List.flatten()
|
|
|
|
end
|
|
|
|
end
|