- show_file("<", tree1, size1);
- show_file(">", tree2, size2);
+ if (recursive && S_ISDIR(mode1) && S_ISDIR(mode2)) {
+ int srclen = strlen(src);
+ int dstlen = strlen(dst);
+ char *srcbase = malloc(srclen + pathlen1 + 2);
+ char *dstbase = malloc(srclen + pathlen1 + 2);
+ memcpy(srcbase, src, srclen);
+ memcpy(srcbase + srclen, path1, pathlen1);
+ memcpy(srcbase + srclen + pathlen1, "/", 2);
+ memcpy(dstbase, dst, dstlen);
+ memcpy(dstbase + dstlen, path2, pathlen2);
+ memcpy(dstbase + dstlen + pathlen2, "/", 2);
+ return diff_tree_sha1(sha1, sha2, srcbase, dstbase);
+ }
+
+ show_file("<", tree1, size1, src);
+ show_file(">", tree2, size2, dst);