packaging: Add contrib installation
[platform/upstream/git.git] / blame.c
diff --git a/blame.c b/blame.c
index da7e288..a5044fc 100644 (file)
--- a/blame.c
+++ b/blame.c
@@ -435,7 +435,7 @@ static void get_fingerprint(struct fingerprint *result,
 
 static void free_fingerprint(struct fingerprint *f)
 {
-       hashmap_free(&f->map);
+       hashmap_clear(&f->map);
        free(f->entries);
 }
 
@@ -1184,6 +1184,7 @@ void blame_coalesce(struct blame_scoreboard *sb)
        for (ent = sb->ent; ent && (next = ent->next); ent = next) {
                if (ent->suspect == next->suspect &&
                    ent->s_lno + ent->num_lines == next->s_lno &&
+                   ent->lno + ent->num_lines == next->lno &&
                    ent->ignored == next->ignored &&
                    ent->unblamable == next->unblamable) {
                        ent->num_lines += next->num_lines;
@@ -1272,10 +1273,10 @@ static int maybe_changed_path(struct repository *r,
        if (!bd)
                return 1;
 
-       if (origin->commit->generation == GENERATION_NUMBER_INFINITY)
+       if (commit_graph_generation(origin->commit) == GENERATION_NUMBER_INFINITY)
                return 1;
 
-       filter = get_bloom_filter(r, origin->commit, 0);
+       filter = get_bloom_filter(r, origin->commit);
 
        if (!filter)
                return 1;
@@ -1352,8 +1353,8 @@ static struct blame_origin *find_origin(struct repository *r,
        else {
                int compute_diff = 1;
                if (origin->commit->parents &&
-                   !oidcmp(&parent->object.oid,
-                           &origin->commit->parents->item->object.oid))
+                   oideq(&parent->object.oid,
+                         &origin->commit->parents->item->object.oid))
                        compute_diff = maybe_changed_path(r, origin, bd);
 
                if (compute_diff)
@@ -2669,7 +2670,7 @@ static struct commit *find_single_final(struct rev_info *revs,
                if (obj->flags & UNINTERESTING)
                        continue;
                obj = deref_tag(revs->repo, obj, NULL, 0);
-               if (obj->type != OBJ_COMMIT)
+               if (!obj || obj->type != OBJ_COMMIT)
                        die("Non commit %s?", revs->pending.objects[i].name);
                if (found)
                        die("More than one commit to dig from %s and %s?",
@@ -2700,7 +2701,7 @@ static struct commit *dwim_reverse_initial(struct rev_info *revs,
        /* Is that sole rev a committish? */
        obj = revs->pending.objects[0].item;
        obj = deref_tag(revs->repo, obj, NULL, 0);
-       if (obj->type != OBJ_COMMIT)
+       if (!obj || obj->type != OBJ_COMMIT)
                return NULL;
 
        /* Do we have HEAD? */
@@ -2736,7 +2737,7 @@ static struct commit *find_single_initial(struct rev_info *revs,
                if (!(obj->flags & UNINTERESTING))
                        continue;
                obj = deref_tag(revs->repo, obj, NULL, 0);
-               if (obj->type != OBJ_COMMIT)
+               if (!obj || obj->type != OBJ_COMMIT)
                        die("Non commit %s?", revs->pending.objects[i].name);
                if (found)
                        die("More than one commit to dig up from, %s and %s?",
@@ -2763,7 +2764,6 @@ void init_scoreboard(struct blame_scoreboard *sb)
 }
 
 void setup_scoreboard(struct blame_scoreboard *sb,
-                     const char *path,
                      struct blame_origin **orig)
 {
        const char *final_commit_name = NULL;
@@ -2802,7 +2802,7 @@ void setup_scoreboard(struct blame_scoreboard *sb,
                setup_work_tree();
                sb->final = fake_working_tree_commit(sb->repo,
                                                     &sb->revs->diffopt,
-                                                    path, sb->contents_from);
+                                                    sb->path, sb->contents_from);
                add_pending_object(sb->revs, &(sb->final->object), ":");
        }
 
@@ -2845,12 +2845,12 @@ void setup_scoreboard(struct blame_scoreboard *sb,
                sb->final_buf_size = o->file.size;
        }
        else {
-               o = get_origin(sb->final, path);
+               o = get_origin(sb->final, sb->path);
                if (fill_blob_sha1_and_mode(sb->repo, o))
-                       die(_("no such path %s in %s"), path, final_commit_name);
+                       die(_("no such path %s in %s"), sb->path, final_commit_name);
 
                if (sb->revs->diffopt.flags.allow_textconv &&
-                   textconv_object(sb->repo, path, o->mode, &o->blob_oid, 1, (char **) &sb->final_buf,
+                   textconv_object(sb->repo, sb->path, o->mode, &o->blob_oid, 1, (char **) &sb->final_buf,
                                    &sb->final_buf_size))
                        ;
                else
@@ -2860,7 +2860,7 @@ void setup_scoreboard(struct blame_scoreboard *sb,
                if (!sb->final_buf)
                        die(_("cannot read blob %s for path %s"),
                            oid_to_hex(&o->blob_oid),
-                           path);
+                           sb->path);
        }
        sb->num_read_blob++;
        prepare_lines(sb);
@@ -2887,26 +2887,27 @@ struct blame_entry *blame_entry_prepend(struct blame_entry *head,
        return new_head;
 }
 
-void setup_blame_bloom_data(struct blame_scoreboard *sb,
-                           const char *path)
+void setup_blame_bloom_data(struct blame_scoreboard *sb)
 {
        struct blame_bloom_data *bd;
+       struct bloom_filter_settings *bs;
 
        if (!sb->repo->objects->commit_graph)
                return;
 
-       if (!sb->repo->objects->commit_graph->bloom_filter_settings)
+       bs = get_bloom_filter_settings(sb->repo);
+       if (!bs)
                return;
 
        bd = xmalloc(sizeof(struct blame_bloom_data));
 
-       bd->settings = sb->repo->objects->commit_graph->bloom_filter_settings;
+       bd->settings = bs;
 
        bd->alloc = 4;
        bd->nr = 0;
        ALLOC_ARRAY(bd->keys, bd->alloc);
 
-       add_bloom_key(bd, path);
+       add_bloom_key(bd, sb->path);
 
        sb->bloom_data = bd;
 }