@@ -6,38 +6,58 @@ package models
6
6
7
7
import "github.com/go-xorm/xorm"
8
8
9
- // InsertIssue insert one issue to database
10
- func InsertIssue (issue * Issue , labelIDs []int64 ) error {
9
+ // InsertMilestones creates milestones of repository.
10
+ func InsertMilestones (ms ... * Milestone ) (err error ) {
11
+ if len (ms ) == 0 {
12
+ return nil
13
+ }
14
+
11
15
sess := x .NewSession ()
12
- if err := sess .Begin (); err != nil {
16
+ defer sess .Close ()
17
+ if err = sess .Begin (); err != nil {
13
18
return err
14
19
}
15
20
16
- if err := insertIssue (sess , issue , labelIDs ); err != nil {
21
+ // to return the id, so we should not use batch insert
22
+ for _ , m := range ms {
23
+ if _ , err = sess .NoAutoTime ().Insert (m ); err != nil {
24
+ return err
25
+ }
26
+ }
27
+
28
+ if _ , err = sess .Exec ("UPDATE `repository` SET num_milestones = num_milestones + ? WHERE id = ?" , len (ms ), ms [0 ].RepoID ); err != nil {
17
29
return err
18
30
}
19
31
return sess .Commit ()
20
32
}
21
33
22
- func insertIssue (sess * xorm.Session , issue * Issue , labelIDs []int64 ) error {
23
- if issue .MilestoneID > 0 {
24
- sess .Incr ("num_issues" )
25
- if issue .IsClosed {
26
- sess .Incr ("num_closed_issues" )
27
- }
28
- if _ , err := sess .ID (issue .MilestoneID ).NoAutoTime ().Update (new (Milestone )); err != nil {
34
+ // InsertIssues insert issues to database
35
+ func InsertIssues (issues ... * Issue ) error {
36
+ sess := x .NewSession ()
37
+ if err := sess .Begin (); err != nil {
38
+ return err
39
+ }
40
+
41
+ for _ , issue := range issues {
42
+ if err := insertIssue (sess , issue ); err != nil {
29
43
return err
30
44
}
31
45
}
46
+ return sess .Commit ()
47
+ }
48
+
49
+ func insertIssue (sess * xorm.Session , issue * Issue ) error {
32
50
if _ , err := sess .NoAutoTime ().Insert (issue ); err != nil {
33
51
return err
34
52
}
35
- var issueLabels = make ([]IssueLabel , 0 , len (labelIDs ))
36
- for _ , labelID := range labelIDs {
53
+ var issueLabels = make ([]IssueLabel , 0 , len (issue .Labels ))
54
+ var labelIDs = make ([]int64 , 0 , len (issue .Labels ))
55
+ for _ , label := range issue .Labels {
37
56
issueLabels = append (issueLabels , IssueLabel {
38
57
IssueID : issue .ID ,
39
- LabelID : labelID ,
58
+ LabelID : label . ID ,
40
59
})
60
+ labelIDs = append (labelIDs , label .ID )
41
61
}
42
62
if _ , err := sess .Insert (issueLabels ); err != nil {
43
63
return err
@@ -61,84 +81,93 @@ func insertIssue(sess *xorm.Session, issue *Issue, labelIDs []int64) error {
61
81
if issue .IsClosed {
62
82
sess .Incr ("num_closed_issues" )
63
83
}
64
- if _ , err := sess .In ("id" , labelIDs ).Update (new (Label )); err != nil {
84
+ if _ , err := sess .In ("id" , labelIDs ).NoAutoTime (). Update (new (Label )); err != nil {
65
85
return err
66
86
}
67
87
68
88
if issue .MilestoneID > 0 {
69
- if _ , err := sess .ID (issue .MilestoneID ).SetExpr ("completeness" , "num_closed_issues * 100 / num_issues" ).Update (new (Milestone )); err != nil {
89
+ sess .Incr ("num_issues" )
90
+ if issue .IsClosed {
91
+ sess .Incr ("num_closed_issues" )
92
+ }
93
+
94
+ if _ , err := sess .ID (issue .MilestoneID ).
95
+ SetExpr ("completeness" , "num_closed_issues * 100 / num_issues" ).
96
+ NoAutoTime ().
97
+ Update (new (Milestone )); err != nil {
70
98
return err
71
99
}
72
100
}
73
101
74
102
return nil
75
103
}
76
104
77
- // InsertComment inserted a comment
78
- func InsertComment (comment * Comment ) error {
105
+ // InsertIssueComments inserts many comments of issues.
106
+ func InsertIssueComments (comments []* Comment ) error {
107
+ if len (comments ) == 0 {
108
+ return nil
109
+ }
110
+
111
+ var issueIDs = make (map [int64 ]bool )
112
+ for _ , comment := range comments {
113
+ issueIDs [comment .IssueID ] = true
114
+ }
115
+
79
116
sess := x .NewSession ()
80
117
defer sess .Close ()
81
118
if err := sess .Begin (); err != nil {
82
119
return err
83
120
}
84
- if _ , err := sess .NoAutoTime ().Insert (comment ); err != nil {
121
+ if _ , err := sess .NoAutoTime ().Insert (comments ); err != nil {
85
122
return err
86
123
}
87
- if _ , err := sess .ID (comment .IssueID ).Incr ("num_comments" ).Update (new (Issue )); err != nil {
88
- return err
124
+ for issueID := range issueIDs {
125
+ if _ , err := sess .Exec ("UPDATE issue set num_comments = (SELECT count(*) FROM comment WHERE issue_id = ?) WHERE id = ?" , issueID , issueID ); err != nil {
126
+ return err
127
+ }
89
128
}
90
129
return sess .Commit ()
91
130
}
92
131
93
- // InsertPullRequest inserted a pull request
94
- func InsertPullRequest ( pr * PullRequest , labelIDs [] int64 ) error {
132
+ // InsertPullRequests inserted pull requests
133
+ func InsertPullRequests ( prs ... * PullRequest ) error {
95
134
sess := x .NewSession ()
96
135
defer sess .Close ()
97
136
if err := sess .Begin (); err != nil {
98
137
return err
99
138
}
100
- if err := insertIssue (sess , pr .Issue , labelIDs ); err != nil {
101
- return err
102
- }
103
- pr .IssueID = pr .Issue .ID
104
- if _ , err := sess .NoAutoTime ().Insert (pr ); err != nil {
105
- return err
139
+ for _ , pr := range prs {
140
+ if err := insertIssue (sess , pr .Issue ); err != nil {
141
+ return err
142
+ }
143
+ pr .IssueID = pr .Issue .ID
144
+ if _ , err := sess .NoAutoTime ().Insert (pr ); err != nil {
145
+ return err
146
+ }
106
147
}
148
+
107
149
return sess .Commit ()
108
150
}
109
151
110
- // MigrateRelease migrates release
111
- func MigrateRelease ( rel * Release ) error {
152
+ // InsertReleases migrates release
153
+ func InsertReleases ( rels ... * Release ) error {
112
154
sess := x .NewSession ()
113
155
if err := sess .Begin (); err != nil {
114
156
return err
115
157
}
116
158
117
- var oriRel = Release {
118
- RepoID : rel .RepoID ,
119
- TagName : rel .TagName ,
120
- }
121
- exist , err := sess .Get (& oriRel )
122
- if err != nil {
123
- return err
124
- }
125
- if ! exist {
159
+ for _ , rel := range rels {
126
160
if _ , err := sess .NoAutoTime ().Insert (rel ); err != nil {
127
161
return err
128
162
}
129
- } else {
130
- rel .ID = oriRel .ID
131
- if _ , err := sess .ID (rel .ID ).Cols ("target, title, note, is_tag, num_commits" ).Update (rel ); err != nil {
132
- return err
133
- }
134
- }
135
163
136
- for i := 0 ; i < len (rel .Attachments ); i ++ {
137
- rel .Attachments [i ].ReleaseID = rel .ID
138
- }
164
+ for i := 0 ; i < len (rel .Attachments ); i ++ {
165
+ rel .Attachments [i ].ReleaseID = rel .ID
166
+ }
139
167
140
- if _ , err := sess .NoAutoTime ().Insert (rel .Attachments ); err != nil {
141
- return err
168
+ if _ , err := sess .NoAutoTime ().Insert (rel .Attachments ); err != nil {
169
+ return err
170
+ }
142
171
}
143
172
144
173
return sess .Commit ()
0 commit comments