Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions lib/xgit/lib/object_database.ex
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ defmodule Xgit.Lib.ObjectDatabase do
An object database stores one or more git objects, indexed by their unique
`ObjectId`.
"""
use GenServer

require Logger

Expand Down Expand Up @@ -79,6 +80,16 @@ defmodule Xgit.Lib.ObjectDatabase do
end
end

@doc ~S"""
Returns `true` if the argument is a PID representing a valid `ObjectDatabase` process.
"""
def valid?(database) when is_pid(database) do
Process.alive?(database) &&
GenServer.call(database, :valid_object_database?) == :valid_object_database
end

def valid?(_), do: false

# TO DO: https://github.com/elixir-git/xgit/issues/132

# /**
Expand Down Expand Up @@ -603,6 +614,9 @@ defmodule Xgit.Lib.ObjectDatabase do
# return null;
# }

def handle_call(:valid_object_database?, _from, state),
do: {:reply, :valid_object_database, state}

def handle_call(:exists?, _from, {mod, mod_state}) do
case mod.handle_exists?(mod_state) do
{true, mod_state} -> {:reply, true, {mod, mod_state}}
Expand Down
1 change: 1 addition & 0 deletions test/xgit/internal/storage/file/object_directory_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ defmodule Xgit.Internal.Storage.File.ObjectDirectoryTest do
assert {:ok, pid} = ObjectDirectory.start_link(config: Config.new(), objects: extra_dir)
assert is_pid(pid)

assert ObjectDatabase.valid?(pid) == true
assert ObjectDatabase.exists?(pid) == false
assert :ok = ObjectDatabase.create(pid)
assert ObjectDatabase.exists?(pid) == true
Expand Down