From: Junio C Hamano Date: Sat, 19 Sep 2020 00:58:05 +0000 (-0700) Subject: Merge branch 'mf/submodule-summary-with-correct-repository' X-Git-Tag: v2.29.0-rc0~65 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4831c23f75556df8906a508454d70faca0facd27;p=thirdparty%2Fgit.git Merge branch 'mf/submodule-summary-with-correct-repository' "git diff/show" on a change that involves a submodule used to read the information on commits in the submodule from a wrong repository and gave a wrong information when the commit-graph is involved. * mf/submodule-summary-with-correct-repository: submodule: use submodule repository when preparing summary revision: use repository from rev_info when parsing commits --- 4831c23f75556df8906a508454d70faca0facd27 diff --cc revision.c index 1239023f93,bedfe8551d..067030e64c --- a/revision.c +++ b/revision.c @@@ -3375,10 -3168,10 +3375,10 @@@ static void indegree_walk_step(struct r if (!c) return; - if (parse_commit_gently(c, 1) < 0) + if (repo_parse_commit_gently(revs->repo, c, 1) < 0) return; - explore_to_depth(revs, c->generation); + explore_to_depth(revs, commit_graph_generation(c)); for (p = c->parents; p; p = p->next) { struct commit *parent = p->item; @@@ -3455,9 -3248,8 +3455,9 @@@ static void init_topo_walk(struct rev_i info->min_generation = GENERATION_NUMBER_INFINITY; for (list = revs->commits; list; list = list->next) { struct commit *c = list->item; + uint32_t generation; - if (parse_commit_gently(c, 1)) + if (repo_parse_commit_gently(revs->repo, c, 1)) continue; test_flag_and_insert(&info->explore_queue, c, TOPO_WALK_EXPLORED); @@@ -3521,12 -3311,11 +3521,12 @@@ static void expand_topo_walk(struct rev if (parent->object.flags & UNINTERESTING) continue; - if (parse_commit_gently(parent, 1) < 0) + if (repo_parse_commit_gently(revs->repo, parent, 1) < 0) continue; - if (parent->generation < info->min_generation) { - info->min_generation = parent->generation; + generation = commit_graph_generation(parent); + if (generation < info->min_generation) { + info->min_generation = generation; compute_indegrees_to_depth(revs, info->min_generation); } diff --cc submodule.c index b84438b7e0,87df5fec92..543b1123ae --- a/submodule.c +++ b/submodule.c @@@ -438,9 -438,9 +438,10 @@@ void handle_ignore_submodules_arg(struc */ } - static int prepare_submodule_diff_summary(struct rev_info *rev, const char *path, - struct commit *left, struct commit *right, -static int prepare_submodule_summary(struct repository *r, struct rev_info *rev, - const char *path, struct commit *left, struct commit *right, -- struct commit_list *merge_bases) ++static int prepare_submodule_diff_summary(struct repository *r, struct rev_info *rev, ++ const char *path, ++ struct commit *left, struct commit *right, ++ struct commit_list *merge_bases) { struct commit_list *list; @@@ -632,7 -632,7 +633,7 @@@ void show_submodule_diff_summary(struc goto out; /* Treat revision walker failure the same as missing commits */ - if (prepare_submodule_diff_summary(&rev, path, left, right, merge_bases)) { - if (prepare_submodule_summary(sub, &rev, path, left, right, merge_bases)) { ++ if (prepare_submodule_diff_summary(sub, &rev, path, left, right, merge_bases)) { diff_emit_submodule_error(o, "(revision walker failed)\n"); goto out; }