diff options
author | John Olheiser <42128690+jolheiser@users.noreply.github.com> | 2019-09-08 03:28:40 -0500 |
---|---|---|
committer | Lauris BH <lauris.buksis@zzdats.lv> | 2019-09-08 11:28:40 +0300 |
commit | 0118b6aaf8ada3edd67cb975c776f6f124178ad2 (patch) | |
tree | 8e96203d74de6c4bc7f8eb2a5751a8d218f3ffd3 /models | |
parent | d4e11ebb18df4bd01f509f673d536e093edb124a (diff) | |
download | gitea-0118b6aaf8ada3edd67cb975c776f6f124178ad2.tar.gz gitea-0118b6aaf8ada3edd67cb975c776f6f124178ad2.zip |
Add option to initialize repository with labels (#6061)
* Add optional label sets on repo creation
* Fix CRLF
* Instead of hardcoding default, make it the helper
* Move label set init out of repo init
Add a new error for the router
Combine router label init with repo creation label init
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Add issue labels to Swagger for repo creation
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Update models/issue_label.go
Co-Authored-By: Lauris BH <lauris@nix.lv>
* Update models/issue_label.go
Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com>
Diffstat (limited to 'models')
-rw-r--r-- | models/error.go | 16 | ||||
-rw-r--r-- | models/issue_label.go | 28 | ||||
-rw-r--r-- | models/repo.go | 8 |
3 files changed, 52 insertions, 0 deletions
diff --git a/models/error.go b/models/error.go index 11ca6e6863..cecd03f993 100644 --- a/models/error.go +++ b/models/error.go @@ -1058,6 +1058,22 @@ func (err ErrIssueNotExist) Error() string { return fmt.Sprintf("issue does not exist [id: %d, repo_id: %d, index: %d]", err.ID, err.RepoID, err.Index) } +// ErrIssueLabelTemplateLoad represents a "ErrIssueLabelTemplateLoad" kind of error. +type ErrIssueLabelTemplateLoad struct { + TemplateFile string + OriginalError error +} + +// IsErrIssueLabelTemplateLoad checks if an error is a ErrIssueLabelTemplateLoad. +func IsErrIssueLabelTemplateLoad(err error) bool { + _, ok := err.(ErrIssueLabelTemplateLoad) + return ok +} + +func (err ErrIssueLabelTemplateLoad) Error() string { + return fmt.Sprintf("Failed to load label template file '%s': %v", err.TemplateFile, err.OriginalError) +} + // __________ .__ .__ __________ __ // \______ \__ __| | | |\______ \ ____ ________ __ ____ _______/ |_ // | ___/ | \ | | | | _// __ \/ ____/ | \_/ __ \ / ___/\ __\ diff --git a/models/issue_label.go b/models/issue_label.go index 686897f63c..f378f62e65 100644 --- a/models/issue_label.go +++ b/models/issue_label.go @@ -127,6 +127,34 @@ func (label *Label) ForegroundColor() template.CSS { return template.CSS("#000") } +func initalizeLabels(e Engine, repoID int64, labelTemplate string) error { + list, err := GetLabelTemplateFile(labelTemplate) + if err != nil { + return ErrIssueLabelTemplateLoad{labelTemplate, err} + } + + labels := make([]*Label, len(list)) + for i := 0; i < len(list); i++ { + labels[i] = &Label{ + RepoID: repoID, + Name: list[i][0], + Description: list[i][2], + Color: list[i][1], + } + } + for _, label := range labels { + if err = newLabel(e, label); err != nil { + return err + } + } + return nil +} + +// InitalizeLabels adds a label set to a repository using a template +func InitalizeLabels(repoID int64, labelTemplate string) error { + return initalizeLabels(x, repoID, labelTemplate) +} + func newLabel(e Engine, label *Label) error { _, err := e.Insert(label) return err diff --git a/models/repo.go b/models/repo.go index 507521357e..3e593ce4ed 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1098,6 +1098,7 @@ type CreateRepoOptions struct { Description string OriginalURL string Gitignores string + IssueLabels string License string Readme string IsPrivate bool @@ -1394,6 +1395,13 @@ func CreateRepository(doer, u *User, opts CreateRepoOptions) (_ *Repository, err return nil, fmt.Errorf("initRepository: %v", err) } + // Initialize Issue Labels if selected + if len(opts.IssueLabels) > 0 { + if err = initalizeLabels(sess, repo.ID, opts.IssueLabels); err != nil { + return nil, fmt.Errorf("initalizeLabels: %v", err) + } + } + _, stderr, err := process.GetManager().ExecDir(-1, repoPath, fmt.Sprintf("CreateRepository(git update-server-info): %s", repoPath), git.GitExecutable, "update-server-info") |