Skip to content

Commit

Permalink
Ensure that label filename extensions are removed when setting up rep…
Browse files Browse the repository at this point in the history
…o 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 <art27@cantab.net>
  • Loading branch information
zeripath committed Mar 27, 2023
1 parent 22fec16 commit 5f19f54
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 16 deletions.
1 change: 1 addition & 0 deletions modules/label/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ func (err ErrTemplateLoad) Error() string {
// GetTemplateFile loads the label template file by given name,
// then parses and returns a list of name-color pairs and optionally description.
func GetTemplateFile(name string) ([]*Label, error) {
// Always check if <name>.yaml or <name>.yml exists and prefer those
data, err := options.Labels(name + ".yaml")
if err == nil && len(data) > 0 {
return parseYamlFormat(name+".yaml", data)
Expand Down
36 changes: 20 additions & 16 deletions modules/repository/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,18 +45,26 @@ var (
func LoadRepoConfig() {
// Load .gitignore and license files and readme templates.
types := []string{"gitignore", "license", "readme", "label"}
typeFiles := make([][]string, 4)

removeExtension := func(f string) string {
ext := strings.ToLower(filepath.Ext(f))
if ext == ".yaml" || ext == ".yml" {
return f[:len(f)-len(ext)]
}
return f
}

labelTemplatesFiles := []string{}
typeFiles := []*[]string{&Gitignores, &Licenses, &Readmes, &labelTemplatesFiles}

for i, t := range types {
files, err := options.Dir(t)
if err != nil {
log.Fatal("Failed to get %s files: %v", t, err)
}
if t == "label" {
for i, f := range files {
ext := strings.ToLower(filepath.Ext(f))
if ext == ".yaml" || ext == ".yml" {
files[i] = f[:len(f)-len(ext)]
}
files[i] = removeExtension(f)
}
}
customPath := path.Join(setting.CustomPath, "options", t)
Expand All @@ -71,26 +79,22 @@ func LoadRepoConfig() {
}

for _, f := range customFiles {
if t == "label" {
f = removeExtension(f)
}

if !util.SliceContainsString(files, f, true) {
files = append(files, f)
}
}
}
typeFiles[i] = files
sort.Strings(files)
*typeFiles[i] = files
}

Gitignores = typeFiles[0]
Licenses = typeFiles[1]
Readmes = typeFiles[2]
LabelTemplatesFiles := typeFiles[3]
sort.Strings(Gitignores)
sort.Strings(Licenses)
sort.Strings(Readmes)
sort.Strings(LabelTemplatesFiles)

// Load label templates
LabelTemplates = make(map[string]string)
for _, templateFile := range LabelTemplatesFiles {
for _, templateFile := range labelTemplatesFiles {
labels, err := label.LoadFormatted(templateFile)
if err != nil {
log.Error("Failed to load labels: %v", err)
Expand Down

0 comments on commit 5f19f54

Please sign in to comment.