- for (i=0; i < nr_paths; i++) {
- const char *match = paths[i];
- int matchlen = pathlens[i];
-
- if (baselen >= matchlen) {
- /* If it doesn't match, move along... */
- if (strncmp(base, match, matchlen))
- continue;
-
- /* The base is a subdirectory of a path which was specified. */
- return 1;
- }
-
- /* Does the base match? */
- if (strncmp(base, match, baselen))
- continue;
-
- match += baselen;
- matchlen -= baselen;
-
- if (pathlen > matchlen)
- continue;
-
- if (strncmp(path, match, pathlen))
- continue;
-
- return 1;
- }
- return 0; /* No matches */
-}
-
-static int diff_tree(void *tree1, unsigned long size1, void *tree2, unsigned long size2, const char *base)
-{
- while (size1 | size2) {
- if (nr_paths && size1 && !interesting(tree1, size1, base)) {
- update_tree_entry(&tree1, &size1);
- continue;
+ for (parents = commit->parents; parents; parents = parents->next) {
+ struct commit *parent = parents->item;
+ header = generate_header(sha1,
+ parent->object.sha1,
+ commit->buffer);
+ diff_tree_sha1_top(parent->object.sha1, commit_sha1, "");
+ if (!header && verbose_header) {
+ header_prefix = "\ndiff-tree ";
+ /*
+ * Don't print multiple merge entries if we
+ * don't print the diffs.
+ */