77 "bufio"
88 "bytes"
99 "context"
10+ "errors"
1011 "fmt"
12+ "io/fs"
1113 "os"
1214 "path/filepath"
1315 "regexp"
@@ -138,31 +140,37 @@ func (gt *giteaTemplateFileMatcher) Match(s string) bool {
138140 return false
139141}
140142
141- func readGiteaTemplateFile (tmpDir string ) (* giteaTemplateFileMatcher , error ) {
142- localPath := filepath .Join (tmpDir , ".gitea" , "template" )
143- if _ , err := os .Stat (localPath ); os .IsNotExist (err ) {
144- return nil , nil
145- } else if err != nil {
143+ func readLocalTmpRepoFileContent (localPath string , limit int ) ([]byte , error ) {
144+ ok , err := util .IsRegularFile (localPath )
145+ if err != nil {
146146 return nil , err
147+ } else if ! ok {
148+ return nil , fs .ErrNotExist
147149 }
148150
149- content , err := os .ReadFile (localPath )
151+ f , err := os .Open (localPath )
150152 if err != nil {
151153 return nil , err
152154 }
155+ defer f .Close ()
156+
157+ return util .ReadWithLimit (f , limit )
158+ }
153159
160+ func readGiteaTemplateFile (tmpDir string ) (* giteaTemplateFileMatcher , error ) {
161+ localPath := filepath .Join (tmpDir , ".gitea" , "template" )
162+ content , err := readLocalTmpRepoFileContent (localPath , 1024 * 1024 )
163+ if err != nil {
164+ return nil , err
165+ }
154166 return newGiteaTemplateFileMatcher (localPath , content ), nil
155167}
156168
157169func substGiteaTemplateFile (ctx context.Context , tmpDir , tmpDirSubPath string , templateRepo , generateRepo * repo_model.Repository ) error {
158170 tmpFullPath := filepath .Join (tmpDir , tmpDirSubPath )
159- if ok , err := util .IsRegularFile (tmpFullPath ); ! ok {
160- return err
161- }
162-
163- content , err := os .ReadFile (tmpFullPath )
171+ content , err := readLocalTmpRepoFileContent (tmpFullPath , 1024 * 1024 )
164172 if err != nil {
165- return err
173+ return util . Iif ( errors . Is ( err , fs . ErrNotExist ), nil , err )
166174 }
167175 if err := util .Remove (tmpFullPath ); err != nil {
168176 return err
@@ -172,7 +180,7 @@ func substGiteaTemplateFile(ctx context.Context, tmpDir, tmpDirSubPath string, t
172180 substSubPath := filepath .Clean (filePathSanitize (generateExpansion (ctx , tmpDirSubPath , templateRepo , generateRepo )))
173181 newLocalPath := filepath .Join (tmpDir , substSubPath )
174182 regular , err := util .IsRegularFile (newLocalPath )
175- if canWrite := regular || os . IsNotExist (err ); ! canWrite {
183+ if canWrite := regular || errors . Is (err , fs . ErrNotExist ); ! canWrite {
176184 return nil
177185 }
178186 if err := os .MkdirAll (filepath .Dir (newLocalPath ), 0o755 ); err != nil {
@@ -242,15 +250,15 @@ func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *r
242250
243251 // Variable expansion
244252 fileMatcher , err := readGiteaTemplateFile (tmpDir )
245- if err != nil {
246- return fmt .Errorf ("readGiteaTemplateFile: %w" , err )
247- }
248-
249- if fileMatcher != nil {
253+ if err == nil {
250254 err = processGiteaTemplateFile (ctx , tmpDir , templateRepo , generateRepo , fileMatcher )
251255 if err != nil {
252- return err
256+ return fmt . Errorf ( "processGiteaTemplateFile: %w" , err )
253257 }
258+ } else if errors .Is (err , fs .ErrNotExist ) {
259+ log .Debug ("skip processing repo template files: no available .gitea/template" )
260+ } else {
261+ return fmt .Errorf ("readGiteaTemplateFile: %w" , err )
254262 }
255263
256264 if err = git .InitRepository (ctx , tmpDir , false , templateRepo .ObjectFormatName ); err != nil {
0 commit comments