revision traversal: --remove-empty fix.
authorJunio C Hamano <junkio@cox.net>
Sun, 12 Mar 2006 21:39:31 +0000 (13:39 -0800)
committerJunio C Hamano <junkio@cox.net>
Sun, 12 Mar 2006 21:39:31 +0000 (13:39 -0800)
Marco Costalba reports that --remove-empty omits the commit that
created paths we are interested in.  try_to_simplify_commit()
logic was dropping a parent we introduced those paths against,
which I think is not what we meant.  Instead, this marks such
parent uninteresting.  The traversal does not go beyond that
parent as advertised, but we still say that the current commit
changed things from that parent.

Signed-off-by: Junio C Hamano <junkio@cox.net>
revision.c

index c8d93ff106d88cd7c11a8b246d0d469301a2ffab..03085ffe9d9eafb2e40b962b75608b139d25e108 100644 (file)
@@ -315,9 +315,14 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
                        return;
 
                case TREE_NEW:
-                       if (revs->remove_empty_trees && same_tree_as_empty(p->tree)) {
-                               *pp = parent->next;
-                               continue;
+                       if (revs->remove_empty_trees &&
+                           same_tree_as_empty(p->tree)) {
+                               /* We are adding all the specified paths from
+                                * this parent, so the parents of it is
+                                * not interesting, but the difference between
+                                * this parent and us still is interesting.
+                                */
+                               p->object.flags |= UNINTERESTING;
                        }
                /* fallthrough */
                case TREE_DIFFERENT: