|
|
|
@ -11,8 +11,6 @@ import ( |
|
|
|
|
"io/ioutil" |
|
|
|
|
"net/http" |
|
|
|
|
"net/url" |
|
|
|
|
"path" |
|
|
|
|
"regexp" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
@ -22,7 +20,6 @@ import ( |
|
|
|
|
"github.com/gogits/gogs/models" |
|
|
|
|
"github.com/gogits/gogs/modules/auth" |
|
|
|
|
"github.com/gogits/gogs/modules/base" |
|
|
|
|
"github.com/gogits/gogs/modules/bindata" |
|
|
|
|
"github.com/gogits/gogs/modules/context" |
|
|
|
|
"github.com/gogits/gogs/modules/log" |
|
|
|
|
"github.com/gogits/gogs/modules/markdown" |
|
|
|
@ -945,51 +942,30 @@ func Labels(ctx *context.Context) { |
|
|
|
|
ctx.HTML(200, LABELS) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func getLabelTemplateFile(name string) ([]byte, error) { |
|
|
|
|
relPath := path.Join("conf/label", strings.TrimLeft(name, "./")) |
|
|
|
|
|
|
|
|
|
// Use custom file when available.
|
|
|
|
|
customPath := path.Join(setting.CustomPath, relPath) |
|
|
|
|
if com.IsFile(customPath) { |
|
|
|
|
return ioutil.ReadFile(customPath) |
|
|
|
|
} |
|
|
|
|
return bindata.Asset(relPath) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { |
|
|
|
|
if ctx.HasError() { |
|
|
|
|
ctx.Flash.Error(ctx.Data["ErrorMsg"].(string)) |
|
|
|
|
ctx.Redirect(ctx.Repo.RepoLink + "/labels") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
data, err := getLabelTemplateFile(form.TemplateName) |
|
|
|
|
list, err := models.GetLabelTemplateFile(form.TemplateName) |
|
|
|
|
if err != nil { |
|
|
|
|
ctx.Flash.Error(ctx.Tr("repo.issues.label_templates.fail_to_load_file", form.TemplateName, err)) |
|
|
|
|
ctx.Redirect(ctx.Repo.RepoLink + "/labels") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
r, _ := regexp.Compile("#([a-fA-F0-9]{6})") |
|
|
|
|
for i, line := range strings.Split(string(data), "\n") { |
|
|
|
|
if len(line) > 0 { |
|
|
|
|
line_x := strings.SplitN(strings.Trim(line, " \t"), " ", 2) |
|
|
|
|
if len(line_x) == 2 && len(line_x[1]) > 0 { |
|
|
|
|
if r.MatchString(line_x[0]) { |
|
|
|
|
l := &models.Label{ |
|
|
|
|
RepoID: ctx.Repo.Repository.ID, |
|
|
|
|
Name: line_x[1], |
|
|
|
|
Color: line_x[0], |
|
|
|
|
} |
|
|
|
|
if err := models.NewLabel(l); err != nil { |
|
|
|
|
ctx.Handle(500, "InitializeLabelsFromTemplate", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log.Warn("Line %d on the label template file '%s': Bad HTML color code", i+1, form.TemplateName) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log.Warn("Line %d on the label template file '%s': Line is malformed", i+1, form.TemplateName) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
labels := make([]*models.Label, len(list)) |
|
|
|
|
for i := 0; i < len(list); i++ { |
|
|
|
|
labels[i] = &models.Label{ |
|
|
|
|
RepoID: ctx.Repo.Repository.ID, |
|
|
|
|
Name: list[i][0], |
|
|
|
|
Color: list[i][1], |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if err := models.NewLabels(labels...); err != nil { |
|
|
|
|
ctx.Handle(500, "NewLabels", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
ctx.Redirect(ctx.Repo.RepoLink + "/labels") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1008,7 +984,7 @@ func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { |
|
|
|
|
Name: form.Title, |
|
|
|
|
Color: form.Color, |
|
|
|
|
} |
|
|
|
|
if err := models.NewLabel(l); err != nil { |
|
|
|
|
if err := models.NewLabels(l); err != nil { |
|
|
|
|
ctx.Handle(500, "NewLabel", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|