@@ -49,7 +49,7 @@ var defaultTransformers = []transformer{
49
49
{Name : "TITLE" , Transform : util .ToTitleCase },
50
50
}
51
51
52
- func generateExpansion (src string , templateRepo , generateRepo * repo_model.Repository ) string {
52
+ func generateExpansion (src string , templateRepo , generateRepo * repo_model.Repository , escapeFileName bool ) string {
53
53
expansions := []expansion {
54
54
{Name : "REPO_NAME" , Value : generateRepo .Name , Transformers : defaultTransformers },
55
55
{Name : "TEMPLATE_NAME" , Value : templateRepo .Name , Transformers : defaultTransformers },
@@ -75,6 +75,9 @@ func generateExpansion(src string, templateRepo, generateRepo *repo_model.Reposi
75
75
76
76
return os .Expand (src , func (key string ) string {
77
77
if expansion , ok := expansionMap [key ]; ok {
78
+ if escapeFileName {
79
+ return fileNameEscape (expansion )
80
+ }
78
81
return expansion
79
82
}
80
83
return key
@@ -192,15 +195,21 @@ func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *r
192
195
}
193
196
194
197
if err := os .WriteFile (path ,
195
- []byte (generateExpansion (string (content ), templateRepo , generateRepo )),
198
+ []byte (generateExpansion (string (content ), templateRepo , generateRepo , false )),
196
199
0o644 ); err != nil {
197
200
return err
198
201
}
199
202
203
+ substPath := filepath .FromSlash (filepath .Join (tmpDirSlash ,
204
+ generateExpansion (base , templateRepo , generateRepo , true )))
205
+
206
+ // Create parent subdirectories if needed or continue silently if it exists
207
+ if err := os .MkdirAll (filepath .Dir (substPath ), 0o755 ); err != nil {
208
+ return err
209
+ }
210
+
200
211
// Substitute filename variables
201
- if err := os .Rename (path ,
202
- filepath .FromSlash (filepath .Join (tmpDirSlash ,
203
- fileNameEscape (generateExpansion (base , templateRepo , generateRepo ))))); err != nil {
212
+ if err := os .Rename (path , substPath ); err != nil {
204
213
return err
205
214
}
206
215
@@ -370,5 +379,5 @@ func GenerateRepository(ctx context.Context, doer, owner *user_model.User, templ
370
379
func fileNameEscape (s string ) string {
371
380
re := regexp .MustCompile (`(?i)[\.<>:\"/\\|?*\x{0000}-\x{001F}]|^(con|prn|aux|nul|com\d|lpt\d)$` )
372
381
373
- return re .ReplaceAllString (s , "_" )
382
+ return strings . TrimSpace ( re .ReplaceAllString (s , "_" ) )
374
383
}
0 commit comments