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>
This commit is contained in:
parent
d4e11ebb18
commit
0118b6aaf8
11 changed files with 87 additions and 16 deletions
|
@ -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)
|
||||
}
|
||||
|
||||
// __________ .__ .__ __________ __
|
||||
// \______ \__ __| | | |\______ \ ____ ________ __ ____ _______/ |_
|
||||
// | ___/ | \ | | | | _// __ \/ ____/ | \_/ __ \ / ___/\ __\
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue