loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request 'fix: template config path (#2836)' (#6335) from Snoweuph/forgejo:fix/template-file into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6335
Reviewed-by: Gusted <gusted@noreply.codeberg.org>

Gusted 54255688 ee214cb8

+93 -15
+18 -10
services/repository/generate.go
··· 126 126 } 127 127 128 128 func checkGiteaTemplate(tmpDir string) (*GiteaTemplate, error) { 129 - gtPath := filepath.Join(tmpDir, ".gitea", "template") 130 - if _, err := os.Stat(gtPath); os.IsNotExist(err) { 129 + configDirs := []string{".forgejo", ".gitea"} 130 + var templateFilePath string 131 + 132 + for _, dir := range configDirs { 133 + candidatePath := filepath.Join(tmpDir, dir, "template") 134 + if _, err := os.Stat(candidatePath); err == nil { 135 + templateFilePath = candidatePath 136 + break 137 + } else if !os.IsNotExist(err) { 138 + return nil, err 139 + } 140 + } 141 + 142 + if templateFilePath == "" { 131 143 return nil, nil 132 - } else if err != nil { 133 - return nil, err 134 144 } 135 145 136 - content, err := os.ReadFile(gtPath) 146 + content, err := os.ReadFile(templateFilePath) 137 147 if err != nil { 138 148 return nil, err 139 149 } 140 150 141 - gt := &GiteaTemplate{ 142 - Path: gtPath, 151 + return &GiteaTemplate{ 152 + Path: templateFilePath, 143 153 Content: content, 144 - } 145 - 146 - return gt, nil 154 + }, nil 147 155 } 148 156 149 157 func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *repo_model.Repository, tmpDir string) error {
+75 -5
tests/integration/repo_generate_test.go
··· 7 7 import ( 8 8 "fmt" 9 9 "net/http" 10 + "net/url" 10 11 "strconv" 11 12 "strings" 12 13 "testing" ··· 14 15 repo_model "code.gitea.io/gitea/models/repo" 15 16 "code.gitea.io/gitea/models/unittest" 16 17 user_model "code.gitea.io/gitea/models/user" 18 + "code.gitea.io/gitea/modules/optional" 17 19 "code.gitea.io/gitea/modules/setting" 18 20 "code.gitea.io/gitea/modules/test" 19 21 "code.gitea.io/gitea/modules/translation" 22 + files_service "code.gitea.io/gitea/services/repository/files" 20 23 "code.gitea.io/gitea/tests" 21 24 22 25 "github.com/stretchr/testify/assert" ··· 76 79 // Step4: check the existence of the generated repo 77 80 req = NewRequestf(t, "GET", "/%s/%s", generateOwner.Name, generateRepoName) 78 81 session.MakeRequest(t, req, http.StatusOK) 82 + } 83 + 84 + func testRepoGenerateWithFixture(t *testing.T, session *TestSession, templateID, templateOwnerName, templateRepoName string, user, generateOwner *user_model.User, generateRepoName string) { 85 + testRepoGenerate(t, session, templateID, templateOwnerName, templateRepoName, user, generateOwner, generateRepoName) 79 86 80 - // Step5: check substituted values in Readme 81 - req = NewRequestf(t, "GET", "/%s/%s/raw/branch/master/README.md", generateOwner.Name, generateRepoName) 82 - resp = session.MakeRequest(t, req, http.StatusOK) 87 + // check substituted values in Readme 88 + req := NewRequestf(t, "GET", "/%s/%s/raw/branch/master/README.md", generateOwner.Name, generateRepoName) 89 + resp := session.MakeRequest(t, req, http.StatusOK) 83 90 body := fmt.Sprintf(`# %s Readme 84 91 Owner: %s 85 92 Link: /%s/%s ··· 125 132 session := loginUser(t, userName) 126 133 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: userName}) 127 134 128 - testRepoGenerate(t, session, "44", "user27", "template1", user, user, "generated1") 135 + testRepoGenerateWithFixture(t, session, "44", "user27", "template1", user, user, "generated1") 129 136 } 130 137 131 138 func TestRepoGenerateToOrg(t *testing.T) { ··· 135 142 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: userName}) 136 143 org := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org3"}) 137 144 138 - testRepoGenerate(t, session, "44", "user27", "template1", user, org, "generated2") 145 + testRepoGenerateWithFixture(t, session, "44", "user27", "template1", user, org, "generated2") 139 146 } 140 147 141 148 func TestRepoCreateFormTrimSpace(t *testing.T) { ··· 153 160 assert.EqualValues(t, "/user2/spaced-name", test.RedirectURL(resp)) 154 161 unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: 2, Name: "spaced-name"}) 155 162 } 163 + 164 + func TestRepoGenerateTemplating(t *testing.T) { 165 + onGiteaRun(t, func(t *testing.T, u *url.URL) { 166 + input := `# $REPO_NAME 167 + This is a Repo By $REPO_OWNER 168 + ThisIsThe${REPO_NAME}InAnInlineWay` 169 + expected := `# %s 170 + This is a Repo By %s 171 + ThisIsThe%sInAnInlineWay` 172 + templateName := "my_template" 173 + generatedName := "my_generated" 174 + 175 + userName := "user1" 176 + session := loginUser(t, userName) 177 + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: userName}) 178 + 179 + template, _, f := tests.CreateDeclarativeRepoWithOptions(t, user, tests.DeclarativeRepoOptions{ 180 + Name: optional.Some(templateName), 181 + IsTemplate: optional.Some(true), 182 + Files: optional.Some([]*files_service.ChangeRepoFile{ 183 + { 184 + Operation: "create", 185 + TreePath: ".forgejo/template", 186 + ContentReader: strings.NewReader("Readme.md"), 187 + }, 188 + { 189 + Operation: "create", 190 + TreePath: "Readme.md", 191 + ContentReader: strings.NewReader(input), 192 + }, 193 + }), 194 + }) 195 + defer f() 196 + 197 + // The repo.TemplateID field is not initalized. Luckly the ID field holds the expected value 198 + templateID := strconv.FormatInt(template.ID, 10) 199 + 200 + testRepoGenerate( 201 + t, 202 + session, 203 + templateID, 204 + user.Name, 205 + templateName, 206 + user, 207 + user, 208 + generatedName, 209 + ) 210 + 211 + req := NewRequestf( 212 + t, 213 + "GET", "/%s/%s/raw/branch/%s/Readme.md", 214 + user.Name, 215 + generatedName, 216 + template.DefaultBranch, 217 + ) 218 + resp := session.MakeRequest(t, req, http.StatusOK) 219 + body := fmt.Sprintf(expected, 220 + generatedName, 221 + user.Name, 222 + generatedName) 223 + assert.Equal(t, body, resp.Body.String()) 224 + }) 225 + }