]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'mf/submodule-summary-with-correct-repository'
authorJunio C Hamano <gitster@pobox.com>
Sat, 19 Sep 2020 00:58:05 +0000 (17:58 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 19 Sep 2020 00:58:05 +0000 (17:58 -0700)
"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

1  2 
commit.h
revision.c
submodule.c

diff --cc commit.h
Simple merge
diff --cc revision.c
index 1239023f93c61517a8d0ff7a9ef8a5124c1bc25a,bedfe8551d5e8b46272cff89e6fff1121312abc1..067030e64c5da522e7d347080cb7eff289497d14
@@@ -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 b84438b7e09dd214d09a2254a93179825f7d737a,87df5fec92bf632f0014f6b8ae2223b2558ed34e..543b1123ae1264eeb891a2e6e4ab7939180b004b
@@@ -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;
        }