mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	#3459 code quality improvement
This commit is contained in:
		| @@ -3,7 +3,7 @@ Gogs - Go Git Service [ |  | ||||||
|  |  | ||||||
| ##### Current tip version: 0.9.93 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | ##### Current tip version: 0.9.94 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | ||||||
|  |  | ||||||
| | Web | UI  | Preview  | | | Web | UI  | Preview  | | ||||||
| |:-------------:|:-------:|:-------:| | |:-------------:|:-------:|:-------:| | ||||||
|   | |||||||
| @@ -489,10 +489,11 @@ issues.create = Create Issue | |||||||
| issues.new_label = New Label | issues.new_label = New Label | ||||||
| issues.new_label_placeholder = Label name... | issues.new_label_placeholder = Label name... | ||||||
| issues.create_label = Create Label | issues.create_label = Create Label | ||||||
| issues.label_templates.title=Load a set of labels | issues.label_templates.title = Load a predefined set of labels | ||||||
| issues.label_templates.info=There aren’t any labels. You can click on the "New Label" button above to create one or use a predefined set below. | issues.label_templates.info = There aren’t any labels yet. You can click on the "New Label" button above to create one or use a predefined set below. | ||||||
| issues.label_templates.helper=Select a label set | issues.label_templates.helper = Select a label set | ||||||
| issues.label_templates.use=Use this label set | issues.label_templates.use = Use this label set | ||||||
|  | issues.label_templates.fail_to_load_file = Failed to load label template file '%s': %v | ||||||
| issues.open_tab = %d Open | issues.open_tab = %d Open | ||||||
| issues.close_tab = %d Closed | issues.close_tab = %d Closed | ||||||
| issues.filter_label = Label | issues.filter_label = Label | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							| @@ -17,7 +17,7 @@ import ( | |||||||
| 	"github.com/gogits/gogs/modules/setting" | 	"github.com/gogits/gogs/modules/setting" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const APP_VER = "0.9.93.0829" | const APP_VER = "0.9.94.0829" | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
| 	runtime.GOMAXPROCS(runtime.NumCPU()) | 	runtime.GOMAXPROCS(runtime.NumCPU()) | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ package models | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"html/template" | 	"html/template" | ||||||
|  | 	"regexp" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
|  |  | ||||||
| @@ -17,6 +18,40 @@ import ( | |||||||
| 	"github.com/gogits/gogs/modules/base" | 	"github.com/gogits/gogs/modules/base" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | var labelColorPattern = regexp.MustCompile("#([a-fA-F0-9]{6})") | ||||||
|  |  | ||||||
|  | // GetLabelTemplateFile loads the label template file by given name, | ||||||
|  | // then parses and returns a list of name-color pairs. | ||||||
|  | func GetLabelTemplateFile(name string) ([][2]string, error) { | ||||||
|  | 	data, err := getRepoInitFile("label", name) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, fmt.Errorf("getRepoInitFile: %v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	lines := strings.Split(string(data), "\n") | ||||||
|  | 	list := make([][2]string, 0, len(lines)) | ||||||
|  | 	for i := 0; i < len(lines); i++ { | ||||||
|  | 		line := strings.TrimSpace(lines[i]) | ||||||
|  | 		if len(line) == 0 { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		fields := strings.SplitN(line, " ", 2) | ||||||
|  | 		if len(fields) != 2 { | ||||||
|  | 			return nil, fmt.Errorf("line is malformed: %s", line) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if !labelColorPattern.MatchString(fields[0]) { | ||||||
|  | 			return nil, fmt.Errorf("bad HTML color code in line: %s", line) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		fields[1] = strings.TrimSpace(fields[1]) | ||||||
|  | 		list = append(list, [2]string{fields[1], fields[0]}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return list, nil | ||||||
|  | } | ||||||
|  |  | ||||||
| // Label represents a label of repository for issues. | // Label represents a label of repository for issues. | ||||||
| type Label struct { | type Label struct { | ||||||
| 	ID              int64 `xorm:"pk autoincr"` | 	ID              int64 `xorm:"pk autoincr"` | ||||||
| @@ -62,9 +97,9 @@ func (l *Label) ForegroundColor() template.CSS { | |||||||
| 	return template.CSS("#000") | 	return template.CSS("#000") | ||||||
| } | } | ||||||
|  |  | ||||||
| // NewLabel creates new label of repository. | // NewLabels creates new label(s) for a repository. | ||||||
| func NewLabel(l *Label) error { | func NewLabels(labels ...*Label) error { | ||||||
| 	_, err := x.Insert(l) | 	_, err := x.Insert(labels) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -220,8 +220,6 @@ func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) bi | |||||||
| 	return validate(errs, ctx.Data, f, ctx.Locale) | 	return validate(errs, ctx.Data, f, ctx.Locale) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Label templates |  | ||||||
|  |  | ||||||
| type InitializeLabelsForm struct { | type InitializeLabelsForm struct { | ||||||
| 	TemplateName string `binding:"Required"` | 	TemplateName string `binding:"Required"` | ||||||
| } | } | ||||||
|   | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -50,7 +50,7 @@ func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { | |||||||
| 		Color:  form.Color, | 		Color:  form.Color, | ||||||
| 		RepoID: ctx.Repo.Repository.ID, | 		RepoID: ctx.Repo.Repository.ID, | ||||||
| 	} | 	} | ||||||
| 	if err := models.NewLabel(label); err != nil { | 	if err := models.NewLabels(label); err != nil { | ||||||
| 		ctx.Error(500, "NewLabel", err) | 		ctx.Error(500, "NewLabel", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -11,8 +11,6 @@ import ( | |||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"path" |  | ||||||
| 	"regexp" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @@ -22,7 +20,6 @@ import ( | |||||||
| 	"github.com/gogits/gogs/models" | 	"github.com/gogits/gogs/models" | ||||||
| 	"github.com/gogits/gogs/modules/auth" | 	"github.com/gogits/gogs/modules/auth" | ||||||
| 	"github.com/gogits/gogs/modules/base" | 	"github.com/gogits/gogs/modules/base" | ||||||
| 	"github.com/gogits/gogs/modules/bindata" |  | ||||||
| 	"github.com/gogits/gogs/modules/context" | 	"github.com/gogits/gogs/modules/context" | ||||||
| 	"github.com/gogits/gogs/modules/log" | 	"github.com/gogits/gogs/modules/log" | ||||||
| 	"github.com/gogits/gogs/modules/markdown" | 	"github.com/gogits/gogs/modules/markdown" | ||||||
| @@ -945,51 +942,30 @@ func Labels(ctx *context.Context) { | |||||||
| 	ctx.HTML(200, LABELS) | 	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) { | func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { | ||||||
| 	if ctx.HasError() { | 	if ctx.HasError() { | ||||||
| 		ctx.Flash.Error(ctx.Data["ErrorMsg"].(string)) |  | ||||||
| 		ctx.Redirect(ctx.Repo.RepoLink + "/labels") | 		ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	data, err := getLabelTemplateFile(form.TemplateName) | 	list, err := models.GetLabelTemplateFile(form.TemplateName) | ||||||
| 	if err != nil { | 	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") | 		ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	r, _ := regexp.Compile("#([a-fA-F0-9]{6})") |  | ||||||
| 	for i, line := range strings.Split(string(data), "\n") { | 	labels := make([]*models.Label, len(list)) | ||||||
| 		if len(line) > 0 { | 	for i := 0; i < len(list); i++ { | ||||||
| 			line_x := strings.SplitN(strings.Trim(line, " \t"), " ", 2) | 		labels[i] = &models.Label{ | ||||||
| 			if len(line_x) == 2 && len(line_x[1]) > 0 { | 			RepoID: ctx.Repo.Repository.ID, | ||||||
| 				if r.MatchString(line_x[0]) { | 			Name:   list[i][0], | ||||||
| 					l := &models.Label{ | 			Color:  list[i][1], | ||||||
| 						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) |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if err := models.NewLabels(labels...); err != nil { | ||||||
|  | 		ctx.Handle(500, "NewLabels", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
| 	ctx.Redirect(ctx.Repo.RepoLink + "/labels") | 	ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1008,7 +984,7 @@ func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||||||
| 		Name:   form.Title, | 		Name:   form.Title, | ||||||
| 		Color:  form.Color, | 		Color:  form.Color, | ||||||
| 	} | 	} | ||||||
| 	if err := models.NewLabel(l); err != nil { | 	if err := models.NewLabels(l); err != nil { | ||||||
| 		ctx.Handle(500, "NewLabel", err) | 		ctx.Handle(500, "NewLabel", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| 0.9.93.0829 | 0.9.94.0829 | ||||||
| @@ -36,15 +36,15 @@ | |||||||
|  |  | ||||||
| 		{{template "base/alert" .}} | 		{{template "base/alert" .}} | ||||||
| 		<div class="ui black label">{{.i18n.Tr "repo.issues.label_count" .NumLabels}}</div> | 		<div class="ui black label">{{.i18n.Tr "repo.issues.label_count" .NumLabels}}</div> | ||||||
| 		{{if $.IsRepositoryWriter}} | 		<div class="label list"> | ||||||
| 			{{if eq .NumLabels 0}} | 			{{if and $.IsRepositoryWriter (eq .NumLabels 0)}} | ||||||
| 				<div class="ui centered grid"> | 				<div class="ui centered grid"> | ||||||
| 					<div class="twelve wide column eight wide computer column"> | 					<div class="twelve wide column eight wide computer column"> | ||||||
| 						<div class="ui attached left aligned segment" style="margin-top:30px"> | 						<div class="ui attached left aligned segment"> | ||||||
| 							<h4 class="ui header"> | 							<h4 class="ui header"> | ||||||
| 								{{.i18n.Tr "repo.issues.label_templates.title"}} | 								{{.i18n.Tr "repo.issues.label_templates.title"}} | ||||||
| 								<a target="_blank" | 								<a target="_blank" | ||||||
| 								   href="https://github.com/gogits/go-gogs-client/wiki/Repositories#litte-notes-on-label-template"> | 								   href="https://discuss.gogs.io/t/how-to-use-predefined-label-templates/599"> | ||||||
| 									<span class="octicon octicon-question"></span> | 									<span class="octicon octicon-question"></span> | ||||||
| 								</a> | 								</a> | ||||||
| 							</h4> | 							</h4> | ||||||
| @@ -54,7 +54,7 @@ | |||||||
| 								{{.CsrfTokenHtml}} | 								{{.CsrfTokenHtml}} | ||||||
| 								<div class="field"> | 								<div class="field"> | ||||||
| 									<div class="ui selection dropdown"> | 									<div class="ui selection dropdown"> | ||||||
| 										<input type="hidden" name="template_name" id="templatename" value="Default"> | 										<input type="hidden" name="template_name" value="Default"> | ||||||
| 										<div class="default text">{{.i18n.Tr "repo.issues.label_templates.helper"}}</div> | 										<div class="default text">{{.i18n.Tr "repo.issues.label_templates.helper"}}</div> | ||||||
| 										<div class="menu"> | 										<div class="menu"> | ||||||
| 											{{range .LabelTemplates}} | 											{{range .LabelTemplates}} | ||||||
| @@ -69,9 +69,7 @@ | |||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 			{{end}} | 			{{end}} | ||||||
| 		{{end}} |  | ||||||
|  |  | ||||||
| 		<div class="label list"> |  | ||||||
| 			{{range .Labels}} | 			{{range .Labels}} | ||||||
| 				<li class="item"> | 				<li class="item"> | ||||||
| 					<div class="ui label" style="color: {{.ForegroundColor}}; background-color: {{.Color}}"><i class="octicon octicon-tag"></i> {{.Name}}</div> | 					<div class="ui label" style="color: {{.ForegroundColor}}; background-color: {{.Color}}"><i class="octicon octicon-tag"></i> {{.Name}}</div> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user