- if (matchlen > pathlen) {
- if (match[pathlen] != '/')
- continue;
- }
-
- if (strncmp(path, match, pathlen))
- continue;
-
- return 1;
- }
- return 0; /* No matches */
-}
-
-/* A whole sub-tree went away or appeared */
-static void show_tree(const char *prefix, void *tree, unsigned long size, const char *base)
-{
- while (size) {
- if (interesting(tree, size, base))
- show_file(prefix, tree, size, base);
- update_tree_entry(&tree, &size);
- }
-}
-
-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;
- }
- if (nr_paths && size2 && !interesting(tree2, size2, base)) {
- update_tree_entry(&tree2, &size2);
- continue;
- }
- if (!size1) {
- show_file("+", tree2, size2, base);
- update_tree_entry(&tree2, &size2);
- continue;
- }
- if (!size2) {
- show_file("-", tree1, size1, base);
- update_tree_entry(&tree1, &size1);
- continue;
- }
- switch (compare_tree_entry(tree1, size1, tree2, size2, base)) {
- case -1:
- update_tree_entry(&tree1, &size1);
- continue;
- case 0:
- update_tree_entry(&tree1, &size1);
- /* Fallthrough */
- case 1:
- update_tree_entry(&tree2, &size2);
- continue;
- }
- die("diff-tree: internal error");
- }
- return 0;