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 {
138140return 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 {
146146return 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 )
150152if err != nil {
151153return 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+ }
154166return newGiteaTemplateFileMatcher (localPath ,content ),nil
155167}
156168
157169func substGiteaTemplateFile (ctx context.Context ,tmpDir ,tmpDirSubPath string ,templateRepo ,generateRepo * repo_model.Repository )error {
158170tmpFullPath := 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 )
164172if err != nil {
165- return err
173+ return util . Iif ( errors . Is ( err , fs . ErrNotExist ), nil , err )
166174}
167175if err := util .Remove (tmpFullPath );err != nil {
168176return err
@@ -172,7 +180,7 @@ func substGiteaTemplateFile(ctx context.Context, tmpDir, tmpDirSubPath string, t
172180substSubPath := filepath .Clean (filePathSanitize (generateExpansion (ctx ,tmpDirSubPath ,templateRepo ,generateRepo )))
173181newLocalPath := filepath .Join (tmpDir ,substSubPath )
174182regular ,err := util .IsRegularFile (newLocalPath )
175- if canWrite := regular || os . IsNotExist (err );! canWrite {
183+ if canWrite := regular || errors . Is (err , fs . ErrNotExist );! canWrite {
176184return nil
177185}
178186if 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
244252fileMatcher ,err := readGiteaTemplateFile (tmpDir )
245- if err != nil {
246- return fmt .Errorf ("readGiteaTemplateFile: %w" ,err )
247- }
248-
249- if fileMatcher != nil {
253+ if err == nil {
250254err = processGiteaTemplateFile (ctx ,tmpDir ,templateRepo ,generateRepo ,fileMatcher )
251255if 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
256264if err = git .InitRepository (ctx ,tmpDir ,false ,templateRepo .ObjectFormatName );err != nil {