Diff options
Diffstat (limited to 'source/ui-shared.c')
-rw-r--r--source/ui-shared.c27
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);