From: Junio C Hamano Date: Thu, 28 Feb 2013 17:19:55 GMT Subject: Re: [PATCH v8 3/5] Export rewrite_parents() for 'log -L' Message-ID: <7vfw0gicec.fsf@alter.siamese.dyndns.org> In-Reply-To: <8269ddf785d10c05e39905041df317b685e85168.1362069310.git.trast@student.ethz.ch> Thomas Rast writes: > From: Bo Yang > > The function rewrite_one is used to rewrite a single > parent of the current commit, and is used by rewrite_parents > to rewrite all the parents. > > Decouple the dependence between them by making rewrite_one > a callback function that is passed to rewrite_parents. Then > export rewrite_parents for reuse by the line history browser. > > We will use this function in line.c. Did you mean log-line.c or line-log.c or something? > Signed-off-by: Bo Yang > Signed-off-by: Thomas Rast > --- > revision.c | 13 ++++--------- > revision.h | 10 ++++++++++ > 2 files changed, 14 insertions(+), 9 deletions(-) > > diff --git a/revision.c b/revision.c > index ef60205..46319d5 100644 > --- a/revision.c > +++ b/revision.c > @@ -2173,12 +2173,6 @@ int prepare_revision_walk(struct rev_info *revs) > return 0; > } > > -enum rewrite_result { > - rewrite_one_ok, > - rewrite_one_noparents, > - rewrite_one_error > -}; > - > static enum rewrite_result rewrite_one(struct rev_info *revs, struct commit **pp) > { > struct commit_list *cache = NULL; > @@ -2200,12 +2194,13 @@ static enum rewrite_result rewrite_one(struct rev_info *revs, struct commit **pp > } > } > > -static int rewrite_parents(struct rev_info *revs, struct commit *commit) > +int rewrite_parents(struct rev_info *revs, struct commit *commit, > + rewrite_parent_fn_t rewrite_parent) > { > struct commit_list **pp = &commit->parents; > while (*pp) { > struct commit_list *parent = *pp; > - switch (rewrite_one(revs, &parent->item)) { > + switch (rewrite_parent(revs, &parent->item)) { > case rewrite_one_ok: > break; > case rewrite_one_noparents: > @@ -2371,7 +2366,7 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) > if (action == commit_show && > !revs->show_all && > revs->prune && revs->dense && want_ancestry(revs)) { > - if (rewrite_parents(revs, commit) < 0) > + if (rewrite_parents(revs, commit, rewrite_one) < 0) > return commit_error; > } > return action; > diff --git a/revision.h b/revision.h > index 5da09ee..640110d 100644 > --- a/revision.h > +++ b/revision.h > @@ -241,4 +241,14 @@ enum commit_action { > extern enum commit_action get_commit_action(struct rev_info *revs, struct commit *commit); > extern enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit); > > +enum rewrite_result { > + rewrite_one_ok, > + rewrite_one_noparents, > + rewrite_one_error > +}; > + > +typedef enum rewrite_result (*rewrite_parent_fn_t)(struct rev_info *revs, struct commit **pp); > + > +extern int rewrite_parents(struct rev_info *revs, struct commit *commit, > + rewrite_parent_fn_t rewrite_parent); > #endif