diff options
author | René Scharfe <l.s.r@web.de> | 2025-02-23 09:26:04 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2025-02-24 08:51:18 -0800 |
commit | 1ca727f230d83db20952f8ae7ce2f1749d744334 (patch) | |
tree | 8d2d35e04f4d5295504df886f1c3a1f00a112255 /commit.c | |
parent | 2d2a71ce85026edcc40f469678a1035df0dfcf57 (diff) |
commit: avoid parent list buildup in clear_commit_marks_many()
clear_commit_marks_1() clears the marks of the first parent and its
first parent and so on, and saves the higher numbered parents in a list
for later. There is no benefit in keeping that list growing with each
handled commit. Clear it after each run to reduce peak memory usage.
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
-rw-r--r-- | commit.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -780,14 +780,14 @@ static void clear_commit_marks_1(struct commit_list **plist, void clear_commit_marks_many(size_t nr, struct commit **commit, unsigned int mark) { - struct commit_list *list = NULL; - for (size_t i = 0; i < nr; i++) { + struct commit_list *list = NULL; + clear_commit_marks_1(&list, *commit, mark); + while (list) + clear_commit_marks_1(&list, pop_commit(&list), mark); commit++; } - while (list) - clear_commit_marks_1(&list, pop_commit(&list), mark); } void clear_commit_marks(struct commit *commit, unsigned int mark) |