@@ -1015,9 +1015,7 @@ void sort_in_topological_order(struct commit_list **list, enum rev_sort_order so
10151015}
10161016
10171017struct rev_collect {
1018- struct commit * * commit ;
1019- int nr ;
1020- int alloc ;
1018+ struct commit_stack stack ;
10211019 unsigned int initial : 1 ;
10221020};
10231021
@@ -1034,8 +1032,7 @@ static void add_one_commit(struct object_id *oid, struct rev_collect *revs)
10341032 repo_parse_commit (the_repository , commit ))
10351033 return ;
10361034
1037- ALLOC_GROW (revs -> commit , revs -> nr + 1 , revs -> alloc );
1038- revs -> commit [revs -> nr ++ ] = commit ;
1035+ commit_stack_push (& revs -> stack , commit );
10391036 commit -> object .flags |= TMP_MARK ;
10401037}
10411038
@@ -1060,7 +1057,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
10601057 struct object_id oid ;
10611058 struct rev_collect revs ;
10621059 struct commit_list * bases = NULL ;
1063- int i ;
1060+ size_t i ;
10641061 struct commit * ret = NULL ;
10651062 char * full_refname ;
10661063
@@ -1074,19 +1071,19 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
10741071 die ("Ambiguous refname: '%s'" , refname );
10751072 }
10761073
1077- memset (& revs , 0 , sizeof ( revs ) );
1074+ commit_stack_init (& revs . stack );
10781075 revs .initial = 1 ;
10791076 refs_for_each_reflog_ent (get_main_ref_store (the_repository ),
10801077 full_refname , collect_one_reflog_ent , & revs );
10811078
1082- if (!revs .nr )
1079+ if (!revs .stack . nr )
10831080 add_one_commit (& oid , & revs );
10841081
1085- for (i = 0 ; i < revs .nr ; i ++ )
1086- revs .commit [i ]-> object .flags &= ~TMP_MARK ;
1082+ for (i = 0 ; i < revs .stack . nr ; i ++ )
1083+ revs .stack . items [i ]-> object .flags &= ~TMP_MARK ;
10871084
1088- if (repo_get_merge_bases_many (the_repository , commit , revs .nr ,
1089- revs .commit , & bases ) < 0 )
1085+ if (repo_get_merge_bases_many (the_repository , commit , revs .stack . nr ,
1086+ revs .stack . items , & bases ) < 0 )
10901087 exit (128 );
10911088
10921089 /*
@@ -1097,16 +1094,16 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
10971094 goto cleanup_return ;
10981095
10991096 /* And the found one must be one of the reflog entries */
1100- for (i = 0 ; i < revs .nr ; i ++ )
1101- if (& bases -> item -> object == & revs .commit [i ]-> object )
1097+ for (i = 0 ; i < revs .stack . nr ; i ++ )
1098+ if (& bases -> item -> object == & revs .stack . items [i ]-> object )
11021099 break ; /* found */
1103- if (revs .nr <= i )
1100+ if (revs .stack . nr <= i )
11041101 goto cleanup_return ;
11051102
11061103 ret = bases -> item ;
11071104
11081105cleanup_return :
1109- free ( revs .commit );
1106+ commit_stack_clear ( & revs .stack );
11101107 free_commit_list (bases );
11111108 free (full_refname );
11121109 return ret ;
0 commit comments