@@ -1014,9 +1014,7 @@ void sort_in_topological_order(struct commit_list **list, enum rev_sort_order so
10141014}
10151015
10161016struct rev_collect {
1017- struct commit * * commit ;
1018- int nr ;
1019- int alloc ;
1017+ struct commit_stack stack ;
10201018 unsigned int initial : 1 ;
10211019};
10221020
@@ -1033,8 +1031,7 @@ static void add_one_commit(struct object_id *oid, struct rev_collect *revs)
10331031 repo_parse_commit (the_repository , commit ))
10341032 return ;
10351033
1036- ALLOC_GROW (revs -> commit , revs -> nr + 1 , revs -> alloc );
1037- revs -> commit [revs -> nr ++ ] = commit ;
1034+ commit_stack_push (& revs -> stack , commit );
10381035 commit -> object .flags |= TMP_MARK ;
10391036}
10401037
@@ -1059,7 +1056,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
10591056 struct object_id oid ;
10601057 struct rev_collect revs ;
10611058 struct commit_list * bases = NULL ;
1062- int i ;
1059+ size_t i ;
10631060 struct commit * ret = NULL ;
10641061 char * full_refname ;
10651062
@@ -1073,19 +1070,19 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
10731070 die ("Ambiguous refname: '%s'" , refname );
10741071 }
10751072
1076- memset (& revs , 0 , sizeof ( revs ) );
1073+ commit_stack_init (& revs . stack );
10771074 revs .initial = 1 ;
10781075 refs_for_each_reflog_ent (get_main_ref_store (the_repository ),
10791076 full_refname , collect_one_reflog_ent , & revs );
10801077
1081- if (!revs .nr )
1078+ if (!revs .stack . nr )
10821079 add_one_commit (& oid , & revs );
10831080
1084- for (i = 0 ; i < revs .nr ; i ++ )
1085- revs .commit [i ]-> object .flags &= ~TMP_MARK ;
1081+ for (i = 0 ; i < revs .stack . nr ; i ++ )
1082+ revs .stack . items [i ]-> object .flags &= ~TMP_MARK ;
10861083
1087- if (repo_get_merge_bases_many (the_repository , commit , revs .nr ,
1088- revs .commit , & bases ) < 0 )
1084+ if (repo_get_merge_bases_many (the_repository , commit , revs .stack . nr ,
1085+ revs .stack . items , & bases ) < 0 )
10891086 exit (128 );
10901087
10911088 /*
@@ -1096,16 +1093,16 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
10961093 goto cleanup_return ;
10971094
10981095 /* And the found one must be one of the reflog entries */
1099- for (i = 0 ; i < revs .nr ; i ++ )
1100- if (& bases -> item -> object == & revs .commit [i ]-> object )
1096+ for (i = 0 ; i < revs .stack . nr ; i ++ )
1097+ if (& bases -> item -> object == & revs .stack . items [i ]-> object )
11011098 break ; /* found */
1102- if (revs .nr <= i )
1099+ if (revs .stack . nr <= i )
11031100 goto cleanup_return ;
11041101
11051102 ret = bases -> item ;
11061103
11071104cleanup_return :
1108- free ( revs .commit );
1105+ commit_stack_clear ( & revs .stack );
11091106 commit_list_free (bases );
11101107 free (full_refname );
11111108 return ret ;
0 commit comments