blob: 3d38e55e4172fa7dbbaf0ff0ddf8ba7cea633b23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh

# The patch page serves a commit as a mail ready patch, so that a change read
# from cgit can be fed straight to git am. The checks compare that output
# against git format-patch for a single commit and for a range of them, once
# the CGI headers have been stripped, which means the two have to agree line
# for line. The last one sets max-patch-count so a range wider than the limit
# comes back cut short.

test_description='Check content on patch page'
. ./setup.sh

test_expect_success 'generate foo/patch' '
	cgit_query "url=foo/patch" >tmp
'

test_expect_success 'find `From:` line' '
	grep "^From: " tmp
'

test_expect_success 'find `Date:` line' '
	grep "^Date: " tmp
'

test_expect_success 'find `Subject:` line' '
	grep "^Subject: commit 5" tmp
'

test_expect_success 'find `cgit` signature' '
	tail -2 tmp | head -1 | grep "^cgit"
'

test_expect_success 'compare with output of git-format-patch(1)' '
	CGIT_VERSION=$(sed -n "s/CGIT_VERSION = //p" ../../build/VERSION) &&
	git --git-dir="$PWD/repos/foo/.git" format-patch --subject-prefix="" --signature="cgit $CGIT_VERSION" --stdout HEAD^ >tmp2 &&
	strip_headers <tmp >tmp_ &&
	test_cmp tmp_ tmp2
'

test_expect_success 'find initial commit' '
	root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD)
'

test_expect_success 'generate patch for initial commit' '
	cgit_query "url=foo/patch&id=$root" >tmp
'

test_expect_success 'find `cgit` signature' '
	tail -2 tmp | head -1 | grep "^cgit"
'

test_expect_success 'generate patches for multiple commits' '
	id=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) &&
	id2=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD~3) &&
	cgit_query "url=foo/patch&id=$id&id2=$id2" >tmp
'

test_expect_success 'find `cgit` signature' '
	tail -2 tmp | head -1 | grep "^cgit"
'

test_expect_success 'compare with output of git-format-patch(1)' '
	CGIT_VERSION=$(sed -n "s/CGIT_VERSION = //p" ../../build/VERSION) &&
	git --git-dir="$PWD/repos/foo/.git" format-patch -N --subject-prefix="" --signature="cgit $CGIT_VERSION" --stdout HEAD~3..HEAD >tmp2 &&
	strip_headers <tmp >tmp_ &&
	test_cmp tmp_ tmp2
'

test_expect_success 'max-patch-count bounds a patch range' '
	{
		echo "cache-size=0" &&
		echo "max-patch-count=2" &&
		echo "repo.url=foo" &&
		echo "repo.path=$PWD/repos/foo/.git"
	} >patchcountrc &&
	id=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) &&
	root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD) &&
	CGIT_CONFIG="$PWD/patchcountrc" QUERY_STRING="url=foo/patch&id=$id&id2=$root" cgit >tmp &&
	test $(grep -c "^From " tmp) -eq 2
'

test_done