Skip to content

Commit 7e543fd

Browse files
committed
Fix nil edge condition for initial commit diff preview.
Signed-off-by: EdmondFrank <[email protected]>
1 parent 1387a65 commit 7e543fd

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

apps/gitrekt/c_src/diff.c

+11-7
Original file line numberDiff line numberDiff line change
@@ -204,27 +204,31 @@ geef_diff_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
204204
{
205205
int error;
206206
geef_repository *repo;
207-
geef_object *old_tree;
208-
geef_object *new_tree;
207+
geef_object *old_tree = NULL;
208+
geef_object *new_tree = NULL;
209209
geef_diff *diff;
210210
git_diff_options diff_opts;
211211
ERL_NIF_TERM diff_term;
212212

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

216-
if (!enif_get_resource(env, argv[1], geef_object_type, (void **) &old_tree))
217-
return enif_make_badarg(env);
218-
219-
if (!enif_get_resource(env, argv[2], geef_object_type, (void **) &new_tree))
216+
if (!enif_get_resource(env, argv[1], geef_object_type, (void **) &old_tree) &&
217+
!enif_get_resource(env, argv[2], geef_object_type, (void **) &new_tree))
220218
return enif_make_badarg(env);
221219

222220
diff = enif_alloc_resource(geef_diff_type, sizeof(geef_diff));
223221
if (!diff)
224222
return geef_oom(env);
225223

226224
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);
225+
226+
if (old_tree == NULL || new_tree == NULL) {
227+
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);
228+
} else {
229+
error = git_diff_tree_to_tree(&diff->diff, repo->repo, (git_tree *)old_tree->obj, (git_tree *)new_tree->obj, &diff_opts);
230+
}
231+
228232
if (error < 0) {
229233
enif_release_resource(diff);
230234
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)