struct single_tree_ctx {
struct strbuf *path;
- unsigned char sha1[GIT_SHA1_RAWSZ];
+ struct object_id oid;
char *name;
size_t count;
};
}
ctx->name = xstrdup(pathname);
- hashcpy(ctx->sha1, sha1);
+ hashcpy(ctx->oid.hash, sha1);
strbuf_addf(ctx->path, "/%s", pathname);
return 0;
}
.nr = 0
};
- hashcpy(tree_ctx.sha1, sha1);
+ hashcpy(tree_ctx.oid.hash, sha1);
while (tree_ctx.count == 1) {
cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, rev,
fullpath->buf);
- tree = lookup_tree(tree_ctx.sha1);
+ tree = lookup_tree(&tree_ctx.oid);
if (!tree)
return;
cgit_print_layout_end();
}
-static void ls_tree(const unsigned char *sha1, char *path, struct walk_tree_context *walk_tree_ctx)
+static void ls_tree(const struct object_id *oid, char *path, struct walk_tree_context *walk_tree_ctx)
{
struct tree *tree;
struct pathspec paths = {
.nr = 0
};
- tree = parse_tree_indirect(sha1);
+ tree = parse_tree_indirect(oid);
if (!tree) {
cgit_print_error_page(404, "Not found",
- "Not a tree object: %s", sha1_to_hex(sha1));
+ "Not a tree object: %s", sha1_to_hex(oid->hash));
return;
}
const char *pathname, unsigned mode, int stage, void *cbdata)
{
struct walk_tree_context *walk_tree_ctx = cbdata;
- static char buffer[PATH_MAX];
if (walk_tree_ctx->state == 0) {
- memcpy(buffer, base->buf, base->len);
- strcpy(buffer + base->len, pathname);
- if (strcmp(walk_tree_ctx->match_path, buffer))
+ struct strbuf buffer = STRBUF_INIT;
+
+ strbuf_addbuf(&buffer, base);
+ strbuf_addstr(&buffer, pathname);
+ if (strcmp(walk_tree_ctx->match_path, buffer.buf))
return READ_TREE_RECURSIVE;
if (S_ISDIR(mode)) {
walk_tree_ctx->state = 1;
- set_title_from_path(buffer);
+ set_title_from_path(buffer.buf);
+ strbuf_release(&buffer);
ls_head();
return READ_TREE_RECURSIVE;
} else {
walk_tree_ctx->state = 2;
- print_object(sha1, buffer, pathname, walk_tree_ctx->curr_rev);
+ print_object(sha1, buffer.buf, pathname, walk_tree_ctx->curr_rev);
+ strbuf_release(&buffer);
return 0;
}
}
*/
void cgit_print_tree(const char *rev, char *path)
{
- unsigned char sha1[20];
+ struct object_id oid;
struct commit *commit;
struct pathspec_item path_items = {
.match = path,
if (!rev)
rev = ctx.qry.head;
- if (get_sha1(rev, sha1)) {
+ if (get_oid(rev, &oid)) {
cgit_print_error_page(404, "Not found",
"Invalid revision name: %s", rev);
return;
}
- commit = lookup_commit_reference(sha1);
+ commit = lookup_commit_reference(&oid);
if (!commit || parse_commit(commit)) {
cgit_print_error_page(404, "Not found",
"Invalid commit reference: %s", rev);
walk_tree_ctx.curr_rev = xstrdup(rev);
if (path == NULL) {
- ls_tree(commit->tree->object.oid.hash, NULL, &walk_tree_ctx);
+ ls_tree(&commit->tree->object.oid, NULL, &walk_tree_ctx);
goto cleanup;
}