ui-commit: handle root commits
Both cgit_print_diff() and cgit_diff_tree() handles root commits nicely, but cgit_print_commit() forgot to check the case of 0 parents. This fixes it, and adds tests to avoid future regressions. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
		| @@ -19,4 +19,19 @@ run_test 'find diff summary' ' | ||||
| 	 grep -e "1 files changed, 1 insertions, 0 deletions" trash/tmp | ||||
| ' | ||||
|  | ||||
| run_test 'get root commit' ' | ||||
| 	 root=$(cd trash/repos/foo && git rev-list --reverse HEAD | head -1) && | ||||
| 	 cgit_url "foo/commit&id=$root" >trash/tmp && | ||||
| 	 grep "</html>" trash/tmp | ||||
| ' | ||||
|  | ||||
| run_test 'root commit contains diffstat' ' | ||||
| 	 grep "<a href=./foo/diff/file-1.>file-1</a>" trash/tmp | ||||
| ' | ||||
|  | ||||
| run_test 'root commit contains diff' ' | ||||
| 	 grep ">diff --git a/file-1 b/file-1<" trash/tmp && | ||||
| 	 grep -e "<div class=.add.>+1</div>" trash/tmp | ||||
| ' | ||||
|  | ||||
| tests_done | ||||
|   | ||||
							
								
								
									
										10
									
								
								ui-commit.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ui-commit.c
									
									
									
									
									
								
							| @@ -18,6 +18,7 @@ void cgit_print_commit(char *hex) | ||||
| 	struct commit_list *p; | ||||
| 	unsigned char sha1[20]; | ||||
| 	char *tmp; | ||||
| 	int parents = 0; | ||||
|  | ||||
| 	if (!hex) | ||||
| 		hex = ctx.qry.head; | ||||
| @@ -75,6 +76,7 @@ void cgit_print_commit(char *hex) | ||||
| 		cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex, | ||||
| 			       sha1_to_hex(p->item->object.sha1), NULL); | ||||
| 		html(")</td></tr>"); | ||||
| 		parents++; | ||||
| 	} | ||||
| 	if (ctx.repo->snapshots) { | ||||
| 		html("<tr><th>download</th><td colspan='2' class='sha1'>"); | ||||
| @@ -89,9 +91,11 @@ void cgit_print_commit(char *hex) | ||||
| 	html("<div class='commit-msg'>"); | ||||
| 	html_txt(info->msg); | ||||
| 	html("</div>"); | ||||
| 	if (!(commit->parents && commit->parents->next && | ||||
| 	      commit->parents->next->next)) { | ||||
| 		tmp = sha1_to_hex(commit->parents->item->object.sha1); | ||||
| 	if (parents < 3) { | ||||
| 		if (parents) | ||||
| 			tmp = sha1_to_hex(commit->parents->item->object.sha1); | ||||
| 		else | ||||
| 			tmp = NULL; | ||||
| 		cgit_print_diff(ctx.qry.sha1, tmp, NULL); | ||||
| 	} | ||||
| 	cgit_free_commitinfo(info); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lars Hjemli
					Lars Hjemli