@ -350,6 +350,7 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
{
{
struct commit_list *parent = commit->parents;
struct commit_list *parent = commit->parents;
unsigned left_flag;
unsigned left_flag;
int add, rest;
if (commit->object.flags & ADDED)
if (commit->object.flags & ADDED)
return;
return;
@ -395,17 +396,18 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
return;
return;
left_flag = (commit->object.flags & SYMMETRIC_LEFT);
left_flag = (commit->object.flags & SYMMETRIC_LEFT);
parent = commit->parents;
while (parent) {
rest = !revs->first_parent_only;
for (parent = commit->parents, add = 1; parent; add = rest) {
struct commit *p = parent->item;
struct commit *p = parent->item;
parent = parent->next;
parent = parent->next;
parse_commit(p);
parse_commit(p);
p->object.flags |= left_flag;
p->object.flags |= left_flag;
if (p->object.flags & SEEN)
if (p->object.flags & SEEN)
continue;
continue;
p->object.flags |= SEEN;
p->object.flags |= SEEN;
if (add)
insert_by_date(p, list);
insert_by_date(p, list);
}
}
}
}
@ -836,6 +838,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
handle_all(revs, flags);
handle_all(revs, flags);
continue;
continue;
}
}
if (!strcmp(arg, "--first-parent")) {
revs->first_parent_only = 1;
continue;
}
if (!strcmp(arg, "--reflog")) {
if (!strcmp(arg, "--reflog")) {
handle_reflog(revs, flags);
handle_reflog(revs, flags);
continue;
continue;