commit 9c70d4c367dc7b0c2ddb35194d08d31c90a55af9 from: Stefan Sperling date: Thu Nov 30 15:02:22 2017 UTC implement diff_added_tree commit - 789689b5b94d139f77bc2e81da9e15dd09f06dbb commit + 9c70d4c367dc7b0c2ddb35194d08d31c90a55af9 blob - 53130a9705a6e99fa2705edcd9e451af82e24bd5 blob + 41a07be233fabf00a8ada2f08d82759fbba28327 --- lib/diff.c +++ lib/diff.c @@ -236,9 +236,33 @@ diff_deleted_blob(struct got_object_id *id, struct got } static const struct got_error * -diff_added_tree(struct got_object_id *id) +diff_added_tree(struct got_object_id *id, struct got_repository *repo) { - return NULL; + const struct got_error *err = NULL; + struct got_object *treeobj = NULL; + struct got_tree_object *tree = NULL; + + err = got_object_open(&treeobj, repo, id); + if (err) + goto done; + + if (treeobj->type != GOT_OBJ_TYPE_TREE) { + err = got_error(GOT_ERR_OBJ_TYPE); + goto done; + } + + err = got_object_tree_open(&tree, repo, treeobj); + if (err) + goto done; + + err = got_diff_tree(NULL, tree, repo); + +done: + if (tree) + got_object_tree_close(tree); + if (treeobj) + got_object_close(treeobj); + return err; } static const struct got_error * @@ -344,7 +368,7 @@ diff_entry_new_old(struct got_tree_entry *te2, struct return NULL; if (S_ISDIR(te2->mode)) - return diff_added_tree(&te2->id); + return diff_added_tree(&te2->id, repo); return diff_added_blob(&te2->id, repo); }