]> git.cameronkatri.com Git - cgit.git/blobdiff - ui-blame.c
ui-snapshot: add support for lzip compression
[cgit.git] / ui-blame.c
index 17e2d60dc6981d486cd8bde05a081eb80d74578c..644c30ad289e79f98b59b49aac1aef18028e9118 100644 (file)
@@ -49,7 +49,7 @@ static void emit_blame_entry_hash(struct blame_entry *ent)
 
        char *detail = emit_suspect_detail(suspect);
        html("<span class='sha1'>");
-       cgit_commit_link(find_unique_abbrev(oid->hash, DEFAULT_ABBREV), detail,
+       cgit_commit_link(find_unique_abbrev(oid, DEFAULT_ABBREV), detail,
                         NULL, ctx.qry.head, oid_to_hex(oid), suspect->path);
        html("</span>");
        free(detail);
@@ -98,7 +98,7 @@ struct walk_tree_context {
        int state;
 };
 
-static void print_object(const unsigned char *sha1, const char *path,
+static void print_object(const struct object_id *oid, const char *path,
                         const char *basename, const char *rev)
 {
        enum object_type type;
@@ -110,17 +110,17 @@ static void print_object(const unsigned char *sha1, const char *path,
        struct blame_origin *o;
        struct blame_entry *ent = NULL;
 
-       type = sha1_object_info(sha1, &size);
+       type = oid_object_info(the_repository, oid, &size);
        if (type == OBJ_BAD) {
                cgit_print_error_page(404, "Not found", "Bad object name: %s",
-                                     sha1_to_hex(sha1));
+                                     oid_to_hex(oid));
                return;
        }
 
-       buf = read_sha1_file(sha1, &type, &size);
+       buf = read_object_file(oid, &type, &size);
        if (!buf) {
                cgit_print_error_page(500, "Internal server error",
-                       "Error reading object %s", sha1_to_hex(sha1));
+                       "Error reading object %s", oid_to_hex(oid));
                return;
        }
 
@@ -131,6 +131,7 @@ static void print_object(const unsigned char *sha1, const char *path,
        setup_revisions(rev_argv.argc, rev_argv.argv, &revs, NULL);
        init_scoreboard(&sb);
        sb.revs = &revs;
+       sb.repo = the_repository;
        setup_scoreboard(&sb, path, &o);
        o->suspects = blame_entry_prepend(NULL, 0, sb.num_lines, o);
        prio_queue_put(&sb.commits, o->commit);
@@ -144,7 +145,7 @@ static void print_object(const unsigned char *sha1, const char *path,
        cgit_set_title_from_path(path);
 
        cgit_print_layout_start();
-       htmlf("blob: %s (", sha1_to_hex(sha1));
+       htmlf("blob: %s (", oid_to_hex(oid));
        cgit_plain_link("plain", NULL, NULL, ctx.qry.head, rev, path);
        html(") (");
        cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path);
@@ -154,7 +155,7 @@ static void print_object(const unsigned char *sha1, const char *path,
                htmlf("<div class='error'>blob size (%ldKB)"
                      " exceeds display size limit (%dKB).</div>",
                      size / 1024, ctx.cfg.max_blob_size);
-               return;
+               goto cleanup;
        }
 
        html("<table class='blame blob'>\n<tr>\n");
@@ -213,9 +214,12 @@ static void print_object(const unsigned char *sha1, const char *path,
        html("</tr>\n</table>\n");
 
        cgit_print_layout_end();
+
+cleanup:
+       free(buf);
 }
 
-static int walk_tree(const unsigned char *sha1, struct strbuf *base,
+static int walk_tree(const struct object_id *oid, struct strbuf *base,
                     const char *pathname, unsigned mode, int stage,
                     void *cbdata)
 {
@@ -226,7 +230,7 @@ static int walk_tree(const unsigned char *sha1, struct strbuf *base,
                        struct strbuf buffer = STRBUF_INIT;
                        strbuf_addbuf(&buffer, base);
                        strbuf_addstr(&buffer, pathname);
-                       print_object(sha1, buffer.buf, pathname,
+                       print_object(oid, buffer.buf, pathname,
                                     walk_tree_ctx->curr_rev);
                        strbuf_release(&buffer);
                        walk_tree_ctx->state = 1;
@@ -275,7 +279,7 @@ void cgit_print_blame(void)
                        "Invalid revision name: %s", rev);
                return;
        }
-       commit = lookup_commit_reference(&oid);
+       commit = lookup_commit_reference(the_repository, &oid);
        if (!commit || parse_commit(commit)) {
                cgit_print_error_page(404, "Not found",
                        "Invalid commit reference: %s", rev);
@@ -286,8 +290,8 @@ void cgit_print_blame(void)
        walk_tree_ctx.match_baselen = (path_items.match) ?
                                       basedir_len(path_items.match) : -1;
 
-       read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree,
-               &walk_tree_ctx);
+       read_tree_recursive(the_repository, commit->maybe_tree, "", 0, 0,
+               &paths, walk_tree, &walk_tree_ctx);
        if (!walk_tree_ctx.state)
                cgit_print_error_page(404, "Not found", "Not found");
        else if (walk_tree_ctx.state == 2)