Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit f261c59

Browse files
committedNov 23, 2023
Fix nil edge condition for initial commit diff preview.
Signed-off-by: EdmondFrank <[email protected]>
1 parent 1387a65 commit f261c59

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed
 

‎apps/gitrekt/c_src/diff.c

+16-5
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,10 @@ ERL_NIF_TERM
203203
geef_diff_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
204204
{
205205
int error;
206+
int nums_of_null_tree = 0;
206207
geef_repository *repo;
207-
geef_object *old_tree;
208-
geef_object *new_tree;
208+
geef_object *old_tree = NULL;
209+
geef_object *new_tree = NULL;
209210
geef_diff *diff;
210211
git_diff_options diff_opts;
211212
ERL_NIF_TERM diff_term;
@@ -214,17 +215,27 @@ geef_diff_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
214215
return enif_make_badarg(env);
215216

216217
if (!enif_get_resource(env, argv[1], geef_object_type, (void **) &old_tree))
217-
return enif_make_badarg(env);
218+
nums_of_null_tree += 1;
218219

219220
if (!enif_get_resource(env, argv[2], geef_object_type, (void **) &new_tree))
220-
return enif_make_badarg(env);
221+
nums_of_null_tree += 1;
222+
223+
if (nums_of_null_tree > 1) {
224+
return enif_make_badarg(env);
225+
}
221226

222227
diff = enif_alloc_resource(geef_diff_type, sizeof(geef_diff));
223228
if (!diff)
224229
return geef_oom(env);
225230

226231
diff_opts = diff_opts_atom2type(env, argv[3]);
227-
error = git_diff_tree_to_tree(&diff->diff, repo->repo, (git_tree *)old_tree->obj, (git_tree *)new_tree->obj, &diff_opts);
232+
233+
if (old_tree == NULL || new_tree == NULL) {
234+
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);
235+
} else {
236+
error = git_diff_tree_to_tree(&diff->diff, repo->repo, (git_tree *)old_tree->obj, (git_tree *)new_tree->obj, &diff_opts);
237+
}
238+
228239
if (error < 0) {
229240
enif_release_resource(diff);
230241
return geef_error_struct(env, error);

‎apps/gitrekt/lib/gitrekt/git_agent.ex

+4
Original file line numberDiff line numberDiff line change
@@ -1224,6 +1224,10 @@ defmodule GitRekt.GitAgent do
12241224
end
12251225
end
12261226

1227+
defp fetch_tree(nil, _handle) do
1228+
{:ok, %GitTree{oid: <<0::160>>, __ref__: nil}}
1229+
end
1230+
12271231
defp fetch_tree(%GitCommit{__ref__: commit}, _handle) do
12281232
case Git.commit_tree(commit) do
12291233
{:ok, oid, tree} ->

0 commit comments

Comments
 (0)
Please sign in to comment.