Implemented very rudimentary sync conflict detection and api endpoint /conflicts.
This commit is contained in:
parent
51a7b8be93
commit
2b7f784951
@ -4,11 +4,11 @@ defmodule Logsrv do
|
||||
"""
|
||||
|
||||
def dir do
|
||||
Application.get_env(:logsrv, :dir)
|
||||
Application.get_env(:logsrv, :dir) <> "/"
|
||||
end
|
||||
|
||||
def dir(subdir) do
|
||||
"#{dir()}/#{subdir}"
|
||||
"#{dir()}/#{subdir}/"
|
||||
end
|
||||
|
||||
def journals do
|
||||
@ -21,4 +21,59 @@ defmodule Logsrv do
|
||||
|> 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
|
||||
|
||||
14
logsrv_api/lib/logsrv/helpers.ex
Normal file
14
logsrv_api/lib/logsrv/helpers.ex
Normal file
@ -0,0 +1,14 @@
|
||||
defmodule Logsrv.Helpers do
|
||||
|
||||
def moot do
|
||||
"moo"
|
||||
end
|
||||
|
||||
def to_date(str) do
|
||||
str
|
||||
|> String.replace(~r/\..*/,"")
|
||||
|> String.replace("_","-")
|
||||
|> Date.from_iso8601!()
|
||||
end
|
||||
|
||||
end
|
||||
@ -45,6 +45,15 @@ defmodule Logsrv.Router do
|
||||
|> send_resp(200, pages) # Send a 200 OK response with the posts in the body
|
||||
end
|
||||
|
||||
get "/conflicts" do
|
||||
conflicts = Logsrv.resolve_conflicts
|
||||
|> Jason.encode!
|
||||
|
||||
conn
|
||||
|> put_resp_content_type("application/json")
|
||||
|> send_resp(200, conflicts) # Send a 200 OK response with the conflicts
|
||||
end
|
||||
|
||||
# Fallback handler when there was no match
|
||||
match _ do
|
||||
send_resp(conn, 404, "Not Found")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user