Skip to content

Commit

Permalink
Fix nil edge condition for initial commit diff preview.
Browse files Browse the repository at this point in the history
Signed-off-by: EdmondFrank <EdmondFrank@hotmail.com>
  • Loading branch information
EdmondFrank committed Nov 14, 2023
1 parent 1387a65 commit 7e543fd
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
18 changes: 11 additions & 7 deletions apps/gitrekt/c_src/diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,27 +204,31 @@ geef_diff_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
int error;
geef_repository *repo;
geef_object *old_tree;
geef_object *new_tree;
geef_object *old_tree = NULL;
geef_object *new_tree = NULL;
geef_diff *diff;
git_diff_options diff_opts;
ERL_NIF_TERM diff_term;

if (!enif_get_resource(env, argv[0], geef_repository_type, (void **) &repo))
return enif_make_badarg(env);

if (!enif_get_resource(env, argv[1], geef_object_type, (void **) &old_tree))
return enif_make_badarg(env);

if (!enif_get_resource(env, argv[2], geef_object_type, (void **) &new_tree))
if (!enif_get_resource(env, argv[1], geef_object_type, (void **) &old_tree) &&
!enif_get_resource(env, argv[2], geef_object_type, (void **) &new_tree))
return enif_make_badarg(env);

diff = enif_alloc_resource(geef_diff_type, sizeof(geef_diff));
if (!diff)
return geef_oom(env);

diff_opts = diff_opts_atom2type(env, argv[3]);
error = git_diff_tree_to_tree(&diff->diff, repo->repo, (git_tree *)old_tree->obj, (git_tree *)new_tree->obj, &diff_opts);

if (old_tree == NULL || new_tree == NULL) {
error = git_diff_tree_to_tree(&diff->diff, repo->repo, old_tree ? (git_tree *)old_tree->obj : NULL, new_tree ? (git_tree *)new_tree->obj : NULL, &diff_opts);
} else {
error = git_diff_tree_to_tree(&diff->diff, repo->repo, (git_tree *)old_tree->obj, (git_tree *)new_tree->obj, &diff_opts);
}

if (error < 0) {
enif_release_resource(diff);
return geef_error_struct(env, error);
Expand Down
4 changes: 4 additions & 0 deletions apps/gitrekt/lib/gitrekt/git_agent.ex
Original file line number Diff line number Diff line change
Expand Up @@ -1224,6 +1224,10 @@ defmodule GitRekt.GitAgent do
end
end

defp fetch_tree(nil, _handle) do
{:ok, %GitTree{oid: <<0::160>>, __ref__: nil}}
end

defp fetch_tree(%GitCommit{__ref__: commit}, _handle) do
case Git.commit_tree(commit) do
{:ok, oid, tree} ->
Expand Down

0 comments on commit 7e543fd

Please sign in to comment.