rename "alternate_object_database" to "object_directory"
[gitweb.git] / commit-reach.c
index 66aa41262c5e34b6f5c6cc02ca1f85a51e9fff58..a9da65c4625cbbeb165b0c2d54fe3edabb1a3a34 100644 (file)
@@ -39,6 +39,9 @@ static struct commit_list *paint_down_to_common(struct commit *one, int n,
        int i;
        uint32_t last_gen = GENERATION_NUMBER_INFINITY;
 
+       if (!min_generation)
+               queue.compare = compare_commits_by_commit_date;
+
        one->object.flags |= PARENT1;
        if (!n) {
                commit_list_append(one, &result);
@@ -56,7 +59,7 @@ static struct commit_list *paint_down_to_common(struct commit *one, int n,
                struct commit_list *parents;
                int flags;
 
-               if (commit->generation > last_gen)
+               if (min_generation && commit->generation > last_gen)
                        BUG("bad generation skip %8x > %8x at %s",
                            commit->generation, last_gen,
                            oid_to_hex(&commit->object.oid));
@@ -423,7 +426,7 @@ struct contains_stack {
 static int in_commit_list(const struct commit_list *want, struct commit *c)
 {
        for (; want; want = want->next)
-               if (!oidcmp(&want->item->object.oid, &c->object.oid))
+               if (oideq(&want->item->object.oid, &c->object.oid))
                        return 1;
        return 0;
 }
@@ -526,8 +529,8 @@ int commit_contains(struct ref_filter *filter, struct commit *commit,
 
 static int compare_commits_by_gen(const void *_a, const void *_b)
 {
-       const struct commit *a = (const struct commit *)_a;
-       const struct commit *b = (const struct commit *)_b;
+       const struct commit *a = *(const struct commit * const *)_a;
+       const struct commit *b = *(const struct commit * const *)_b;
 
        if (a->generation < b->generation)
                return -1;
@@ -590,8 +593,10 @@ int can_all_from_reach_with_flag(struct object_array *from,
                while (stack) {
                        struct commit_list *parent;
 
-                       if (stack->item->object.flags & with_flag) {
+                       if (stack->item->object.flags & (with_flag | RESULT)) {
                                pop_commit(&stack);
+                               if (stack)
+                                       stack->item->object.flags |= RESULT;
                                continue;
                        }