tree-diff: don't assume compare_tree_entry() returns -1,0,1
[gitweb.git] / tree-diff.c
index 1af82190339b058549cb2197b92edb1369c0ba42..6a677daa7a8c31bea89aaa4bc1a594dfc1e0e376 100644 (file)
@@ -178,18 +178,24 @@ int diff_tree(struct tree_desc *t1, struct tree_desc *t2,
                        update_tree_entry(t1);
                        continue;
                }
-               switch (compare_tree_entry(t1, t2, &base, opt)) {
-               case -1:
+
+               cmp = compare_tree_entry(t1, t2, &base, opt);
+
+               /* t1 = t2 */
+               if (cmp == 0) {
                        update_tree_entry(t1);
-                       continue;
-               case 0:
+                       update_tree_entry(t2);
+               }
+
+               /* t1 < t2 */
+               else if (cmp < 0) {
                        update_tree_entry(t1);
-                       /* Fallthrough */
-               case 1:
+               }
+
+               /* t1 > t2 */
+               else {
                        update_tree_entry(t2);
-                       continue;
                }
-               die("git diff-tree: internal error");
        }
 
        strbuf_release(&base);