As promised, here is the diff from v3.

Thanks,
-Stolee

-- >8 --

diff --git a/builtin/merge.c b/builtin/merge.c
index 7e1da6c6ea..b819756946 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1148,6 +1148,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)         branch = branch_to_free = resolve_refdup("HEAD", 0, &head_oid, NULL);
        if (branch)
                skip_prefix(branch, "refs/heads/", &branch);
+
        init_diff_ui_defaults();
        git_config(git_merge_config, NULL);

@@ -1156,7 +1157,6 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        else
                head_commit = lookup_commit_or_die(&head_oid, "HEAD");

-
        if (branch_mergeoptions)
                parse_branch_merge_options(branch_mergeoptions);
        argc = parse_options(argc, argv, prefix, builtin_merge_options,
diff --git a/commit-graph.c b/commit-graph.c
index 21e853c21a..aebd242def 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -257,7 +257,7 @@ static int fill_commit_in_graph(struct commit *item, struct commit_graph *g, uin
        uint32_t *parent_data_ptr;
        uint64_t date_low, date_high;
        struct commit_list **pptr;
-       const unsigned char *commit_data = g->chunk_commit_data + GRAPH_DATA_WIDTH * pos; +       const unsigned char *commit_data = g->chunk_commit_data + (g->hash_len + 16) * pos;

        item->object.parsed = 1;
        item->graph_pos = pos;
@@ -304,7 +304,7 @@ static int find_commit_in_graph(struct commit *item, struct commit_graph *g, uin
                *pos = item->graph_pos;
                return 1;
        } else {
-               return bsearch_graph(commit_graph, &(item->object.oid), pos);
+               return bsearch_graph(g, &(item->object.oid), pos);
        }
 }

@@ -312,10 +312,10 @@ int parse_commit_in_graph(struct commit *item)
 {
        uint32_t pos;

-       if (item->object.parsed)
-               return 0;
        if (!core_commit_graph)
                return 0;
+       if (item->object.parsed)
+               return 1;
        prepare_commit_graph();
        if (commit_graph && find_commit_in_graph(item, commit_graph, &pos))
                return fill_commit_in_graph(item, commit_graph, pos);
@@ -454,9 +454,8 @@ static void write_graph_chunk_data(struct hashfile *f, int hash_len,
                else
                        packedDate[0] = 0;

-               if ((*list)->generation != GENERATION_NUMBER_INFINITY) {
+               if ((*list)->generation != GENERATION_NUMBER_INFINITY)
                        packedDate[0] |= htonl((*list)->generation << 2);
-               }

                packedDate[1] = htonl((*list)->date);
                hashwrite(f, packedDate, 8);
diff --git a/commit.c b/commit.c
index 9ef6f699bd..e2e16ea1a7 100644
--- a/commit.c
+++ b/commit.c
@@ -653,7 +653,7 @@ int compare_commits_by_gen_then_commit_date(const void *a_, const void *b_, void
        else if (a->generation > b->generation)
                return -1;

-       /* use date as a heuristic when generataions are equal */
+       /* use date as a heuristic when generations are equal */
        if (a->date < b->date)
                return 1;
        else if (a->date > b->date)
@@ -1078,7 +1078,7 @@ int in_merge_bases_many(struct commit *commit, int nr_reference, struct commit *
        }

        if (commit->generation > min_generation)
-               return 0;
+               return ret;

        bases = paint_down_to_common(commit, nr_reference, reference, commit->generation);
        if (commit->object.flags & PARENT2)
diff --git a/ref-filter.c b/ref-filter.c
index e2fea6d635..fb35067fc9 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -16,6 +16,7 @@
 #include "trailer.h"
 #include "wt-status.h"
 #include "commit-slab.h"
+#include "commit-graph.h"

 static struct ref_msg {
        const char *gone;
@@ -1582,7 +1583,7 @@ static int in_commit_list(const struct commit_list *want, struct commit *c)
 }

 /*
- * Test whether the candidate or one of its parents is contained in the list.
+ * Test whether the candidate is contained in the list.
  * Do not recurse to find out, though, but return -1 if inconclusive.
  */
 static enum contains_result contains_test(struct commit *candidate,
@@ -1629,7 +1630,7 @@ static enum contains_result contains_tag_algo(struct commit *candidate,

        for (p = want; p; p = p->next) {
                struct commit *c = p->item;
-               parse_commit_or_die(c);
+               load_commit_graph_info(c);
                if (c->generation < cutoff)
                        cutoff = c->generation;
        }


Reply via email to