Fix segfault in patch view for root commit

The code for patch view assumed the current commit would always have a parent,
which made cgit segfault when that wasn't the case.

This fixes the bug and adds a test-script for patch view which includes a test
for the inital commit.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Lars Hjemli 2008-03-17 23:13:16 +01:00
parent 0537a7d1cf
commit e01f1403b9
2 changed files with 42 additions and 1 deletions

37
tests/t0108-patch.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/sh
. ./setup.sh
prepare_tests "Check content on patch page"
run_test 'generate foo/patch' '
cgit_query "url=foo/patch" >trash/tmp
'
run_test 'find `From:` line' '
grep -e "^From: " trash/tmp
'
run_test 'find `Date:` line' '
grep -e "^Date: " trash/tmp
'
run_test 'find `Subject:` line' '
grep -e "^Subject: commit 5" trash/tmp
'
run_test 'find `cgit` signature' '
tail -1 trash/tmp | grep -e "^cgit"
'
run_test 'find initial commit' '
root=$(git --git-dir=$PWD/trash/repos/foo/.git rev-list HEAD | tail -1)
'
run_test 'generate patch for initial commit' '
cgit_query "url=foo/patch&id=$root" >trash/tmp
'
run_test 'find `cgit` signature' '
tail -1 trash/tmp | grep -e "^cgit"
'

View File

@ -88,7 +88,11 @@ void cgit_print_patch(char *hex, struct cacheitem *item)
return;
}
info = cgit_parse_commit(commit);
hashcpy(old_sha1, commit->parents->item->object.sha1);
if (commit->parents && commit->parents->item)
hashcpy(old_sha1, commit->parents->item->object.sha1);
else
hashclr(old_sha1);
patchname = fmt("%s.patch", sha1_to_hex(sha1));
cgit_print_snapshot_start("text/plain", patchname, item);