@@ -16,38 +16,62 @@ import (
16
16
"code.gitea.io/gitea/models"
17
17
"code.gitea.io/gitea/modules/git"
18
18
"code.gitea.io/gitea/modules/log"
19
+
20
+ "github.com/huandu/xstrings"
19
21
)
20
22
23
+ type transformer struct {
24
+ Name string
25
+ Transform func (string ) string
26
+ }
27
+
28
+ type expansion struct {
29
+ Name string
30
+ Value string
31
+ Transformers []transformer
32
+ }
33
+
34
+ var defaultTransformers = []transformer {
35
+ {Name : "SNAKE" , Transform : xstrings .ToSnakeCase },
36
+ {Name : "KEBAB" , Transform : xstrings .ToKebabCase },
37
+ {Name : "CAMEL" , Transform : func (str string ) string {
38
+ return xstrings .FirstRuneToLower (xstrings .ToCamelCase (str ))
39
+ }},
40
+ {Name : "PASCAL" , Transform : xstrings .ToCamelCase },
41
+ {Name : "LOWER" , Transform : strings .ToLower },
42
+ {Name : "UPPER" , Transform : strings .ToUpper },
43
+ {Name : "TITLE" , Transform : strings .Title },
44
+ }
45
+
21
46
func generateExpansion (src string , templateRepo , generateRepo * models.Repository ) string {
47
+ expansions := []expansion {
48
+ {Name : "REPO_NAME" , Value : generateRepo .Name , Transformers : defaultTransformers },
49
+ {Name : "TEMPLATE_NAME" , Value : templateRepo .Name , Transformers : defaultTransformers },
50
+ {Name : "REPO_DESCRIPTION" , Value : generateRepo .Description , Transformers : nil },
51
+ {Name : "TEMPLATE_DESCRIPTION" , Value : templateRepo .Description , Transformers : nil },
52
+ {Name : "REPO_OWNER" , Value : generateRepo .OwnerName , Transformers : defaultTransformers },
53
+ {Name : "TEMPLATE_OWNER" , Value : templateRepo .OwnerName , Transformers : defaultTransformers },
54
+ {Name : "REPO_LINK" , Value : generateRepo .Link (), Transformers : nil },
55
+ {Name : "TEMPLATE_LINK" , Value : templateRepo .Link (), Transformers : nil },
56
+ {Name : "REPO_HTTPS_URL" , Value : generateRepo .CloneLink ().HTTPS , Transformers : nil },
57
+ {Name : "TEMPLATE_HTTPS_URL" , Value : templateRepo .CloneLink ().HTTPS , Transformers : nil },
58
+ {Name : "REPO_SSH_URL" , Value : generateRepo .CloneLink ().SSH , Transformers : nil },
59
+ {Name : "TEMPLATE_SSH_URL" , Value : templateRepo .CloneLink ().SSH , Transformers : nil },
60
+ }
61
+
62
+ var expansionMap = make (map [string ]string )
63
+ for _ , e := range expansions {
64
+ expansionMap [e .Name ] = e .Value
65
+ for _ , tr := range e .Transformers {
66
+ expansionMap [fmt .Sprintf ("%s_%s" , e .Name , tr .Name )] = tr .Transform (e .Value )
67
+ }
68
+ }
69
+
22
70
return os .Expand (src , func (key string ) string {
23
- switch key {
24
- case "REPO_NAME" :
25
- return generateRepo .Name
26
- case "TEMPLATE_NAME" :
27
- return templateRepo .Name
28
- case "REPO_DESCRIPTION" :
29
- return generateRepo .Description
30
- case "TEMPLATE_DESCRIPTION" :
31
- return templateRepo .Description
32
- case "REPO_OWNER" :
33
- return generateRepo .OwnerName
34
- case "TEMPLATE_OWNER" :
35
- return templateRepo .OwnerName
36
- case "REPO_LINK" :
37
- return generateRepo .Link ()
38
- case "TEMPLATE_LINK" :
39
- return templateRepo .Link ()
40
- case "REPO_HTTPS_URL" :
41
- return generateRepo .CloneLink ().HTTPS
42
- case "TEMPLATE_HTTPS_URL" :
43
- return templateRepo .CloneLink ().HTTPS
44
- case "REPO_SSH_URL" :
45
- return generateRepo .CloneLink ().SSH
46
- case "TEMPLATE_SSH_URL" :
47
- return templateRepo .CloneLink ().SSH
48
- default :
49
- return key
71
+ if expansion , ok := expansionMap [key ]; ok {
72
+ return expansion
50
73
}
74
+ return key
51
75
})
52
76
}
53
77
@@ -104,41 +128,43 @@ func generateRepoCommit(repo, templateRepo, generateRepo *models.Repository, tmp
104
128
return fmt .Errorf ("checkGiteaTemplate: %v" , err )
105
129
}
106
130
107
- if err := os .Remove (gt .Path ); err != nil {
108
- return fmt .Errorf ("remove .giteatemplate: %v" , err )
109
- }
110
-
111
- // Avoid walking tree if there are no globs
112
- if len (gt .Globs ()) > 0 {
113
- tmpDirSlash := strings .TrimSuffix (filepath .ToSlash (tmpDir ), "/" ) + "/"
114
- if err := filepath .Walk (tmpDirSlash , func (path string , info os.FileInfo , walkErr error ) error {
115
- if walkErr != nil {
116
- return walkErr
117
- }
131
+ if gt != nil {
132
+ if err := os .Remove (gt .Path ); err != nil {
133
+ return fmt .Errorf ("remove .giteatemplate: %v" , err )
134
+ }
118
135
119
- if info .IsDir () {
120
- return nil
121
- }
136
+ // Avoid walking tree if there are no globs
137
+ if len (gt .Globs ()) > 0 {
138
+ tmpDirSlash := strings .TrimSuffix (filepath .ToSlash (tmpDir ), "/" ) + "/"
139
+ if err := filepath .Walk (tmpDirSlash , func (path string , info os.FileInfo , walkErr error ) error {
140
+ if walkErr != nil {
141
+ return walkErr
142
+ }
122
143
123
- base := strings .TrimPrefix (filepath .ToSlash (path ), tmpDirSlash )
124
- for _ , g := range gt .Globs () {
125
- if g .Match (base ) {
126
- content , err := ioutil .ReadFile (path )
127
- if err != nil {
128
- return err
129
- }
144
+ if info .IsDir () {
145
+ return nil
146
+ }
130
147
131
- if err := ioutil .WriteFile (path ,
132
- []byte (generateExpansion (string (content ), templateRepo , generateRepo )),
133
- 0644 ); err != nil {
134
- return err
148
+ base := strings .TrimPrefix (filepath .ToSlash (path ), tmpDirSlash )
149
+ for _ , g := range gt .Globs () {
150
+ if g .Match (base ) {
151
+ content , err := ioutil .ReadFile (path )
152
+ if err != nil {
153
+ return err
154
+ }
155
+
156
+ if err := ioutil .WriteFile (path ,
157
+ []byte (generateExpansion (string (content ), templateRepo , generateRepo )),
158
+ 0644 ); err != nil {
159
+ return err
160
+ }
161
+ break
135
162
}
136
- break
137
163
}
164
+ return nil
165
+ }); err != nil {
166
+ return err
138
167
}
139
- return nil
140
- }); err != nil {
141
- return err
142
168
}
143
169
}
144
170
0 commit comments