summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorJohn Olheiser <42128690+jolheiser@users.noreply.github.com>2019-09-08 03:28:40 -0500
committerLauris BH <lauris.buksis@zzdats.lv>2019-09-08 11:28:40 +0300
commit0118b6aaf8ada3edd67cb975c776f6f124178ad2 (patch)
tree8e96203d74de6c4bc7f8eb2a5751a8d218f3ffd3 /models
parentd4e11ebb18df4bd01f509f673d536e093edb124a (diff)
downloadgitea-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.go16
-rw-r--r--models/issue_label.go28
-rw-r--r--models/repo.go8
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")