Skip to content

Commit 5f19f54

Browse files
committed
Ensure that label filename extensions are removed when setting up repo options
The previous code did not remove the .yaml/.yml extension from label files within the customPath. This would lead to duplicate lists of labels. Fix go-gitea#23715 Close go-gitea#23717 Signed-off-by: Andrew Thornton <[email protected]>
1 parent 22fec16 commit 5f19f54

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

modules/label/parser.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func (err ErrTemplateLoad) Error() string {
3636
// GetTemplateFile loads the label template file by given name,
3737
// then parses and returns a list of name-color pairs and optionally description.
3838
func GetTemplateFile(name string) ([]*Label, error) {
39+
// Always check if <name>.yaml or <name>.yml exists and prefer those
3940
data, err := options.Labels(name + ".yaml")
4041
if err == nil && len(data) > 0 {
4142
return parseYamlFormat(name+".yaml", data)

modules/repository/init.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,26 @@ var (
4545
func LoadRepoConfig() {
4646
// Load .gitignore and license files and readme templates.
4747
types := []string{"gitignore", "license", "readme", "label"}
48-
typeFiles := make([][]string, 4)
48+
49+
removeExtension := func(f string) string {
50+
ext := strings.ToLower(filepath.Ext(f))
51+
if ext == ".yaml" || ext == ".yml" {
52+
return f[:len(f)-len(ext)]
53+
}
54+
return f
55+
}
56+
57+
labelTemplatesFiles := []string{}
58+
typeFiles := []*[]string{&Gitignores, &Licenses, &Readmes, &labelTemplatesFiles}
59+
4960
for i, t := range types {
5061
files, err := options.Dir(t)
5162
if err != nil {
5263
log.Fatal("Failed to get %s files: %v", t, err)
5364
}
5465
if t == "label" {
5566
for i, f := range files {
56-
ext := strings.ToLower(filepath.Ext(f))
57-
if ext == ".yaml" || ext == ".yml" {
58-
files[i] = f[:len(f)-len(ext)]
59-
}
67+
files[i] = removeExtension(f)
6068
}
6169
}
6270
customPath := path.Join(setting.CustomPath, "options", t)
@@ -71,26 +79,22 @@ func LoadRepoConfig() {
7179
}
7280

7381
for _, f := range customFiles {
82+
if t == "label" {
83+
f = removeExtension(f)
84+
}
85+
7486
if !util.SliceContainsString(files, f, true) {
7587
files = append(files, f)
7688
}
7789
}
7890
}
79-
typeFiles[i] = files
91+
sort.Strings(files)
92+
*typeFiles[i] = files
8093
}
8194

82-
Gitignores = typeFiles[0]
83-
Licenses = typeFiles[1]
84-
Readmes = typeFiles[2]
85-
LabelTemplatesFiles := typeFiles[3]
86-
sort.Strings(Gitignores)
87-
sort.Strings(Licenses)
88-
sort.Strings(Readmes)
89-
sort.Strings(LabelTemplatesFiles)
90-
9195
// Load label templates
9296
LabelTemplates = make(map[string]string)
93-
for _, templateFile := range LabelTemplatesFiles {
97+
for _, templateFile := range labelTemplatesFiles {
9498
labels, err := label.LoadFormatted(templateFile)
9599
if err != nil {
96100
log.Error("Failed to load labels: %v", err)

0 commit comments

Comments
 (0)