|  | @@ -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
 | 
	
		
			
				|  |  |  	}
 |