Diff options
Diffstat (limited to 'source/ui-shared.c')
| -rw-r--r-- | source/ui-shared.c | 27 |
1 file changed, 27 insertions, 0 deletions
diff --git a/source/ui-shared.c b/source/ui-shared.c index 5f5dcca..b34861d 100644 --- a/source/ui-shared.c +++ b/source/ui-shared.c @@ -1499,6 +1499,33 @@ void cgit_print_blob_too_large(size_t size) size / 1024, ctx.cfg.max_blob_size); } +struct commit *cgit_get_commit(const char *rev, struct object_id *oid) +{ + struct commit *commit; + + if (repo_get_oid(the_repository, rev, oid)) { + cgit_print_error_page(404, "Not Found", "Bad object id: %s", rev); + return NULL; + } + // lookup_commit_reference parses the commit, and fails on one git + // cannot parse. + commit = lookup_commit_reference(the_repository, oid); + if (!commit) + cgit_print_error_page(404, "Not Found", "Not a commit: %s", rev); + return commit; +} + +int cgit_get_old_oid(const char *old_rev, const struct commit *commit, struct object_id *oid) +{ + if (old_rev) + return cgit_get_commit(old_rev, oid) ? 0 : -1; + if (commit->parents && commit->parents->item) + oidcpy(oid, &commit->parents->item->object.oid); + else + oidclr(oid, the_repository->hash_algo); + return 0; +} + static void add_clone_urls(void (*fn)(const char *), char *urls, char *suffix) { struct strbuf **url_list = strbuf_split_str(urls, ' ', 0); |
