Skip to content

Commit

Permalink
commit.c: add clear_commit_marks_many()
Browse files Browse the repository at this point in the history
clear_commit_marks(struct commit *, unsigned) only can clear flag
bits starting from a single commit; introduce an API to allow
feeding an array of commits, so that flag bits can be cleared from
commits reachable from any of them with a single traversal.

Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
gitster committed Mar 5, 2013
1 parent e6363a4 commit e895cb5
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
19 changes: 13 additions & 6 deletions commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -463,14 +463,23 @@ static void clear_commit_marks_1(struct commit_list **plist,
}
}

void clear_commit_marks(struct commit *commit, unsigned int mark)
void clear_commit_marks_many(int nr, struct commit **commit, unsigned int mark)
{
struct commit_list *list = NULL;
commit_list_insert(commit, &list);

while (nr--) {
commit_list_insert(*commit, &list);
commit++;
}
while (list)
clear_commit_marks_1(&list, pop_commit(&list), mark);
}

void clear_commit_marks(struct commit *commit, unsigned int mark)
{
clear_commit_marks_many(1, &commit, mark);
}

void clear_commit_marks_for_object_array(struct object_array *a, unsigned mark)
{
struct object *object;
Expand Down Expand Up @@ -797,8 +806,7 @@ struct commit_list *get_merge_bases_many(struct commit *one,
if (!result || !result->next) {
if (cleanup) {
clear_commit_marks(one, all_flags);
for (i = 0; i < n; i++)
clear_commit_marks(twos[i], all_flags);
clear_commit_marks_many(n, twos, all_flags);
}
return result;
}
Expand All @@ -816,8 +824,7 @@ struct commit_list *get_merge_bases_many(struct commit *one,
free_commit_list(result);

clear_commit_marks(one, all_flags);
for (i = 0; i < n; i++)
clear_commit_marks(twos[i], all_flags);
clear_commit_marks_many(n, twos, all_flags);

cnt = remove_redundant(rslt, cnt);
result = NULL;
Expand Down
1 change: 1 addition & 0 deletions commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ struct commit *pop_most_recent_commit(struct commit_list **list,
struct commit *pop_commit(struct commit_list **stack);

void clear_commit_marks(struct commit *commit, unsigned int mark);
void clear_commit_marks_many(int nr, struct commit **commit, unsigned int mark);
void clear_commit_marks_for_object_array(struct object_array *a, unsigned mark);

/*
Expand Down

0 comments on commit e895cb5

Please sign in to comment.