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
|
test_description='Check the ref listing and diff size limits'
. ./setup.sh
test_expect_success 'set up limit fixtures' '
mkrepo repos/limits 1 &&
(
cd repos/limits &&
seq 1 60 >big.c &&
printf "int x;\n" >small.c &&
git add -A &&
git commit -m sources &&
seq 301 360 >big.c &&
printf "int y;\n" >small.c &&
git commit -am change &&
for i in 1 2 3; do git branch branch-$i || exit 1; done &&
for i in 1 2 3; do git tag tag-$i || exit 1; done
) &&
{
echo "virtual-root=/" &&
echo "cache-size=0" &&
echo "max-ref-count=2" &&
echo "max-diff-lines=20" &&
echo "max-diff-files=0" &&
echo "repo.url=limits" &&
echo "repo.path=$PWD/repos/limits/.git"
} >limitrc &&
{
echo "virtual-root=/" &&
echo "cache-size=0" &&
echo "max-diff-files=1" &&
echo "repo.url=limits" &&
echo "repo.path=$PWD/repos/limits/.git"
} >limitfilesrc
'
limitq() { CGIT_CONFIG="$PWD/limitrc" QUERY_STRING="$1" cgit; }
test_expect_success 'refs page lists max-ref-count branches and tags' '
limitq "url=limits/refs/" >tmp &&
test $(grep -c "log/?h=" tmp) -eq 2 &&
test $(grep -c "/tag/?h=tag-" tmp) -eq 2
'
test_expect_success 'refs page links each overflow to its own category' '
grep "refs/heads" tmp &&
grep "refs/tags" tmp
'
test_expect_success 'branch page paginates independently' '
limitq "url=limits/refs/heads/" >tmp &&
test $(grep -c "log/?h=" tmp) -eq 2 &&
grep "\[next\]" tmp &&
limitq "url=limits/refs/heads/&ofs=2" >tmp &&
grep "\[prev\]" tmp &&
! grep "/tag/?h=tag-" tmp
'
test_expect_success 'tag page paginates independently' '
limitq "url=limits/refs/tags/&ofs=2" >tmp &&
grep "/tag/?h=tag-" tmp &&
grep "\[prev\]" tmp &&
! grep "log/?h=" tmp
'
test_expect_success 'oversized file diff is replaced by a link' '
limitq "url=limits/commit/" >tmp &&
grep "too large to be rendered inline" tmp &&
grep "View it on its own page" tmp
'
test_expect_success 'small file in the same commit still renders inline' '
grep "class=.add.>+int y;" tmp
'
test_expect_success 'the single-file diff page always renders in full' '
limitq "url=limits/diff/big.c" >tmp &&
grep "class=.hunk." tmp &&
! grep "too large to be rendered inline" tmp
'
test_expect_success 'a commit changing too many files shows stat only' '
CGIT_CONFIG="$PWD/limitfilesrc" QUERY_STRING="url=limits/commit/" cgit >tmp &&
grep "too large to be rendered inline" tmp &&
! grep "class=.hunk." tmp
'
test_expect_success 'the single-file page is not limited by max-diff-files' '
CGIT_CONFIG="$PWD/limitfilesrc" QUERY_STRING="url=limits/diff/small.c" cgit >tmp &&
grep "class=.hunk." tmp
'
test_done
|