path: root/tree-diff.c
diff options
authorKirill Smelkov <>2014-02-05 16:57:09 (GMT)
committerJunio C Hamano <>2014-02-05 18:48:14 (GMT)
commit791303284cb3ede61729e33112d6923df406161f (patch)
tree399e30e25f0219a97767bf78a18f950d4dac2d1c /tree-diff.c
parentbe961c292f1d36097afa1690df68cf90f655c855 (diff)
tree-diff: allow diff_tree_sha1 to accept NULL sha1
which would mean that corresponding tree - old or new - is empty. As followup patches will show, that functionality was already needed in several places of Git codebase, but there, we were preparing empty tree_desc objects by hand, with some code duplication. For handling sha1 = NULL case, let's reuse fill_tree_descriptor() which returns just empty tree_desc in that case. Signed-off-by: Kirill Smelkov <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'tree-diff.c')
1 files changed, 4 insertions, 8 deletions
diff --git a/tree-diff.c b/tree-diff.c
index 456660c..b919983 100644
--- a/tree-diff.c
+++ b/tree-diff.c
@@ -294,14 +294,10 @@ int diff_tree_sha1(const unsigned char *old, const unsigned char *new, const cha
unsigned long size1, size2;
int retval;
- tree1 = read_object_with_reference(old, tree_type, &size1, NULL);
- if (!tree1)
- die("unable to read source tree (%s)", sha1_to_hex(old));
- tree2 = read_object_with_reference(new, tree_type, &size2, NULL);
- if (!tree2)
- die("unable to read destination tree (%s)", sha1_to_hex(new));
- init_tree_desc(&t1, tree1, size1);
- init_tree_desc(&t2, tree2, size2);
+ tree1 = fill_tree_descriptor(&t1, old);
+ tree2 = fill_tree_descriptor(&t2, new);
+ size1 = t1.size;
+ size2 = t2.size;
retval = diff_tree(&t1, &t2, base, opt);
if (!*base && DIFF_OPT_TST(opt, FOLLOW_RENAMES) && diff_might_be_rename()) {
init_tree_desc(&t1, tree1, size1);