- commit = lookup_commit_reference(new_rev_sha1);
- if (!commit || parse_commit(commit))
- cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(new_rev_sha1)));
-
- if (old_rev)
- get_sha1(old_rev, old_rev_sha1);
- else if (commit->parents && commit->parents->item)
- hashcpy(old_rev_sha1, commit->parents->item->object.sha1);
- else
- hashclr(old_rev_sha1);
-
- if (!is_null_sha1(old_rev_sha1)) {
- type = sha1_object_info(old_rev_sha1, &size);
- if (type == OBJ_BAD) {
- cgit_print_error(fmt("Bad object name: %s", sha1_to_hex(old_rev_sha1)));
+ new_tree_oid = get_commit_tree_oid(commit);
+
+ if (old_rev) {
+ if (repo_get_oid(the_repository, old_rev, old_rev_oid)) {
+ cgit_print_error_page(404, "Not found",
+ "Bad object name: %s", old_rev);
+ return;
+ }
+ } else if (commit->parents && commit->parents->item) {
+ oidcpy(old_rev_oid, &commit->parents->item->object.oid);
+ } else {
+ oidclr(old_rev_oid, the_repository->hash_algo);
+ }
+
+ if (!is_null_oid(old_rev_oid)) {
+ commit2 = lookup_commit_reference(the_repository, old_rev_oid);
+ if (!commit2 || repo_parse_commit(the_repository, commit2)) {
+ cgit_print_error_page(404, "Not found",
+ "Bad commit: %s", oid_to_hex(old_rev_oid));