Skip to content

Commit 3b8fe94

Browse files
committed
Fix substituting directories
1 parent dfea4f8 commit 3b8fe94

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

modules/repository/generate.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ var defaultTransformers = []transformer{
4949
{Name: "TITLE", Transform: util.ToTitleCase},
5050
}
5151

52-
func generateExpansion(src string, templateRepo, generateRepo *repo_model.Repository) string {
52+
func generateExpansion(src string, templateRepo, generateRepo *repo_model.Repository, escapeFileName bool) string {
5353
expansions := []expansion{
5454
{Name: "REPO_NAME", Value: generateRepo.Name, Transformers: defaultTransformers},
5555
{Name: "TEMPLATE_NAME", Value: templateRepo.Name, Transformers: defaultTransformers},
@@ -75,6 +75,9 @@ func generateExpansion(src string, templateRepo, generateRepo *repo_model.Reposi
7575

7676
return os.Expand(src, func(key string) string {
7777
if expansion, ok := expansionMap[key]; ok {
78+
if escapeFileName {
79+
return fileNameEscape(expansion)
80+
}
7881
return expansion
7982
}
8083
return key
@@ -192,15 +195,21 @@ func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *r
192195
}
193196

194197
if err := os.WriteFile(path,
195-
[]byte(generateExpansion(string(content), templateRepo, generateRepo)),
198+
[]byte(generateExpansion(string(content), templateRepo, generateRepo, false)),
196199
0o644); err != nil {
197200
return err
198201
}
199202

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+
200211
// 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 {
204213
return err
205214
}
206215

@@ -370,5 +379,5 @@ func GenerateRepository(ctx context.Context, doer, owner *user_model.User, templ
370379
func fileNameEscape(s string) string {
371380
re := regexp.MustCompile(`(?i)[\.<>:\"/\\|?*\x{0000}-\x{001F}]|^(con|prn|aux|nul|com\d|lpt\d)$`)
372381

373-
return re.ReplaceAllString(s, "_")
382+
return strings.TrimSpace(re.ReplaceAllString(s, "_"))
374383
}

modules/repository/generate_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ func TestGiteaTemplate(t *testing.T) {
5757

5858
func TestFileNameEscape(t *testing.T) {
5959
assert.Equal(t, "test_CON", fileNameEscape("test_CON"))
60+
assert.Equal(t, "test CON", fileNameEscape("test CON "))
61+
assert.Equal(t, "___traverse", fileNameEscape("../traverse"))
6062
assert.Equal(t, "http___localhost_3003_user_test_git", fileNameEscape("http://localhost:3003/user/test.git"))
6163
assert.Equal(t, "_", fileNameEscape("CON"))
6264
assert.Equal(t, "_", fileNameEscape("con"))

0 commit comments

Comments
 (0)