From 64318798fc0562424a3bad78acabc35a20d587e1 Mon Sep 17 00:00:00 2001
From: Nick Guenther <nick.guenther@polymtl.ca>
Date: Mon, 27 Feb 2023 18:42:45 -0500
Subject: [PATCH 1/3] Test README rendering

---
 models/db/iterate_test.go                     |   2 +-
 models/db/list_test.go                        |   4 +-
 models/fixtures/repo_unit.yml                 |   6 +
 models/fixtures/repository.yml                |  13 +++
 models/fixtures/user.yml                      |   2 +-
 .../user2/readme-test.git/HEAD                |   1 +
 .../user2/readme-test.git/config              |   4 +
 .../user2/readme-test.git/info/exclude        |   6 +
 .../user2/readme-test.git/info/refs           |  21 ++++
 .../12/11481f7314efbfe4e44703170d96c8fac8172b | Bin 0 -> 169 bytes
 .../17/2343566bf11fc71ba4acf8d2ea70d12bc1d037 | Bin 0 -> 214 bytes
 .../1a/48cae3f18ccd9c929e6608f67087dbaac3cf9e | Bin 0 -> 167 bytes
 .../1e/1e08102cf1b1fc01c069c88ee75445974363ab | Bin 0 -> 83 bytes
 .../21/470f9b3e8ff24e0fa083d2dbc447f4c3401355 |   2 +
 .../23/65bfe0c5714e2e3f2d53bb302b10d8d5b4fc7d | Bin 0 -> 175 bytes
 .../38/9d08c6a71d024a91f14089007cd789cd977ca6 | Bin 0 -> 48 bytes
 .../3a/a8f4e0e1a535f0f9e0ae40e6ec1bce42642bc4 | Bin 0 -> 140 bytes
 .../3b/23d7f1a9cb904cb46f5f2272bfa5ed5f871fb9 |   1 +
 .../50/6ff7310f420e878595b4bc8f11688e3f0ae14e | Bin 0 -> 166 bytes
 .../58/3eb775c596858380273492759d39081d65d029 | Bin 0 -> 169 bytes
 .../60/ea618ae7d4ecbe9c1962591c7da1b05bb1a5c8 |   3 +
 .../6a/b05db4c52530726c1856eb558228e9d1949e7f | Bin 0 -> 169 bytes
 .../71/60a063b5544b5a78131b94f47bfd200046eda2 | Bin 0 -> 167 bytes
 .../75/6c70c97047d8aeb11ca3c71edd9fb76cefee9c | Bin 0 -> 28 bytes
 .../7f/2b9f991d99362eb827b67f4ae2f5fbc5fa2271 | Bin 0 -> 211 bytes
 .../7f/792e709143fb0f021da2371e5f40d1bcc284fd | Bin 0 -> 166 bytes
 .../82/817856dadc7f6b944633e1b77d5b6e302dde06 | Bin 0 -> 51 bytes
 .../8b/4149e7dede3cd53ba11c64c88b057c5fe2c200 | Bin 0 -> 169 bytes
 .../93/54813d81053c14afe878a9f056b937ec42bb48 | Bin 0 -> 28 bytes
 .../9c/72c10e55e7d6ea21f591aa424e2625e8ad8094 | Bin 0 -> 136 bytes
 .../a3/cd04bb110e17591ac04e156c7df2c2f5c96fa6 | Bin 0 -> 82 bytes
 .../b0/e851a5619e2d6cee1da25a15ab67305f0861ec | Bin 0 -> 76 bytes
 .../b4/4c8eb00bdaf0522de61e591fee5f66851ef4b5 | Bin 0 -> 112 bytes
 .../b8/eaa80ad86072e1f23d2638842154ce9aceff8d | Bin 0 -> 77 bytes
 .../d5/34f914944c3c943a6bdb677d869ac54934928d | Bin 0 -> 31 bytes
 .../e2/f9904cd97b4045feecfffef5a426e9461bee70 | Bin 0 -> 117 bytes
 .../e3/a6fd8fe49e323ee10017f72b777a53fbd8076f |   3 +
 .../e7/bf02fcfa7a86f7fe9e8158b55d58ddf9d877ec | Bin 0 -> 171 bytes
 .../ea/57c91ddb8b4ac705b5ac4c34c7a48f2d0fc180 | Bin 0 -> 77 bytes
 .../fe/495ea336f079ef2bed68648d0ba9a37cdbd4aa | Bin 0 -> 197 bytes
 .../readme-test.git/objects/info/commit-graph | Bin 0 -> 2612 bytes
 .../user2/readme-test.git/objects/info/packs  |   2 +
 ...d634b76f8154310cccb52537a0195e43166.bitmap | Bin 0 -> 1642 bytes
 ...33bd634b76f8154310cccb52537a0195e43166.idx | Bin 0 -> 4012 bytes
 ...3bd634b76f8154310cccb52537a0195e43166.pack | Bin 0 -> 7854 bytes
 .../user2/readme-test.git/packed-refs         |  22 ++++
 .../refs/heads/fallbacks-broken-symlinks      |   1 +
 tests/integration/repo_test.go                | 103 ++++++++++++++++++
 48 files changed, 192 insertions(+), 4 deletions(-)
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/HEAD
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/config
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/info/exclude
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/info/refs
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/12/11481f7314efbfe4e44703170d96c8fac8172b
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/17/2343566bf11fc71ba4acf8d2ea70d12bc1d037
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/1a/48cae3f18ccd9c929e6608f67087dbaac3cf9e
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/1e/1e08102cf1b1fc01c069c88ee75445974363ab
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/21/470f9b3e8ff24e0fa083d2dbc447f4c3401355
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/23/65bfe0c5714e2e3f2d53bb302b10d8d5b4fc7d
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/38/9d08c6a71d024a91f14089007cd789cd977ca6
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/3a/a8f4e0e1a535f0f9e0ae40e6ec1bce42642bc4
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/3b/23d7f1a9cb904cb46f5f2272bfa5ed5f871fb9
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/50/6ff7310f420e878595b4bc8f11688e3f0ae14e
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/58/3eb775c596858380273492759d39081d65d029
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/60/ea618ae7d4ecbe9c1962591c7da1b05bb1a5c8
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/6a/b05db4c52530726c1856eb558228e9d1949e7f
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/71/60a063b5544b5a78131b94f47bfd200046eda2
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/75/6c70c97047d8aeb11ca3c71edd9fb76cefee9c
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/7f/2b9f991d99362eb827b67f4ae2f5fbc5fa2271
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/7f/792e709143fb0f021da2371e5f40d1bcc284fd
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/82/817856dadc7f6b944633e1b77d5b6e302dde06
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/8b/4149e7dede3cd53ba11c64c88b057c5fe2c200
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/93/54813d81053c14afe878a9f056b937ec42bb48
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/9c/72c10e55e7d6ea21f591aa424e2625e8ad8094
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/a3/cd04bb110e17591ac04e156c7df2c2f5c96fa6
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/b0/e851a5619e2d6cee1da25a15ab67305f0861ec
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/b4/4c8eb00bdaf0522de61e591fee5f66851ef4b5
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/b8/eaa80ad86072e1f23d2638842154ce9aceff8d
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/d5/34f914944c3c943a6bdb677d869ac54934928d
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/e2/f9904cd97b4045feecfffef5a426e9461bee70
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/e3/a6fd8fe49e323ee10017f72b777a53fbd8076f
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/e7/bf02fcfa7a86f7fe9e8158b55d58ddf9d877ec
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/ea/57c91ddb8b4ac705b5ac4c34c7a48f2d0fc180
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/fe/495ea336f079ef2bed68648d0ba9a37cdbd4aa
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/info/commit-graph
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/info/packs
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.bitmap
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.idx
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.pack
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/packed-refs
 create mode 100644 tests/gitea-repositories-meta/user2/readme-test.git/refs/heads/fallbacks-broken-symlinks

diff --git a/models/db/iterate_test.go b/models/db/iterate_test.go
index a713fe0d8b85c..6bcf740c238b0 100644
--- a/models/db/iterate_test.go
+++ b/models/db/iterate_test.go
@@ -25,7 +25,7 @@ func TestIterate(t *testing.T) {
 		return nil
 	})
 	assert.NoError(t, err)
-	assert.EqualValues(t, 83, repoCnt)
+	assert.EqualValues(t, 84, repoCnt)
 
 	err = db.Iterate(db.DefaultContext, nil, func(ctx context.Context, repoUnit *repo_model.RepoUnit) error {
 		reopUnit2 := repo_model.RepoUnit{ID: repoUnit.ID}
diff --git a/models/db/list_test.go b/models/db/list_test.go
index ffef1e4948eea..1295692cec856 100644
--- a/models/db/list_test.go
+++ b/models/db/list_test.go
@@ -35,11 +35,11 @@ func TestFind(t *testing.T) {
 	var repoUnits []repo_model.RepoUnit
 	err := db.Find(db.DefaultContext, &opts, &repoUnits)
 	assert.NoError(t, err)
-	assert.EqualValues(t, 83, len(repoUnits))
+	assert.EqualValues(t, 84, len(repoUnits))
 
 	cnt, err := db.Count(db.DefaultContext, &opts, new(repo_model.RepoUnit))
 	assert.NoError(t, err)
-	assert.EqualValues(t, 83, cnt)
+	assert.EqualValues(t, 84, cnt)
 
 	repoUnits = make([]repo_model.RepoUnit, 0, 10)
 	newCnt, err := db.FindAndCount(db.DefaultContext, &opts, &repoUnits)
diff --git a/models/fixtures/repo_unit.yml b/models/fixtures/repo_unit.yml
index 503b8c9ddfa46..ef0b7c1a941e2 100644
--- a/models/fixtures/repo_unit.yml
+++ b/models/fixtures/repo_unit.yml
@@ -569,3 +569,9 @@
   type: 3
   config: "{\"IgnoreWhitespaceConflicts\":false,\"AllowMerge\":true,\"AllowRebase\":true,\"AllowRebaseMerge\":true,\"AllowSquash\":true}"
   created_unix: 946684810
+
+-
+  id: 84
+  repo_id: 56
+  type: 1
+  created_unix: 946684810
diff --git a/models/fixtures/repository.yml b/models/fixtures/repository.yml
index 58f9b919acfbc..84e61f4dfd9ec 100644
--- a/models/fixtures/repository.yml
+++ b/models/fixtures/repository.yml
@@ -1634,3 +1634,16 @@
   is_private: true
   num_issues: 1
   status: 0
+
+-
+  id: 56
+  owner_id: 2
+  owner_name: user2
+  lower_name: readme-test
+  name: readme-test
+  default_branch: master
+  is_empty: false
+  is_archived: false
+  is_private: true
+  status: 0
+  num_issues: 0
diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml
index b1c7fc0030675..66bc6b1c2fc84 100644
--- a/models/fixtures/user.yml
+++ b/models/fixtures/user.yml
@@ -66,7 +66,7 @@
   num_followers: 2
   num_following: 1
   num_stars: 2
-  num_repos: 11
+  num_repos: 12
   num_teams: 0
   num_members: 0
   visibility: 0
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/HEAD b/tests/gitea-repositories-meta/user2/readme-test.git/HEAD
new file mode 100644
index 0000000000000..cb089cd89a7d7
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/config b/tests/gitea-repositories-meta/user2/readme-test.git/config
new file mode 100644
index 0000000000000..07d359d07cf1e
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/config
@@ -0,0 +1,4 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = true
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/info/exclude b/tests/gitea-repositories-meta/user2/readme-test.git/info/exclude
new file mode 100644
index 0000000000000..a5196d1be8fb5
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/info/refs b/tests/gitea-repositories-meta/user2/readme-test.git/info/refs
new file mode 100644
index 0000000000000..fd5f1b98ebd57
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/info/refs
@@ -0,0 +1,21 @@
+ea9ef877d1d88af76682d8798418081264f10cfc	refs/heads/fallbacks
+0d4c14db927c9ffba01fa7e126cc748b5c02c01e	refs/heads/fallbacks2
+c66d5b07c2063d3268707f22226c708b589574ef	refs/heads/fallbacks3
+89f8426e9eb5eff35c09b3565836c8f8e15d0ce9	refs/heads/fallbacks4
+b0e902496eae435ad03c92a5d479f916ef2d4893	refs/heads/fallbacks5
+84a5500b5cc040b11daf53fc42c542a99589dc76	refs/heads/fallbacks6
+cf406a96e416d7de5c4c1bbfffdd672300c822bf	refs/heads/fallbacks7
+0d6ac644b969e9199915a492da9dba08c179fd23	refs/heads/fallbacks8
+5038febc0c57215beb3748d7ae4091a25a4acc93	refs/heads/fallbacks9
+9134e1f178ca4cccf1a197142646f2d7627e8cd5	refs/heads/i18n
+744d2441e55bc0010d6b340d303f0106a627ad29	refs/heads/master
+3c492566170b057e962c025515ab38bbd7444077	refs/heads/plain
+3882d6373a0882a6739b3cd9b24d21c630621234	refs/heads/sp-ace
+bf5ed898252eaa50dcc01108ed4417c3ea98a294	refs/heads/special-subdir-.gitea
+c03543573ab088ce1cf7090a387d2be621426234	refs/heads/special-subdir-.github
+e75957ad9b7e6ed16dda183529ec283db0bbc5fe	refs/heads/special-subdir-docs
+46f5d5ab33d701642e08c713fab42af89fdd4fea	refs/heads/special-subdir-nested
+9c0f872256b839c2b97ec22fd348d87b14045513	refs/heads/subdir
+d7a854fff61e45b98234d7aa79ecbcb1619cd3dd	refs/heads/symlink
+30b9c0ed4b1039dbd99f3fb537b84ca507e0549d	refs/heads/symlink-loop
+41489b7be5c2244d2b7b524dcb31caf3bd1f9ccc	refs/heads/txt
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/12/11481f7314efbfe4e44703170d96c8fac8172b b/tests/gitea-repositories-meta/user2/readme-test.git/objects/12/11481f7314efbfe4e44703170d96c8fac8172b
new file mode 100644
index 0000000000000000000000000000000000000000..b9009e32444a4be9dd189dc611880aef4f0d8b02
GIT binary patch
literal 169
zcmV;a09OBa0iDh{4#F@Hg<)!+VlF^5cDzMGh>nhm3wW6!5zeCE6x^N&aRSP}_?}*x
z$8o5jv^vz42%^@>Q$&n8FdC&YSxKgoOk~(vZzQpfMl4~ase)tIDRS6J-Eu@mC38@%
z+YM{XGNz=w<}AWi`+0@ike+becG}Ylr)kgT@yp9Hm-kpplfoIKb<P;sY7a*=h$4NT
X)?NL-A@205z@d~F(o=i@i<M4nfA~|$

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/17/2343566bf11fc71ba4acf8d2ea70d12bc1d037 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/17/2343566bf11fc71ba4acf8d2ea70d12bc1d037
new file mode 100644
index 0000000000000000000000000000000000000000..c7a4deca9293a563181b8dadbe42a5f669681739
GIT binary patch
literal 214
zcmV;{04e`?0hNxiZp0uEL{s}Kwo8>07%!ZqC`y+u{{YMSK(^sz);i_ygQEL^6jO{e
zZ)T|OdloQidXa+}u3^&C%r0_dLlI5zT9cjVdJPI4;ld-0N)2~^a1pQ=J^Bfq!Z3~o
z?QE2G+S%wGd&01gUFN6;e@dzcd}mtW>+ERa1Kvxwm)p~R-s|?W%XT6E0opo;IHEQ1
zrmzpv-&5(-e><$1pB+PcWT6C7fy-^nEkR)NXJg0^Yk3t|OMO7<>Y3fI4E-nwH)(L3
Q1#$sOxp3p*7x&_1XWgo56#xJL

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/1a/48cae3f18ccd9c929e6608f67087dbaac3cf9e b/tests/gitea-repositories-meta/user2/readme-test.git/objects/1a/48cae3f18ccd9c929e6608f67087dbaac3cf9e
new file mode 100644
index 0000000000000000000000000000000000000000..d8522ae6d3319a48188c99be269b1622f89e7030
GIT binary patch
literal 167
zcmV;Y09gNc0iBLJ4#GeT1*!KGz5vMHFGvW{(NS>$uj3^V`6(;~w<kiJfO4caqbJia
zbQP?3o4TliW8N39sKmjAg5{vd>QSQ#Wl?XVw^_WIdC{=~CF{HkG3G*4BvEG1Qud8i
zPT0`8r3PIx{HpD=z_pVHTwbf%>H^1c#ohgf=XvViL+y9MC!m;82sTlGEe1p*-=}r8
V{%@F@J}VUN`^@rqnhyv1PZ>ILQ$7Fy

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/1e/1e08102cf1b1fc01c069c88ee75445974363ab b/tests/gitea-repositories-meta/user2/readme-test.git/objects/1e/1e08102cf1b1fc01c069c88ee75445974363ab
new file mode 100644
index 0000000000000000000000000000000000000000..d4152e535edee4dede53f2b78c5890f6010635bb
GIT binary patch
literal 83
zcmV-Z0IdIb0V^p=O;s>AWH2-^Ff%bx2y%6F@pWa`@t!|<rStv(_qzdwi6*BHu4Y%~
pFf=j%0;meT+!Th=oPv`D?l;zLlv#XS?(Y2UIq%=i0RRG$9p!&{B{Bd2

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/21/470f9b3e8ff24e0fa083d2dbc447f4c3401355 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/21/470f9b3e8ff24e0fa083d2dbc447f4c3401355
new file mode 100644
index 0000000000000..8aabb78c6838b
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/objects/21/470f9b3e8ff24e0fa083d2dbc447f4c3401355
@@ -0,0 +1,2 @@
+x��;�0@�s
+_�*N��H��1q�u(�?�t��T�0��==���Q��+�*4��d��h�S�η.z���͙Z3�ct��0'�As�5h�zL�=D��B�\cx-ݴ��!O������q�����<�����	0�T�装���5�=-�����U s�7,O�#�M�
\ No newline at end of file
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/23/65bfe0c5714e2e3f2d53bb302b10d8d5b4fc7d b/tests/gitea-repositories-meta/user2/readme-test.git/objects/23/65bfe0c5714e2e3f2d53bb302b10d8d5b4fc7d
new file mode 100644
index 0000000000000000000000000000000000000000..715977676d5041e2a56504189cb38b4d3b524cfb
GIT binary patch
literal 175
zcmV;g08syU0iBLJ4#F@HM5%p>y#UeLtnFArh>nhm3v8S<iO5fhDRO%(#0lu;Y4k=D
z=W*;a7>kFzih!6D0#a;)ZwSdIk(g4FWSNYUKu$Lz9@WCDOc?~pa~)axw&jwzZiIq1
zuJ+oU1dS;ror2<b?&cNleSE>~UDQriI8Ozu=MS&TJnUm0s>m16&U;JVSO-V6h$?=c
d=3@Q7p&qhjh#mKnw6N{t&`+;TeE>rzQOAB&RpI~u

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/38/9d08c6a71d024a91f14089007cd789cd977ca6 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/38/9d08c6a71d024a91f14089007cd789cd977ca6
new file mode 100644
index 0000000000000000000000000000000000000000..c5929ae89288aa30a1a891326bc8bb9f340640f8
GIT binary patch
literal 48
zcmV-00MGw;0V^p=O;s>9W-u`T0tLPF%#zeZ2HRsE+r`do2(@WGwr9=%yg1I;B`E+G
GZx5ikFcZ80

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/3a/a8f4e0e1a535f0f9e0ae40e6ec1bce42642bc4 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/3a/a8f4e0e1a535f0f9e0ae40e6ec1bce42642bc4
new file mode 100644
index 0000000000000000000000000000000000000000..106393d722517fe5c97ef75e78200b79654ea7ab
GIT binary patch
literal 140
zcmV;70CWF%0V^p=O;s>7Hf1m|00ITQ^vsgfL<ZYq9^1vvYzVb!KDKAg|GYTP*(E84
z1_ov(CJI5WjxN5g441E2x84pr@IRN~v|{A0KVp7v4r(YW^m0=e&Rwp&wwytJxyMf)
u-uwA856+yPrwXwrB|o{CVL=ApB%AZ+6fKVJFG^nY{Okp@nMwfU={Lu<i9rDX

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/3b/23d7f1a9cb904cb46f5f2272bfa5ed5f871fb9 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/3b/23d7f1a9cb904cb46f5f2272bfa5ed5f871fb9
new file mode 100644
index 0000000000000..c36705ba28dda
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/objects/3b/23d7f1a9cb904cb46f5f2272bfa5ed5f871fb9
@@ -0,0 +1 @@
+x��M� �aל��0&Ƹs��ئ�'�.���x������4]���.)�D��Q�|@b6Xbd��}�2+b�%�T� �I>g�	2�7Q���. (c�����"o��n�M�<�[6�_^橼�Z��T�U�� ���n��
qO�*3��{���N\
\ No newline at end of file
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/50/6ff7310f420e878595b4bc8f11688e3f0ae14e b/tests/gitea-repositories-meta/user2/readme-test.git/objects/50/6ff7310f420e878595b4bc8f11688e3f0ae14e
new file mode 100644
index 0000000000000000000000000000000000000000..a7f4501ea2e8b7d2c984dcf2f926497f5b9597b3
GIT binary patch
literal 166
zcmV;X09pTd0iBLH4#F@H0IB_o{Q%M0@p{)1LUeRge84!%A#y1=1;58aynu3w8BLys
z;ZeYOw<(J%By>uA70(!0I5Gw7qT1ldv)C*w>PWMh)1qSml2$Lwlqm+OAn3UD(J{rY
zjVQJY)S-(et>r!~aC+n?9M`Jeb%EVjvAO;5Fi-t^D1DRD9&D&pvcw*?NQfqXPfNA_
UZ<w>b3S3j)Us8UW4?((1W7)${?*IS*

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/58/3eb775c596858380273492759d39081d65d029 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/58/3eb775c596858380273492759d39081d65d029
new file mode 100644
index 0000000000000000000000000000000000000000..a2dadacf8ac5c581336a8fec56846cc07f12f8ac
GIT binary patch
literal 169
zcmV;a09OBa0iBL9Zo@DP06Xgy{6Gv+kwgh7if-95^#c^eG(qe*aOEMtk5S|W8E?45
z={!xB4nFvgzL>#2mxfuBFg5f+3Y{omE{Lp+bJ13qRg$~QVz&+nO%i1>Zo#x#Q7XyD
zLds33Vyu-UYId^r^Sr?EqE|Sqn|ihdK5rWizc2j0&*Nk2<Dl{dl$c|r;1ldHB0Bv)
X?VI&}!~NJ_hm(wB6}`GA1W--qeJ4@w

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/60/ea618ae7d4ecbe9c1962591c7da1b05bb1a5c8 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/60/ea618ae7d4ecbe9c1962591c7da1b05bb1a5c8
new file mode 100644
index 0000000000000..4367c41e2858e
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/objects/60/ea618ae7d4ecbe9c1962591c7da1b05bb1a5c8
@@ -0,0 +1,3 @@
+x��;�0@�s
+_�*N뤕bcc���Њ�Tҁ�S!N�����d�>���!���քLu�Ul�#q����l�Q�,�ꔡ��lCBn$6��X�Dɹ�bbҖR0���y�[/O�n���
+�i�����2�1��Ї@�e�p�d���iޭ�殯��!�<���N�
\ No newline at end of file
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/6a/b05db4c52530726c1856eb558228e9d1949e7f b/tests/gitea-repositories-meta/user2/readme-test.git/objects/6a/b05db4c52530726c1856eb558228e9d1949e7f
new file mode 100644
index 0000000000000000000000000000000000000000..3e4c8247d906f07f3985a58a76b08000a1d661f2
GIT binary patch
literal 169
zcmV;a09OBa0V^p=O;s>7H)Sv}00ITQ^vsgfL<ZYq9^1vvYzVb!KDKAg|GYTP*(E84
z1_ov(CJI5WjxN5g441E2x84pr@IRN~v|{A0KVp7v4r(YW^iuQma#I*MKHl3FemK04
zf9a#bto-)V?OCrAQPlwzox5ClZ8?Mda*v-py!Z2G9-KKnPZi>xl>Fpkh6NdXlWfkP
XQ?xj?zbJXp^RpMsW-0*yojgaTO}bCn

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/71/60a063b5544b5a78131b94f47bfd200046eda2 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/71/60a063b5544b5a78131b94f47bfd200046eda2
new file mode 100644
index 0000000000000000000000000000000000000000..477d5b1f1f4312265b57e9f6403dc133ddd83c81
GIT binary patch
literal 167
zcmV;Y09gNc0iBLJ4#F@H1*v_Cy#UcVvDZdIh>nhm3)tov5Y9)zDY!im;slga%xKcs
z_m4`gX*YES$XOR9!)OuX!4Zru$`1C59MBmbSfh<eO<~4R$+G0^I?dU%4DY<%*=S<&
zS!?kgUFHC7pu$q`<4osAdeUiG)jMX|4=XmeA0DT%y!%?36b_`tIcv4B(3UN;O5fAE
VTK_lH1+PjuloCUFst-`>P8}43Q9A$t

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/75/6c70c97047d8aeb11ca3c71edd9fb76cefee9c b/tests/gitea-repositories-meta/user2/readme-test.git/objects/75/6c70c97047d8aeb11ca3c71edd9fb76cefee9c
new file mode 100644
index 0000000000000000000000000000000000000000..3ef17969867f6a1e4c2138ae8d469601e3c1fb5f
GIT binary patch
literal 28
kcmb<m^geacKghr&^}^-L=TDx$=zr?`X|_a$pc3|K0L<|X(f|Me

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/7f/2b9f991d99362eb827b67f4ae2f5fbc5fa2271 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/7f/2b9f991d99362eb827b67f4ae2f5fbc5fa2271
new file mode 100644
index 0000000000000000000000000000000000000000..4e39c0306eaa5ba7dbcc8926ab9cf76da6c05cea
GIT binary patch
literal 211
zcmV;^04)D_0iBL9YQ!)QMN|6}(`}VSmOYXUOGvj}?jViED`8t&tT9V&9}#kb6u<cJ
z-{(=;_arc=@l6h9FwQFsek9a5D60+i6B_o2lhzZ@p`XW@?b1En!CAmyaOg&~3cc0?
znt4#Y?X3yUvLo~hnPm>DbEm{|z*nLb?q@?IA8^a9ULSw;^I5j<UA8N^59p1x*d)vV
z?+TUb=+{&l_5Y8qzLHP`DZu%$r5eFAxwA4P2qj+x)?8i?TiRxKD?<|n;VKo5GegQi
NF=ejY{Qw1TV~XWYWat0@

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/7f/792e709143fb0f021da2371e5f40d1bcc284fd b/tests/gitea-repositories-meta/user2/readme-test.git/objects/7f/792e709143fb0f021da2371e5f40d1bcc284fd
new file mode 100644
index 0000000000000000000000000000000000000000..90fae23886ca83c4be056c5dd3c8125047bcf0b9
GIT binary patch
literal 166
zcmV;X09pTd0iBLH4#F@H0IB_o{Q%MWSer-)(a}-yf%Rrh5IImV1-~akynu3w8I8>2
zc&p%o+tfuBJoByuMYT+x3YJ!pHK0Znn?-|*!DR{N!HZ56B6Un0C?RF%JjK?dO*X}j
zld@1Q5=+~m;aBbF1<p6Q!|AoEy)LkyR&1_6JU-^(J=UQSK7frW5n1mDwn&IZzNdAy
U{%@FzJ}VR+hRkv|AA!wIRa@CkBme*a

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/82/817856dadc7f6b944633e1b77d5b6e302dde06 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/82/817856dadc7f6b944633e1b77d5b6e302dde06
new file mode 100644
index 0000000000000000000000000000000000000000..0428af472a486f6b2689fd113291540555a8374f
GIT binary patch
literal 51
zcmb<m)YkO!4K*-JG%ztRFg6U-@bdLJ>6`jPaYEJa*lGXHNtRod<n7tJvaYTyUY)`C
HlVA=2#pM&k

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/8b/4149e7dede3cd53ba11c64c88b057c5fe2c200 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/8b/4149e7dede3cd53ba11c64c88b057c5fe2c200
new file mode 100644
index 0000000000000000000000000000000000000000..64542d37589eb57bf563c0cbe7d8c305c26c8ecb
GIT binary patch
literal 169
zcmV;a09OBa0V^p=O;s>7H)Sv}00ITQ^vsgfL<ZYq9^1vvYzVb!KDKAg|GYTP*(E84
z1_ov(CJI5WjxN5g441E2x84pr@IRN~v|{A0KVp7v4r(YW^iuQma#I*K?z)n5cxkwB
zUXi5E4&_&;XDDi>qpAZcI(ND9+HwZ@<sLtIc<<-WJUDZDo+`vWDf!983=1;&CfS@n
Xr)Y6(e^K(H=VvdN%~S#aJ3dB3^BhgC

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/93/54813d81053c14afe878a9f056b937ec42bb48 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/93/54813d81053c14afe878a9f056b937ec42bb48
new file mode 100644
index 0000000000000000000000000000000000000000..8542b45c75ff86619f87b916e8ee3df903bd9e8e
GIT binary patch
literal 28
kcmb<m^geacKghr&$>WUXx$Eao>!0_~^<rgk+0XV90Iqrq{{R30

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/9c/72c10e55e7d6ea21f591aa424e2625e8ad8094 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/9c/72c10e55e7d6ea21f591aa424e2625e8ad8094
new file mode 100644
index 0000000000000000000000000000000000000000..b53d42aee9e633a49905c0bd76fb95bf9031145d
GIT binary patch
literal 136
zcmV;30C)d*0V^p=O;s>7Hf1m|00ITQ^vsgfL<X4)hIe;7JfhoTwBDaX@@Tka?4NQ&
zBe04fS4S6LSB9%5KSiea*i5m?zMWp%HtVRT$)sKs6?(ZT43k3|Z5vr_MApBkSotAr
qr}-PF-5wBoQu33F8RX<R1av-b{KI%4^F-hC5ZCF>$*TcJIW-;CK0dJk

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/a3/cd04bb110e17591ac04e156c7df2c2f5c96fa6 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/a3/cd04bb110e17591ac04e156c7df2c2f5c96fa6
new file mode 100644
index 0000000000000000000000000000000000000000..6d9bc2a7664fe2968b95869b01587b4eaa61a4fe
GIT binary patch
literal 82
zcmV-Y0ImOc0V^p=O;s?nWH2-`00M;|S4S6LSH0X6h6P%IvU?Y)CvG|R|7KUck;K%O
or+%1#)#R6Cq!uv*co<)>wEEN6zbbUcs*pz-KP}|_02Heo?n7)OQvd(}

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/b0/e851a5619e2d6cee1da25a15ab67305f0861ec b/tests/gitea-repositories-meta/user2/readme-test.git/objects/b0/e851a5619e2d6cee1da25a15ab67305f0861ec
new file mode 100644
index 0000000000000000000000000000000000000000..2f88dbd361ae06a6ca6202ea1441b965b36a145a
GIT binary patch
literal 76
zcmV-S0JHyi0V^p=O;s>6VK6ZO0tLPF%#zeZ2HRsE+r`do2(@WGwr9=%yg1I;B`FXE
iDf!9848easzi??;<(R6yt3=9gw&*v>c|QTPTpYU4?IQ>P

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/b4/4c8eb00bdaf0522de61e591fee5f66851ef4b5 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/b4/4c8eb00bdaf0522de61e591fee5f66851ef4b5
new file mode 100644
index 0000000000000000000000000000000000000000..55bb8491afef625eeeb1af14dd0b3cd87974c3f3
GIT binary patch
literal 112
zcmV-$0FVE80V^p=O;xb8U@$QN0tLPF%#zeZ2HRsE+r`do2(@WGwr9=%yg1I;B`Jmm
z24*HE3PG-pF21e|m#<m3-VQtPKbPUOV&twrVt#H8Y7iq*@{@}h7G&^EvN?ZF(c;+t
SqU1%-&t5Q_sRRHQqbY&h9y1C6

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/b8/eaa80ad86072e1f23d2638842154ce9aceff8d b/tests/gitea-repositories-meta/user2/readme-test.git/objects/b8/eaa80ad86072e1f23d2638842154ce9aceff8d
new file mode 100644
index 0000000000000000000000000000000000000000..84ab5684a0093099072185262a4a43517cb15030
GIT binary patch
literal 77
zcmV-T0J8sh0V^p=O;s>6VK6ZO0tLPF%#zeZ2HRsE+r`do2(@WGwr9=%yg1I;B`FXE
jDf!983=1;&CfS@nr)Y6(e^K(H=VvdN%~S#at56)Q)g~dT

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/d5/34f914944c3c943a6bdb677d869ac54934928d b/tests/gitea-repositories-meta/user2/readme-test.git/objects/d5/34f914944c3c943a6bdb677d869ac54934928d
new file mode 100644
index 0000000000000000000000000000000000000000..7bb434442f72d254b112e2740ebf900a8bcd1e73
GIT binary patch
literal 31
ncmb<m^geacKghr&Rl`H)<OThc*Uz8UKY8MeH#<YrWe#ot*oh5(

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/e2/f9904cd97b4045feecfffef5a426e9461bee70 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/e2/f9904cd97b4045feecfffef5a426e9461bee70
new file mode 100644
index 0000000000000000000000000000000000000000..9654f877b8c59f52226850f204f4323b224e85e2
GIT binary patch
literal 117
zcmV-*0E+*30V^p=O;s>7Fk>(@G5`XFAXi5hUst`{6b8%sw0Rmmf%9Jnzj)s0?^SW}
zGS5X5u$toh+*F3eXIXX&@`*=E9q<#)sr_{5>&g6OP%}!35_1dkb29T%8JyT;7#ALA
Xn11m|_<YT!Yrk;qeKQpRC{`>_kh3)c

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/e3/a6fd8fe49e323ee10017f72b777a53fbd8076f b/tests/gitea-repositories-meta/user2/readme-test.git/objects/e3/a6fd8fe49e323ee10017f72b777a53fbd8076f
new file mode 100644
index 0000000000000..2307ba82dca7c
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/objects/e3/a6fd8fe49e323ee10017f72b777a53fbd8076f
@@ -0,0 +1,3 @@
+x��M
+1�a�=E.��m�� �Νwh����#�"��A<��g�~|eǾ�#�jU:����$%�9o��{�9F	�գQdsOU��H��rA�(�=�x��E���$nkҳ]�
+�����\ҫV�M7��yx�mؔ��1�-�1 ��}ږ��
3�/�%=�f>&L�
\ No newline at end of file
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/e7/bf02fcfa7a86f7fe9e8158b55d58ddf9d877ec b/tests/gitea-repositories-meta/user2/readme-test.git/objects/e7/bf02fcfa7a86f7fe9e8158b55d58ddf9d877ec
new file mode 100644
index 0000000000000000000000000000000000000000..9f898ef87387dc17cf15c794fd48d43921ddccbc
GIT binary patch
literal 171
zcmV;c095~Y0hNw94#F@H0IB_o{Q!~e_>>T$qod*j>&==(ITf6O-xHyHfO3i%4b9`&
z70^bX%E}DM7z&)EObupfwQkrcwozqfo1F_*aW=_{1y`O5C^UhP>#PD%6DjJ*&dHFS
zm%%p)k!s431#YFCS9o;P!+qP;mRGn;J65j)Z_7M<#xhidS5VG-YgKImoTZgg(C@VD
Z)}IaSwLco-$?pOghan;L;tL^5Pf1exQLg|1

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/ea/57c91ddb8b4ac705b5ac4c34c7a48f2d0fc180 b/tests/gitea-repositories-meta/user2/readme-test.git/objects/ea/57c91ddb8b4ac705b5ac4c34c7a48f2d0fc180
new file mode 100644
index 0000000000000000000000000000000000000000..d1eff52868d457865f396c829e7060972f4f3ac8
GIT binary patch
literal 77
zcmV-T0J8sh0V^p=O;s>6VK6ZO0tLPF%#zeZ2HRsE+r`do2(@WGwr9=%yg1I;B`FXE
jDf!9841Xgw?YVe?)2-mtT+c<4vwUKHHtqxfy8Rtw@<$_V

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/fe/495ea336f079ef2bed68648d0ba9a37cdbd4aa b/tests/gitea-repositories-meta/user2/readme-test.git/objects/fe/495ea336f079ef2bed68648d0ba9a37cdbd4aa
new file mode 100644
index 0000000000000000000000000000000000000000..48c0b5a4d621e0a9c34ca50ef4b53faef90a273a
GIT binary patch
literal 197
zcmV;$06PD80iBLJPQ@?~0I7Y7y#P<P@n<a|L`O%%3HI4*62<w*-W2clM2HhmPBEj&
z`?}5o7UPq2W=J{OY&3h%u>>Y-s!xW<S;sb5&qxJza_XSYn*dYdiZK>b5UIux&=!md
zok5Mp23L*FH7h!0+B<yCd4Z4fQYY^4x?Ont{=@fUZ;w^lEz=vA5To}m-g<b}UTc+q
zPvx@y-%wvHa2{~)`@$QH$J*v?86Z0d4}nUp-RU~)XX63$1~QRArork53iw_DU9Mm~

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/info/commit-graph b/tests/gitea-repositories-meta/user2/readme-test.git/objects/info/commit-graph
new file mode 100644
index 0000000000000000000000000000000000000000..9bb0976fdc30e99f66fae5f74525635980f9d928
GIT binary patch
literal 2612
zcmZ>E5Aa}QWMT04ba7*V02d(J2f}1=advSGfw0*u+~I7_Jy5kkic0~(CW*xaR80zI
z2CAnOW&xUw53>U0kue*PkB-@aV(6FyC`JtC1gfJp<^q~YF6IX6r3CW;^`m26pcp>P
z2b3ok^8?jV6AJ*%BNqz-^$Ov@!a#9CSOlmB9~K456T)IZHMp=iP!5JAfNV;!B+v{L
z%<Cg^ds5B(-wWiIKU6zY(jCKeK#n)-n9I)0my$C@mrS}fcNfRO%D>8zK1&YU-HHxe
zmCLN&ILp~k?&R0C20IVD^%k(aeRID3R`VS`OW7ZU%(ZB`W^TpNw5)ix&CN}|ipLC+
zgiLHaRnx?|S?i|hFolY)w%C2$#i88MV|Mk^Ln^-7)j__e4NraED?jIq+t;hBjjuDN
z=y4nu{<THx$NanguL3Oo?coVmjDBtIaebY`#6?kFXC|lKigGQ8Rx-^r5Esu~{_5!d
zV?QsH_^LQQjXuE0n{C2tV9&_5Ont3p%hCYum;(+QW!DG)aXRX>a%$(Dvd$k)dGofu
z{~W`)IV{5L#E*xuJTE7jJp5R3%ID0-h0{gU+&*1Ts_VHrhreAZY=`Bcopp!wFMHgm
z7GVh$-tdyiGjE-9)CHSKORrS^6nn4hF?oO7jTx$Xs{-yE5af94B7XSQj73upm^z1B
zZRj{B^PQ8+qE`EvqEnK|vD|3(Lu|H283px9N;w7H5mQUvpLfWb_C)OZy%-<q{r~T#
zD>Ix>+JAjT$p3G0t~;AduCJ<mvu9)CoXd9~xUV=Res}qb75hAeG76I)DD^C{d>$FT
zc6MFf#oSvGrkZawY&Yya`tQ}eALSQsbbU{2x>4C8!6B6Lk>}5E=X1$zK@pyxS4EkZ
zZ1^<&4@-&iF^6LpBYmgao?0X(%6VfV^TV$@Qb6gf07w9VK=R+5r3>`Jf4H+%RF)>(
ze3%qcA=BQc`UWT`3{|6%{5LnLeuja=E0Kx!N*@H3>B=0svPQS{B2bMOR1Ht^-{_SO
z|2}>0xO{VcN8^Xi``aG4$mCzP1FDfg*cGEYL*S{!*Mrg5-p&`wUjD!Ri}d8@u0S<h
zP&FLMe`Eh0xiwjNQGfqK&iRucc3zHH^T#wc6jhCniD>TgV~gZxzL{V>wLbF3s>=s+
zPiUj55n*(gcSdJv+={1fcv-49yg4VW)G{Bah6&-GMAg#j{3l{5ecTToZ<`nUew|4d
z<0DX=$p}@W1N3_#18?qy_WAQJ<TGEtk$BTsi!1Mv2C7}DkCY@6%Zgqtb$c}Bi%wnF
zwbfohwHY8Ypyse7|23I#(lz?(o!!khydGtht()aM_3eir$AC)sp=uO>cA4o%&GHpn
zyIWbSr!{U{z;+GSyUj^JH9}A|62SP{^X#|TiToP@*~J^H4Ug1MdH&7eQ9i1BykEvl
zZ;+RCHd*Y@wc3A$>xwU%ZIAv%RTF4ZzQj|VbIOFK^Nh>xR7^7ca_-9fM?f_^P`hM+
z?okO!7VD0Aw%4<F=H~ScAHv?3nr1EnszHkPpzZ6Fzsxz*w373<#Az!*p3hhAUcK%G
zR3iX22bji!`L{dr*lX;zJ*RVGN#)YxUS-?XaJU22z`{oa=&ub?_W!uqSPzwc-1|DA
zne{3EvSpo~KqcHzb5wxtaXD`F`!!EP#>H)$pS$WO&#KDIzrPl!1}Tjt_=wDK`ufVL
zbfQCZz^$WUu2v7OZYu?<K}usGl1s15<j&l1yW^Mp<kHPC!e)|pGoGTV37RikK1r_d
z%>A9sQ~94%E7h)ZW#<L8w>Y8h0jBw!$ramKP6<~!DQfQdH_4Y{>oIPwOMifBL=kGj
eWq^E|gV$BAMVrhm)^9AH!JzuP<h^G|_fG&<$XM6_

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/info/packs b/tests/gitea-repositories-meta/user2/readme-test.git/objects/info/packs
new file mode 100644
index 0000000000000..aad10862f1457
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/objects/info/packs
@@ -0,0 +1,2 @@
+P pack-8933bd634b76f8154310cccb52537a0195e43166.pack
+
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.bitmap b/tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.bitmap
new file mode 100644
index 0000000000000000000000000000000000000000..db39955a2535726c21da5f59d413fb4da9c2eb12
GIT binary patch
literal 1642
zcmZ{jO=uHA6vy9~#19k<X#FTEK>|G}Vl9XW+O1w%QfsjW(UKwxq6eWDbLb%*Otnc%
zQR~KHPdOB!rFT(K*IPk7h#m?emH2T`M7^~ljqm?9yGgdwfqftU`R$vxGqWc;&YmJg
z5hB`|Z+Uh(kzQ;#8GZfgOwWKSd}+P{ou4(8haHhBm&+0mU1J~OCycx|fBi!m0jcEU
zU%hW6B)ZDpXQtBQ@tiv`(;l5VRAJy$O^h%mxn}FXO@mlE!m9(ul#F#^HQPFJi6YAZ
z@|>BRrpUhldDuuUGr1Tb+l}NmCVvOWBPMeB5tE++WRHpb3(^UYYfa=+kUBtKGLRV|
zd7^GV_Zi56o5g84<~nlsO0rdRwJ6S*$rvZ@I4@4K_0P!RM1`WTq?{Mto!ZKRd$>Lc
zK~YRBk;7gFUJa0%1r@SjNiFDB4lp)~)olHmxHKvXsjg4lcw<e-=+m#+3q>xWUsJQ7
z@UMW>dKV%d-C{LcpOn>QUQwocle<<ScR*LvUnMWDLdu@-7gfpQD@iCS#)kJwSIO;A
zB=!4*pyc;gn`&w{LN|~WWOcBHJPO4?YRJl|ArC+?kRsQ8ktp_fH;u)^?}ieo`N`x*
zEh3xA!Jl(p44-|VYg37H{I_Q(M%qSa+@r}(q-o4@G4R6+Zd`aDxAQ%p{dexZoxOp?
z-g4RzZ=ud;7%}?|t{-W$?|dzCzP^$l8|vz7LhOy)wm+SSQ<b)d5`FuTGbbMXVc2$j
z0N>|k?zc@QOZR2Y!kYOd^oxFS4Mh**I;r_W=R*eq=2NAYGG|-jj0Ssv;q{a%WiEK2
uw}<w<?>0273(tKw<!)&?2hq`s#ro*xx#s>B>v_j;V$YM?vyFwlKmG$ksnc)(

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.idx b/tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.idx
new file mode 100644
index 0000000000000000000000000000000000000000..561e0f2e9d241a658eca432443f071acb88482ce
GIT binary patch
literal 4012
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
E06F%2IsgCw

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.pack b/tests/gitea-repositories-meta/user2/readme-test.git/objects/pack/pack-8933bd634b76f8154310cccb52537a0195e43166.pack
new file mode 100644
index 0000000000000000000000000000000000000000..6f5bf1f044bcfb2158b5ca9c6743c51c89a0dba0
GIT binary patch
literal 7854
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

literal 0
HcmV?d00001

diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/packed-refs b/tests/gitea-repositories-meta/user2/readme-test.git/packed-refs
new file mode 100644
index 0000000000000..2399a8008dcb8
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/packed-refs
@@ -0,0 +1,22 @@
+# pack-refs with: peeled fully-peeled sorted 
+ea9ef877d1d88af76682d8798418081264f10cfc refs/heads/fallbacks
+0d4c14db927c9ffba01fa7e126cc748b5c02c01e refs/heads/fallbacks2
+c66d5b07c2063d3268707f22226c708b589574ef refs/heads/fallbacks3
+89f8426e9eb5eff35c09b3565836c8f8e15d0ce9 refs/heads/fallbacks4
+b0e902496eae435ad03c92a5d479f916ef2d4893 refs/heads/fallbacks5
+84a5500b5cc040b11daf53fc42c542a99589dc76 refs/heads/fallbacks6
+cf406a96e416d7de5c4c1bbfffdd672300c822bf refs/heads/fallbacks7
+0d6ac644b969e9199915a492da9dba08c179fd23 refs/heads/fallbacks8
+5038febc0c57215beb3748d7ae4091a25a4acc93 refs/heads/fallbacks9
+9134e1f178ca4cccf1a197142646f2d7627e8cd5 refs/heads/i18n
+744d2441e55bc0010d6b340d303f0106a627ad29 refs/heads/master
+3c492566170b057e962c025515ab38bbd7444077 refs/heads/plain
+3882d6373a0882a6739b3cd9b24d21c630621234 refs/heads/sp-ace
+bf5ed898252eaa50dcc01108ed4417c3ea98a294 refs/heads/special-subdir-.gitea
+c03543573ab088ce1cf7090a387d2be621426234 refs/heads/special-subdir-.github
+e75957ad9b7e6ed16dda183529ec283db0bbc5fe refs/heads/special-subdir-docs
+46f5d5ab33d701642e08c713fab42af89fdd4fea refs/heads/special-subdir-nested
+9c0f872256b839c2b97ec22fd348d87b14045513 refs/heads/subdir
+d7a854fff61e45b98234d7aa79ecbcb1619cd3dd refs/heads/symlink
+30b9c0ed4b1039dbd99f3fb537b84ca507e0549d refs/heads/symlink-loop
+41489b7be5c2244d2b7b524dcb31caf3bd1f9ccc refs/heads/txt
diff --git a/tests/gitea-repositories-meta/user2/readme-test.git/refs/heads/fallbacks-broken-symlinks b/tests/gitea-repositories-meta/user2/readme-test.git/refs/heads/fallbacks-broken-symlinks
new file mode 100644
index 0000000000000..cf36865a7126f
--- /dev/null
+++ b/tests/gitea-repositories-meta/user2/readme-test.git/refs/heads/fallbacks-broken-symlinks
@@ -0,0 +1 @@
+fe495ea336f079ef2bed68648d0ba9a37cdbd4aa
diff --git a/tests/integration/repo_test.go b/tests/integration/repo_test.go
index 3692b11ecabe5..83ec2e6f27a29 100644
--- a/tests/integration/repo_test.go
+++ b/tests/integration/repo_test.go
@@ -256,3 +256,106 @@ func TestViewRepoDirectory(t *testing.T) {
 	assert.Zero(t, repoTopics.Length())
 	assert.Zero(t, repoSummary.Length())
 }
+
+// ensure that the all the different ways to find and render a README work
+func TestViewRepoDirectoryReadme(t *testing.T) {
+	defer tests.PrepareTestEnv(t)()
+
+	// there are many combinations:
+	// - READMEs can be .md, .txt, or have no extension
+	// - READMEs can be tagged with a language and even a country code
+	// - READMEs can be stored in docs/, .gitea/, or .github/
+	// - READMEs can be symlinks to other files
+	// - READMEs can be broken symlinks which should not render
+
+	session := loginUser(t, "user2")
+
+	check := func(name, url, filename, content string) {
+		t.Run(name, func(t *testing.T) {
+			defer tests.PrintCurrentTest(t)()
+
+			req := NewRequest(t, "GET", url)
+			resp := session.MakeRequest(t, req, http.StatusOK)
+
+			htmlDoc := NewHTMLParser(t, resp.Body)
+			readmeName := htmlDoc.doc.Find("h4.file-header")
+			readmeContent := htmlDoc.doc.Find(".file-view") // TODO: add a id="readme" to the output to make this test more precise
+
+			assert.Equal(t, filename, strings.TrimSpace(readmeName.Text()))
+			assert.Contains(t, readmeContent.Text(), content)
+		})
+	}
+
+	// this doesn't cover all possible cases, just the major branches of the code
+
+	// viewing the top level
+	check("Home", "/user2/readme-test/", "README.md", "The cake is a lie.")
+
+	// viewing different file extensions
+	check("md", "/user2/readme-test/src/branch/master/", "README.md", "The cake is a lie.")
+	check("txt", "/user2/readme-test/src/branch/txt/", "README.txt", "My spoon is too big.")
+	check("plain", "/user2/readme-test/src/branch/plain/", "README", "Birken my stocks gee howdy")
+	check("i18n", "/user2/readme-test/src/branch/i18n/", "README.zh.md", "蛋糕是一个谎言")
+
+	// viewing different subdirectories
+	check("subdir", "/user2/readme-test/src/branch/subdir/libcake", "README.md", "Four pints of sugar.")
+	check("docs-direct", "/user2/readme-test/src/branch/special-subdir-docs/docs/", "README.md", "This is in docs/")
+	check("docs", "/user2/readme-test/src/branch/special-subdir-docs/", "docs/README.md", "This is in docs/")
+	check(".gitea", "/user2/readme-test/src/branch/special-subdir-.gitea/", ".gitea/README.md", "This is in .gitea/")
+	check(".github", "/user2/readme-test/src/branch/special-subdir-.github/", ".github/README.md", "This is in .github/")
+
+	// symlinks
+	// symlinks are subtle:
+	// - they should be able to handle going a reasonable number of times up and down in the tree
+	// - they shouldn't get stuck on link cycles
+	// - they should determine the filetype based on the name of the link, not the target
+	check("symlink", "/user2/readme-test/src/branch/symlink/", "README.md", "This is in some/other/path")
+	check("symlink-multiple", "/user2/readme-test/src/branch/symlink/some/", "README.txt", "This is in some/other/path")
+	check("symlink-up-and-down", "/user2/readme-test/src/branch/symlink/up/back/down/down", "README.md", "It's a me, mario")
+
+	// testing fallback rules
+	// READMEs are searched in this order:
+	// - [README.zh-cn.md, README.zh_cn.md, README.zh.md, README_zh.md, README.md, README.txt, README,
+	//     docs/README.zh-cn.md, docs/README.zh_cn.md, docs/README.zh.md, docs/README_zh.md, docs/README.md, docs/README.txt, docs/README,
+	//    .gitea/README.zh-cn.md, .gitea/README.zh_cn.md, .gitea/README.zh.md, .gitea/README_zh.md, .gitea/README.md, .gitea/README.txt, .gitea/README,
+
+	//     .github/README.zh-cn.md, .github/README.zh_cn.md, .github/README.zh.md, .github/README_zh.md, .github/README.md, .github/README.txt, .github/README]
+	// and a broken/looped symlink counts as not existing at all and should be skipped.
+	// again, this doesn't cover all cases, but it covers a few
+	check("fallback/top", "/user2/readme-test/src/branch/fallbacks/", "README.en.md", "This is README.en.md")
+	check("fallback/2", "/user2/readme-test/src/branch/fallbacks2/", "README.md", "This is README.md")
+	check("fallback/3", "/user2/readme-test/src/branch/fallbacks3/", "README", "This is README")
+	check("fallback/4", "/user2/readme-test/src/branch/fallbacks4/", "docs/README.en.md", "This is docs/README.en.md")
+	check("fallback/5", "/user2/readme-test/src/branch/fallbacks5/", "docs/README.md", "This is docs/README.md")
+	check("fallback/6", "/user2/readme-test/src/branch/fallbacks6/", "docs/README", "This is docs/README")
+	check("fallback/7", "/user2/readme-test/src/branch/fallbacks7/", ".gitea/README.en.md", "This is .gitea/README.en.md")
+	check("fallback/8", "/user2/readme-test/src/branch/fallbacks8/", ".gitea/README.md", "This is .gitea/README.md")
+	check("fallback/9", "/user2/readme-test/src/branch/fallbacks9/", ".gitea/README", "This is .gitea/README")
+
+	// this case tests that broken symlinks count as missing files, instead of rendering their contents
+	check("fallbacks-broken-symlinks", "/user2/readme-test/src/branch/fallbacks-broken-symlinks/", "docs/README", "This is docs/README")
+
+	// some cases that should NOT render a README
+	// - /readme
+	// - /.github/docs/README.md
+	// - a symlink loop
+
+	missing := func(name, url string) {
+		t.Run("missing/"+name, func(t *testing.T) {
+			defer tests.PrintCurrentTest(t)()
+
+			req := NewRequest(t, "GET", url)
+			resp := session.MakeRequest(t, req, http.StatusOK)
+
+			htmlDoc := NewHTMLParser(t, resp.Body)
+			_, exists := htmlDoc.doc.Find(".file-view").Attr("class")
+			fmt.Printf("%s", resp.Body)
+
+			assert.False(t, exists, "README should not have rendered")
+		})
+	}
+	missing("sp-ace", "/user2/readme-test/src/branch/sp-ace/")
+	missing("nested-special", "/user2/readme-test/src/branch/special-subdir-nested/subproject") // the special subdirs should only trigger on the repo root
+	// missing("special-subdir-nested", "/user2/readme-test/src/branch/special-subdir-nested/") // This is currently FAILING, due to a bug introduced in https://github.com/go-gitea/gitea/pull/22177
+	missing("symlink-loop", "/user2/readme-test/src/branch/symlink-loop/")
+}

From 1e666dc5f81bb9f10e059486c1c48139865f1a36 Mon Sep 17 00:00:00 2001
From: Nick Guenther <nick.guenther@polymtl.ca>
Date: Thu, 2 Mar 2023 17:37:49 -0500
Subject: [PATCH 2/3] Move comment

---
 tests/integration/repo_test.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/integration/repo_test.go b/tests/integration/repo_test.go
index 83ec2e6f27a29..1b9fdfa9f1b82 100644
--- a/tests/integration/repo_test.go
+++ b/tests/integration/repo_test.go
@@ -267,6 +267,8 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
 	// - READMEs can be stored in docs/, .gitea/, or .github/
 	// - READMEs can be symlinks to other files
 	// - READMEs can be broken symlinks which should not render
+	//
+	// this doesn't cover all possible cases, just the major branches of the code
 
 	session := loginUser(t, "user2")
 
@@ -286,8 +288,6 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
 		})
 	}
 
-	// this doesn't cover all possible cases, just the major branches of the code
-
 	// viewing the top level
 	check("Home", "/user2/readme-test/", "README.md", "The cake is a lie.")
 

From 7523b8340796276909b28a05b256e4d1af89162d Mon Sep 17 00:00:00 2001
From: Nick Guenther <nick.guenther@polymtl.ca>
Date: Thu, 2 Mar 2023 17:56:14 -0500
Subject: [PATCH 3/3] Test for rendered README file type

---
 tests/integration/repo_test.go | 54 ++++++++++++++++++----------------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/tests/integration/repo_test.go b/tests/integration/repo_test.go
index 1b9fdfa9f1b82..c887f6d50ac7e 100644
--- a/tests/integration/repo_test.go
+++ b/tests/integration/repo_test.go
@@ -272,7 +272,7 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
 
 	session := loginUser(t, "user2")
 
-	check := func(name, url, filename, content string) {
+	check := func(name, url, expectedFilename, expectedReadmeType, expectedContent string) {
 		t.Run(name, func(t *testing.T) {
 			defer tests.PrintCurrentTest(t)()
 
@@ -282,36 +282,38 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
 			htmlDoc := NewHTMLParser(t, resp.Body)
 			readmeName := htmlDoc.doc.Find("h4.file-header")
 			readmeContent := htmlDoc.doc.Find(".file-view") // TODO: add a id="readme" to the output to make this test more precise
+			readmeType, _ := readmeContent.Attr("class")
 
-			assert.Equal(t, filename, strings.TrimSpace(readmeName.Text()))
-			assert.Contains(t, readmeContent.Text(), content)
+			assert.Equal(t, expectedFilename, strings.TrimSpace(readmeName.Text()))
+			assert.Contains(t, readmeType, expectedReadmeType)
+			assert.Contains(t, readmeContent.Text(), expectedContent)
 		})
 	}
 
 	// viewing the top level
-	check("Home", "/user2/readme-test/", "README.md", "The cake is a lie.")
+	check("Home", "/user2/readme-test/", "README.md", "markdown", "The cake is a lie.")
 
 	// viewing different file extensions
-	check("md", "/user2/readme-test/src/branch/master/", "README.md", "The cake is a lie.")
-	check("txt", "/user2/readme-test/src/branch/txt/", "README.txt", "My spoon is too big.")
-	check("plain", "/user2/readme-test/src/branch/plain/", "README", "Birken my stocks gee howdy")
-	check("i18n", "/user2/readme-test/src/branch/i18n/", "README.zh.md", "蛋糕是一个谎言")
+	check("md", "/user2/readme-test/src/branch/master/", "README.md", "markdown", "The cake is a lie.")
+	check("txt", "/user2/readme-test/src/branch/txt/", "README.txt", "plain-text", "My spoon is too big.")
+	check("plain", "/user2/readme-test/src/branch/plain/", "README", "plain-text", "Birken my stocks gee howdy")
+	check("i18n", "/user2/readme-test/src/branch/i18n/", "README.zh.md", "markdown", "蛋糕是一个谎言")
 
 	// viewing different subdirectories
-	check("subdir", "/user2/readme-test/src/branch/subdir/libcake", "README.md", "Four pints of sugar.")
-	check("docs-direct", "/user2/readme-test/src/branch/special-subdir-docs/docs/", "README.md", "This is in docs/")
-	check("docs", "/user2/readme-test/src/branch/special-subdir-docs/", "docs/README.md", "This is in docs/")
-	check(".gitea", "/user2/readme-test/src/branch/special-subdir-.gitea/", ".gitea/README.md", "This is in .gitea/")
-	check(".github", "/user2/readme-test/src/branch/special-subdir-.github/", ".github/README.md", "This is in .github/")
+	check("subdir", "/user2/readme-test/src/branch/subdir/libcake", "README.md", "markdown", "Four pints of sugar.")
+	check("docs-direct", "/user2/readme-test/src/branch/special-subdir-docs/docs/", "README.md", "markdown", "This is in docs/")
+	check("docs", "/user2/readme-test/src/branch/special-subdir-docs/", "docs/README.md", "markdown", "This is in docs/")
+	check(".gitea", "/user2/readme-test/src/branch/special-subdir-.gitea/", ".gitea/README.md", "markdown", "This is in .gitea/")
+	check(".github", "/user2/readme-test/src/branch/special-subdir-.github/", ".github/README.md", "markdown", "This is in .github/")
 
 	// symlinks
 	// symlinks are subtle:
 	// - they should be able to handle going a reasonable number of times up and down in the tree
 	// - they shouldn't get stuck on link cycles
 	// - they should determine the filetype based on the name of the link, not the target
-	check("symlink", "/user2/readme-test/src/branch/symlink/", "README.md", "This is in some/other/path")
-	check("symlink-multiple", "/user2/readme-test/src/branch/symlink/some/", "README.txt", "This is in some/other/path")
-	check("symlink-up-and-down", "/user2/readme-test/src/branch/symlink/up/back/down/down", "README.md", "It's a me, mario")
+	check("symlink", "/user2/readme-test/src/branch/symlink/", "README.md", "markdown", "This is in some/other/path")
+	check("symlink-multiple", "/user2/readme-test/src/branch/symlink/some/", "README.txt", "plain-text", "This is in some/other/path")
+	check("symlink-up-and-down", "/user2/readme-test/src/branch/symlink/up/back/down/down", "README.md", "markdown", "It's a me, mario")
 
 	// testing fallback rules
 	// READMEs are searched in this order:
@@ -322,18 +324,18 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
 	//     .github/README.zh-cn.md, .github/README.zh_cn.md, .github/README.zh.md, .github/README_zh.md, .github/README.md, .github/README.txt, .github/README]
 	// and a broken/looped symlink counts as not existing at all and should be skipped.
 	// again, this doesn't cover all cases, but it covers a few
-	check("fallback/top", "/user2/readme-test/src/branch/fallbacks/", "README.en.md", "This is README.en.md")
-	check("fallback/2", "/user2/readme-test/src/branch/fallbacks2/", "README.md", "This is README.md")
-	check("fallback/3", "/user2/readme-test/src/branch/fallbacks3/", "README", "This is README")
-	check("fallback/4", "/user2/readme-test/src/branch/fallbacks4/", "docs/README.en.md", "This is docs/README.en.md")
-	check("fallback/5", "/user2/readme-test/src/branch/fallbacks5/", "docs/README.md", "This is docs/README.md")
-	check("fallback/6", "/user2/readme-test/src/branch/fallbacks6/", "docs/README", "This is docs/README")
-	check("fallback/7", "/user2/readme-test/src/branch/fallbacks7/", ".gitea/README.en.md", "This is .gitea/README.en.md")
-	check("fallback/8", "/user2/readme-test/src/branch/fallbacks8/", ".gitea/README.md", "This is .gitea/README.md")
-	check("fallback/9", "/user2/readme-test/src/branch/fallbacks9/", ".gitea/README", "This is .gitea/README")
+	check("fallback/top", "/user2/readme-test/src/branch/fallbacks/", "README.en.md", "markdown", "This is README.en.md")
+	check("fallback/2", "/user2/readme-test/src/branch/fallbacks2/", "README.md", "markdown", "This is README.md")
+	check("fallback/3", "/user2/readme-test/src/branch/fallbacks3/", "README", "plain-text", "This is README")
+	check("fallback/4", "/user2/readme-test/src/branch/fallbacks4/", "docs/README.en.md", "markdown", "This is docs/README.en.md")
+	check("fallback/5", "/user2/readme-test/src/branch/fallbacks5/", "docs/README.md", "markdown", "This is docs/README.md")
+	check("fallback/6", "/user2/readme-test/src/branch/fallbacks6/", "docs/README", "plain-text", "This is docs/README")
+	check("fallback/7", "/user2/readme-test/src/branch/fallbacks7/", ".gitea/README.en.md", "markdown", "This is .gitea/README.en.md")
+	check("fallback/8", "/user2/readme-test/src/branch/fallbacks8/", ".gitea/README.md", "markdown", "This is .gitea/README.md")
+	check("fallback/9", "/user2/readme-test/src/branch/fallbacks9/", ".gitea/README", "plain-text", "This is .gitea/README")
 
 	// this case tests that broken symlinks count as missing files, instead of rendering their contents
-	check("fallbacks-broken-symlinks", "/user2/readme-test/src/branch/fallbacks-broken-symlinks/", "docs/README", "This is docs/README")
+	check("fallbacks-broken-symlinks", "/user2/readme-test/src/branch/fallbacks-broken-symlinks/", "docs/README", "plain-text", "This is docs/README")
 
 	// some cases that should NOT render a README
 	// - /readme