Linus Torvalds <torvalds@xxxxxxxx> writes: > On Sun, 12 Mar 2006, Junio C Hamano wrote: >> >> To be honest, I do not know how --remove-empty is intended to >> work. > > It's supposed to stop traversing the tree once a pathname disappears. Then what we should simplify is the parent commit that does not have those pathnames (i.e. remove parents from that parent commit). In other words, currently the code removes the parent commit that makes the tree disappear, but we would want to keep that parent, remove the grandparents, and then mark the parent uninteresting. -- >8 -- [PATCH] revision traversal: --remove-empty fix (take #2). 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 makes such parent parentless. Signed-off-by: Junio C Hamano <junkio@xxxxxxx> --- diff --git a/revision.c b/revision.c index c8d93ff..73fba5d 100644 --- a/revision.c +++ b/revision.c @@ -315,9 +315,18 @@ static void try_to_simplify_commit(struc 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 + * history beyond this parent is not + * interesting. Remove its parents + * (they are grandparents for us). + * IOW, we pretend this parent is a + * "root" commit. + */ + parse_commit(p); + p->parents = NULL; } /* fallthrough */ case TREE_DIFFERENT: - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html