diff --git a/c_src/config.c b/c_src/config.c index 2a07529..5634a02 100644 --- a/c_src/config.c +++ b/c_src/config.c @@ -57,7 +57,7 @@ geef_config_set_bool(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) ErlNifBinary bin; int error, val; ERL_NIF_TERM ret; - + ret = extract(&cfg, &bin, env, argv); if (ret != atoms.ok) return ret; @@ -80,7 +80,7 @@ geef_config_get_bool(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) ErlNifBinary bin; int error, val; ERL_NIF_TERM ret; - + ret = extract(&cfg, &bin, env, argv); if (ret != atoms.ok) return ret; @@ -100,10 +100,10 @@ geef_config_set_int(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { geef_config *cfg; ErlNifBinary bin; - int64_t val; + ErlNifSInt64 val; int error; ERL_NIF_TERM ret; - + ret = extract(&cfg, &bin, env, argv); if (ret != atoms.ok) return ret; diff --git a/lib/geef/object.ex b/lib/geef/object.ex index b2a5d12..4845d52 100644 --- a/lib/geef/object.ex +++ b/lib/geef/object.ex @@ -1,6 +1,10 @@ require Record defmodule Geef.Object do + @behaviour Access + alias Geef.Object + alias Geef.Tree + defstruct type: nil, id: nil, handle: nil def lookup(repo, id) do @@ -32,4 +36,24 @@ defmodule Geef.Object do end end + def fetch(tree = %Object{type: :tree}, key) when is_number(key) do + Tree.nth(tree, key) + end + + def fetch(tree = %Object{type: :tree}, key) do + Tree.get(tree, key) + end + + def get(tree = %Object{type: :tree}, key) do + case fetch(tree, key) do + {:ok, entry} -> entry + {:error, _} -> nil + end + end + + # Git data is immutable + def get_and_update(_tree, _key, _fun) do + raise ArgumentError + end + end diff --git a/lib/geef/tree.ex b/lib/geef/tree.ex index 854e695..a0500e4 100644 --- a/lib/geef/tree.ex +++ b/lib/geef/tree.ex @@ -33,31 +33,6 @@ defmodule Geef.Tree do end -defimpl Access, for: Geef.Object do - alias Geef.Object - alias Geef.Tree - - def get(tree = %Object{type: :tree}, key) when is_number(key) do - case Tree.nth(tree, key) do - {:ok, entry} -> entry - {:error, _} -> nil - end - end - - def get(tree = %Object{type: :tree}, key) do - case Tree.get(tree, key) do - {:ok, entry} -> entry - {:error, _} -> nil - end - end - - # Git data is immutable - def get_and_update(_tree, _key, _fun) do - raise ArgumentError - end - -end - defmodule Geef.TreeError do defexception [reason: nil] diff --git a/mix.exs b/mix.exs index 7c40c6e..17a9752 100644 --- a/mix.exs +++ b/mix.exs @@ -10,7 +10,7 @@ defmodule Mix.Tasks.Compile.Nif do `["c_src"]`. Can be configured as: ```` - [ptahs: ["c_src", "vendor/src"]] + [paths: ["c_src", "vendor/src"]] ```` * `:exts` - extensions of the source files. Defaults to `[:c]`, can @@ -118,7 +118,7 @@ defmodule Geef.Mixfile do end def nif do - [ file: "priv/geef.so", + [ file: "#{Path.join [__DIR__, "priv", "geef.so"]}", flags: "-lgit2" ] end diff --git a/src/geef_sig.erl b/src/geef_sig.erl index 91e8f38..f149b74 100644 --- a/src/geef_sig.erl +++ b/src/geef_sig.erl @@ -24,7 +24,7 @@ default(Repo) -> %% @doc Create a signature with the specified username and email, with %% a timestamp of now now(Name, Email) -> - Now = now(), + Now = os:timestamp(), %% We ask two questions "what's the time here?" and "what's the %% time in UTC-Land?". The difference in minutes is our offset. Local = calendar:datetime_to_gregorian_seconds(calendar:now_to_local_time(Now)), diff --git a/test/config_test.erl b/test/config_test.erl index 6db03fe..f1c7832 100644 --- a/test/config_test.erl +++ b/test/config_test.erl @@ -8,7 +8,7 @@ config_test_() -> fun string_test/1]}. start() -> - {A, B, C} = now(), + {A, B, C} = os:timestamp(), N = node(), TmpFile = io_lib:format("/tmp/geef-~p~p~p~p.gitconfig", [N, A, B, C]), {ok, Config} = geef_config:open(TmpFile), diff --git a/test/repo_test.erl b/test/repo_test.erl index 581f47d..3d6cf15 100644 --- a/test/repo_test.erl +++ b/test/repo_test.erl @@ -11,7 +11,7 @@ repo_test_() -> fun commit_tree_test/1]}. start() -> - {A, B, C} = now(), + {A, B, C} = os:timestamp(), N = node(), TmpDir = io_lib:format("/tmp/geef-~p~p~p~p.git", [N, A, B, C]), {ok, Repo} = geef_repo:init(TmpDir, true),