Skip to content

Commit cf20ebc

Browse files
authored
Check if label template exist first (#14384) (#14389)
1 parent 5ee09d3 commit cf20ebc

File tree

5 files changed

+38
-31
lines changed

5 files changed

+38
-31
lines changed

models/issue_label.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ type Label struct {
4747
func GetLabelTemplateFile(name string) ([][3]string, error) {
4848
data, err := GetRepoInitFile("label", name)
4949
if err != nil {
50-
return nil, fmt.Errorf("GetRepoInitFile: %v", err)
50+
return nil, ErrIssueLabelTemplateLoad{name, fmt.Errorf("GetRepoInitFile: %v", err)}
5151
}
5252

5353
lines := strings.Split(string(data), "\n")
@@ -62,15 +62,15 @@ func GetLabelTemplateFile(name string) ([][3]string, error) {
6262

6363
fields := strings.SplitN(parts[0], " ", 2)
6464
if len(fields) != 2 {
65-
return nil, fmt.Errorf("line is malformed: %s", line)
65+
return nil, ErrIssueLabelTemplateLoad{name, fmt.Errorf("line is malformed: %s", line)}
6666
}
6767

6868
color := strings.Trim(fields[0], " ")
6969
if len(color) == 6 {
7070
color = "#" + color
7171
}
7272
if !LabelColorPattern.MatchString(color) {
73-
return nil, fmt.Errorf("bad HTML color code in line: %s", line)
73+
return nil, ErrIssueLabelTemplateLoad{name, fmt.Errorf("bad HTML color code in line: %s", line)}
7474
}
7575

7676
var description string
@@ -167,7 +167,7 @@ func (label *Label) ForegroundColor() template.CSS {
167167
func loadLabels(labelTemplate string) ([]string, error) {
168168
list, err := GetLabelTemplateFile(labelTemplate)
169169
if err != nil {
170-
return nil, ErrIssueLabelTemplateLoad{labelTemplate, err}
170+
return nil, err
171171
}
172172

173173
labels := make([]string, len(list))
@@ -186,7 +186,7 @@ func LoadLabelsFormatted(labelTemplate string) (string, error) {
186186
func initializeLabels(e Engine, id int64, labelTemplate string, isOrg bool) error {
187187
list, err := GetLabelTemplateFile(labelTemplate)
188188
if err != nil {
189-
return ErrIssueLabelTemplateLoad{labelTemplate, err}
189+
return err
190190
}
191191

192192
labels := make([]*Label, len(list))

models/repo.go

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1600,26 +1600,27 @@ func UpdateRepositoryUnits(repo *Repository, units []RepoUnit, deleteUnitTypes [
16001600
}
16011601

16021602
// DeleteRepository deletes a repository for a user or organization.
1603+
// make sure if you call this func to close open sessions (sqlite will otherwise get a deadlock)
16031604
func DeleteRepository(doer *User, uid, repoID int64) error {
1605+
sess := x.NewSession()
1606+
defer sess.Close()
1607+
if err := sess.Begin(); err != nil {
1608+
return err
1609+
}
1610+
16041611
// In case is a organization.
1605-
org, err := GetUserByID(uid)
1612+
org, err := getUserByID(sess, uid)
16061613
if err != nil {
16071614
return err
16081615
}
16091616
if org.IsOrganization() {
1610-
if err = org.GetTeams(&SearchTeamOptions{}); err != nil {
1617+
if err = org.getTeams(sess); err != nil {
16111618
return err
16121619
}
16131620
}
16141621

1615-
sess := x.NewSession()
1616-
defer sess.Close()
1617-
if err = sess.Begin(); err != nil {
1618-
return err
1619-
}
1620-
1621-
repo := &Repository{ID: repoID, OwnerID: uid}
1622-
has, err := sess.Get(repo)
1622+
repo := &Repository{OwnerID: uid}
1623+
has, err := sess.ID(repoID).Get(repo)
16231624
if err != nil {
16241625
return err
16251626
} else if !has {
@@ -1768,14 +1769,7 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
17681769
}
17691770

17701771
if err = sess.Commit(); err != nil {
1771-
sess.Close()
1772-
if len(deployKeys) > 0 {
1773-
// We need to rewrite the public keys because the commit failed
1774-
if err2 := RewriteAllPublicKeys(); err2 != nil {
1775-
return fmt.Errorf("Commit: %v SSH Keys: %v", err, err2)
1776-
}
1777-
}
1778-
return fmt.Errorf("Commit: %v", err)
1772+
return err
17791773
}
17801774

17811775
sess.Close()

modules/repository/create.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod
2929
opts.DefaultBranch = setting.Repository.DefaultBranch
3030
}
3131

32+
// Check if label template exist
33+
if len(opts.IssueLabels) > 0 {
34+
if _, err := models.GetLabelTemplateFile(opts.IssueLabels); err != nil {
35+
return nil, err
36+
}
37+
}
38+
3239
repo := &models.Repository{
3340
OwnerID: u.ID,
3441
Owner: u,
@@ -47,6 +54,8 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod
4754
TrustModel: opts.TrustModel,
4855
}
4956

57+
var rollbackRepo *models.Repository
58+
5059
if err := models.WithTx(func(ctx models.DBContext) error {
5160
if err := models.CreateRepository(ctx, doer, u, repo, false); err != nil {
5261
return err
@@ -85,9 +94,8 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod
8594
// Initialize Issue Labels if selected
8695
if len(opts.IssueLabels) > 0 {
8796
if err := models.InitializeLabels(ctx, repo.ID, opts.IssueLabels, false); err != nil {
88-
if errDelete := models.DeleteRepository(doer, u.ID, repo.ID); errDelete != nil {
89-
log.Error("Rollback deleteRepository: %v", errDelete)
90-
}
97+
rollbackRepo = repo
98+
rollbackRepo.OwnerID = u.ID
9199
return fmt.Errorf("InitializeLabels: %v", err)
92100
}
93101
}
@@ -96,13 +104,18 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod
96104
SetDescription(fmt.Sprintf("CreateRepository(git update-server-info): %s", repoPath)).
97105
RunInDir(repoPath); err != nil {
98106
log.Error("CreateRepository(git update-server-info) in %v: Stdout: %s\nError: %v", repo, stdout, err)
99-
if errDelete := models.DeleteRepository(doer, u.ID, repo.ID); errDelete != nil {
100-
log.Error("Rollback deleteRepository: %v", errDelete)
101-
}
107+
rollbackRepo = repo
108+
rollbackRepo.OwnerID = u.ID
102109
return fmt.Errorf("CreateRepository(git update-server-info): %v", err)
103110
}
104111
return nil
105112
}); err != nil {
113+
if rollbackRepo != nil {
114+
if errDelete := models.DeleteRepository(doer, rollbackRepo.OwnerID, rollbackRepo.ID); errDelete != nil {
115+
log.Error("Rollback deleteRepository: %v", errDelete)
116+
}
117+
}
118+
106119
return nil, err
107120
}
108121

modules/structs/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ type CreateRepoOption struct {
105105
Description string `json:"description" binding:"MaxSize(255)"`
106106
// Whether the repository is private
107107
Private bool `json:"private"`
108-
// Issue Label set to use
108+
// Label-Set to use
109109
IssueLabels string `json:"issue_labels"`
110110
// Whether the repository should be auto-intialized?
111111
AutoInit bool `json:"auto_init"`

templates/swagger/v1_json.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12215,7 +12215,7 @@
1221512215
"x-go-name": "Gitignores"
1221612216
},
1221712217
"issue_labels": {
12218-
"description": "Issue Label set to use",
12218+
"description": "Label-Set to use",
1221912219
"type": "string",
1222012220
"x-go-name": "IssueLabels"
1222112221
},

0 commit comments

Comments
 (0)