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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
test_description='Check the atom feed'
. ./setup.sh
test_expect_success 'generate foo/atom' '
cgit_url "foo/atom" >tmp
'
test_expect_success 'the response is an atom feed' '
head -n 1 tmp | grep "Status: 200 OK" &&
sed "/^$/q" tmp | grep "Content-Type: application/atom+xml" &&
strip_headers <tmp >feed &&
grep "<feed xmlns=.http://www.w3.org/2005/Atom.>" feed &&
grep "<title>foo, branch master</title>" feed
'
test_expect_success 'every commit of a small repository is an entry' '
test $(grep -c "<entry>" feed) -eq 5 &&
grep "<title>commit 1</title>" feed &&
grep "<title>commit 5</title>" feed
'
test_expect_success 'ten entries is the default ceiling' '
cgit_url "bar/atom" >tmp &&
strip_headers <tmp >feed &&
test $(grep -c "<entry>" feed) -eq 10 &&
grep "<title>commit 50</title>" feed &&
! grep "<title>commit 40</title>" feed
'
test_expect_success 'max-atom-items overrides the ceiling' '
cgitrc_repo atomrc bar max-atom-items=3 &&
cgit_rc atomrc "url=bar/atom" >tmp &&
strip_headers <tmp >feed &&
test $(grep -c "<entry>" feed) -eq 3
'
test_lazy_prereq XMLLINT 'command -v xmllint'
test_expect_success XMLLINT 'the feed is well-formed xml' '
cgit_url "foo/atom" >tmp &&
strip_headers <tmp >feed &&
xmllint --noout feed
'
test_expect_success 'a path with pathspec magic is refused' '
cgit_url "foo/atom/%3A%28icase%29FILE-1" >tmp &&
grep "^Status: 400" tmp &&
cgit_url "foo/atom/file-1" >tmp &&
grep "^Status: 200" tmp
'
test_expect_success 'enable-plain-email=0 leaves the address out of the feed' '
cgitrc_copy plainrc enable-plain-email=0 &&
cgit_ok plainrc "url=foo/atom" >tmp &&
grep "<name>A U Thor</name>" tmp &&
! grep "<email>" tmp &&
! grep "author@example.com" tmp
'
test_expect_success 'the feed link encodes the repository and the branch' '
cgitrc_copy feedrc &&
CGIT_CONFIG="$PWD/feedrc" HTTP_HOST=example.org QUERY_STRING="url=foo%2Bbar/log/&h=1%2B2" cgit >tmp &&
grep "title=.Atom feed. href=.http://example.org/foo%2Bbar/atom/?h=1%2B2." tmp
'
test_expect_success 'an empty repository answers with a feed of no entries' '
git init -q --bare repos/empty.git &&
cgitrc_repo emptyrc empty "repo.path=$PWD/repos/empty.git" &&
cgit_rc emptyrc "url=empty/atom" >tmp &&
head -n 1 tmp | grep "Status: 200 OK" &&
sed "/^$/q" tmp | grep "Content-Type: application/atom+xml" &&
strip_headers <tmp >feed &&
grep "<title>empty</title>" feed &&
grep "<updated>" feed &&
! grep "<entry>" feed &&
grep "</feed>" feed
'
test_expect_success XMLLINT 'the empty feed is well-formed xml' '
xmllint --noout feed
'
test_expect_success 'set up a commit holding what XML cannot carry' '
test_create_repo repos/odd &&
(
cd repos/odd &&
tree=$(git mktree </dev/null) &&
printf "tree %s\n" "$tree" >commit &&
printf "author Odd & Name \003 \375 \357\277\276 X <odd@example.com> 1112354055 +0200\n" >>commit &&
printf "committer C O Mitter <committer@example.com> 1112354055 +0200\n\n" >>commit &&
printf "a < b & c \001 \377 \357\277\276 \303\251\n\nbody > x & \002 \376 \357\277\277\n" >>commit &&
oid=$(git hash-object -t commit -w commit) &&
git update-ref HEAD "$oid" &&
git cat-file commit HEAD >actual &&
test_cmp commit actual
) &&
cgitrc_repo oddrc odd "repo.desc=$(printf "d < e & \004 \374 \357\277\277 \303\251")"
'
test_expect_success 'the feed escapes markup and replaces what XML forbids' '
cgit_ok oddrc "url=odd/atom" >tmp &&
strip_headers <tmp >oddfeed &&
printf "<subtitle>d < e & ? ? ? \303\251</subtitle>\n" >expect &&
grep "^<subtitle>" oddfeed >actual &&
test_cmp expect actual &&
printf "<title>a < b & c ? ? ? \303\251</title>\n" >expect &&
grep "^<title>a " oddfeed >actual &&
test_cmp expect actual &&
printf "<content type=\047text\047>body > x & ? ? ?\n" >expect &&
grep "^<content " oddfeed >actual &&
test_cmp expect actual &&
printf "<name>Odd & Name ? ? ? X</name>\n" >expect &&
grep "^<name>" oddfeed >actual &&
test_cmp expect actual
'
test_expect_success XMLLINT 'that feed is well-formed xml' '
xmllint --noout oddfeed
'
test_done
|