Skip to content

Commit 4824f72

Browse files
committed
refactor GetLatestCommitStatuses and some other improvements
1 parent 3e0a87c commit 4824f72

File tree

5 files changed

+75
-67
lines changed

5 files changed

+75
-67
lines changed

integrations/editor_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func testEditFileToNewBranchAndSendPull(t *testing.T, session *TestSession, user
161161

162162
req = NewRequestWithValues(t, "POST", url,
163163
map[string]string{
164-
"_csrf": htmlDoc.GetCSRF(),
164+
"_csrf": GetCSRF(t, session, url),
165165
"title": "pull request from " + targetBranch,
166166
},
167167
)

models/status.go

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package models
66

77
import (
88
"container/list"
9-
"errors"
109
"fmt"
1110
"strings"
1211

@@ -160,53 +159,48 @@ func GetLatestCommitStatus(repo *Repository, sha string, page int) ([]*CommitSta
160159
}
161160

162161
// GetLatestCommitStatuses returns all statuses with given repoIDs and shas
163-
func GetLatestCommitStatuses(repoIDs []int64, shas []string) ([][]*CommitStatus, error) {
164-
if len(repoIDs) != len(shas) {
165-
return nil, errors.New("parameter repoIDs should have the same size of shas")
166-
}
167-
168-
var results = make([]struct {
169-
ID int64
170-
RepoID int64
171-
SHA string
172-
}, 0, 10*len(repoIDs))
173-
162+
func GetLatestCommitStatuses(repoSHAs []struct {
163+
RepoID int64
164+
SHA string
165+
}) ([][]*CommitStatus, error) {
174166
var cond = builder.NewCond()
175-
for i := 0; i < len(repoIDs); i++ {
167+
for i := 0; i < len(repoSHAs); i++ {
176168
cond = cond.Or(builder.Eq{
177-
"repo_id": repoIDs[i],
178-
"sha": shas[i],
169+
"repo_id": repoSHAs[i].RepoID,
170+
"sha": repoSHAs[i].SHA,
179171
})
180172
}
181173

182-
err := x.Table(&CommitStatus{}).
174+
var ids = make([]int64, 0, len(repoSHAs))
175+
err := x.Table("commit_status").
183176
Where(cond).
184-
Select("max( id ) as id, repo_id, sha").
185-
GroupBy("repo_id, sha, context").OrderBy("max( id ) desc").Find(&results)
177+
Select("max( id ) as id").
178+
GroupBy("repo_id, sha, context").
179+
OrderBy("max( id ) desc").
180+
Find(&ids)
186181
if err != nil {
187182
return nil, err
188183
}
189184

190-
var returns = make([][]*CommitStatus, len(repoIDs))
191-
if len(results) == 0 {
185+
var returns = make([][]*CommitStatus, len(repoSHAs))
186+
if len(ids) == 0 {
192187
return returns, nil
193188
}
194189

195-
var ids = make([]int64, 0, len(results))
196-
var repoIDsMap = make(map[string][]int64, len(repoIDs))
197-
for _, res := range results {
198-
ids = append(ids, res.ID)
199-
repoIDsMap[fmt.Sprintf("%d-%s", res.RepoID, res.SHA)] = append(repoIDsMap[fmt.Sprintf("%d-%s", res.RepoID, res.SHA)], res.ID)
200-
}
201-
202190
statuses := make(map[int64]*CommitStatus, len(ids))
203191
err = x.In("id", ids).Find(&statuses)
204192
if err != nil {
205193
return nil, err
206194
}
207195

208-
for i := 0; i < len(repoIDs); i++ {
209-
for _, id := range repoIDsMap[fmt.Sprintf("%d-%s", repoIDs[i], shas[i])] {
196+
var repoIDsMap = make(map[string][]int64, len(repoSHAs))
197+
for _, status := range statuses {
198+
key := fmt.Sprintf("%d-%s", status.RepoID, status.SHA)
199+
repoIDsMap[key] = append(repoIDsMap[key], status.ID)
200+
}
201+
202+
for i := 0; i < len(repoSHAs); i++ {
203+
for _, id := range repoIDsMap[fmt.Sprintf("%d-%s", repoSHAs[i].RepoID, repoSHAs[i].SHA)] {
210204
returns[i] = append(returns[i], statuses[id])
211205
}
212206
}

routers/repo/issue.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,10 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB
198198
}
199199
}
200200
} else {
201-
var repoIDs = make([]int64, 0, len(issues))
202-
var shas = make([]string, 0, len(issues))
201+
var repoSHAs = make([]struct {
202+
RepoID int64
203+
SHA string
204+
}, 0, len(issues))
203205
var pullIDs = make([]int64, 0, len(issues))
204206
var repoCache = make(map[int64]*git.Repository)
205207

@@ -218,35 +220,40 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB
218220
return
219221
}
220222

221-
var rep *git.Repository
223+
var gitRepo *git.Repository
222224
var ok bool
223-
if rep, ok = repoCache[issue.PullRequest.HeadRepoID]; !ok {
225+
if gitRepo, ok = repoCache[issue.PullRequest.HeadRepoID]; !ok {
224226
if err := issue.PullRequest.GetHeadRepo(); err != nil {
225227
ctx.ServerError("GetHeadRepo", err)
226228
return
227229
}
228230

229-
rep, err = git.OpenRepository(issue.PullRequest.HeadRepo.RepoPath())
231+
gitRepo, err = git.OpenRepository(issue.PullRequest.HeadRepo.RepoPath())
230232
if err != nil {
231233
ctx.ServerError("OpenRepository", err)
232234
return
233235
}
234-
repoCache[issue.PullRequest.HeadRepoID] = rep
236+
repoCache[issue.PullRequest.HeadRepoID] = gitRepo
235237
}
236238

237-
sha, err := rep.GetBranchCommitID(issue.PullRequest.HeadBranch)
239+
sha, err := gitRepo.GetBranchCommitID(issue.PullRequest.HeadBranch)
238240
if err != nil {
239241
log.Error(4, "GetBranchCommitID: %v", err)
240242
} else {
241-
repoIDs = append(repoIDs, issue.RepoID)
242-
shas = append(shas, sha)
243+
repoSHAs = append(repoSHAs, struct {
244+
RepoID int64
245+
SHA string
246+
}{
247+
RepoID: issue.RepoID,
248+
SHA: sha,
249+
})
243250
pullIDs = append(pullIDs, issue.ID)
244251
}
245252
}
246253

247254
var issuesStates = make(map[int64]*models.CommitStatus, len(issues))
248-
if len(repoIDs) > 0 {
249-
commitStatuses, err := models.GetLatestCommitStatuses(repoIDs, shas)
255+
if len(repoSHAs) > 0 {
256+
commitStatuses, err := models.GetLatestCommitStatuses(repoSHAs)
250257
if err != nil {
251258
ctx.ServerError("GetLatestCommitStatuses", err)
252259
return

routers/user/home.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,10 @@ func Issues(ctx *context.Context) {
312312
issue.Repo = showReposMap[issue.RepoID]
313313
}
314314
} else {
315-
var repoIDs = make([]int64, 0, len(issues))
316-
var shas = make([]string, 0, len(issues))
315+
var repoSHAs = make([]struct {
316+
RepoID int64
317+
SHA string
318+
}, 0, len(issues))
317319
var pullIDs = make([]int64, 0, len(issues))
318320
var repoCache = make(map[int64]*git.Repository)
319321

@@ -325,35 +327,40 @@ func Issues(ctx *context.Context) {
325327
return
326328
}
327329

328-
var rep *git.Repository
330+
var gitRepo *git.Repository
329331
var ok bool
330-
if rep, ok = repoCache[issue.PullRequest.HeadRepoID]; !ok {
332+
if gitRepo, ok = repoCache[issue.PullRequest.HeadRepoID]; !ok {
331333
if err := issue.PullRequest.GetHeadRepo(); err != nil {
332334
ctx.ServerError("GetHeadRepo", err)
333335
return
334336
}
335337

336-
rep, err = git.OpenRepository(issue.PullRequest.HeadRepo.RepoPath())
338+
gitRepo, err = git.OpenRepository(issue.PullRequest.HeadRepo.RepoPath())
337339
if err != nil {
338340
ctx.ServerError("OpenRepository", err)
339341
return
340342
}
341-
repoCache[issue.PullRequest.HeadRepoID] = rep
343+
repoCache[issue.PullRequest.HeadRepoID] = gitRepo
342344
}
343345

344-
sha, err := rep.GetBranchCommitID(issue.PullRequest.HeadBranch)
346+
sha, err := gitRepo.GetBranchCommitID(issue.PullRequest.HeadBranch)
345347
if err != nil {
346348
log.Error(4, "GetBranchCommitID: %v", err)
347349
} else {
348-
repoIDs = append(repoIDs, issue.RepoID)
349-
shas = append(shas, sha)
350+
repoSHAs = append(repoSHAs, struct {
351+
RepoID int64
352+
SHA string
353+
}{
354+
RepoID: issue.RepoID,
355+
SHA: sha,
356+
})
350357
pullIDs = append(pullIDs, issue.ID)
351358
}
352359
}
353360

354361
var issuesStates = make(map[int64]*models.CommitStatus, len(issues))
355-
if len(repoIDs) > 0 {
356-
commitStatuses, err := models.GetLatestCommitStatuses(repoIDs, shas)
362+
if len(repoSHAs) > 0 {
363+
commitStatuses, err := models.GetLatestCommitStatuses(repoSHAs)
357364
if err != nil {
358365
ctx.ServerError("GetLatestCommitStatuses", err)
359366
return

templates/repo/issue/list.tmpl

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -178,26 +178,26 @@
178178
</div>
179179

180180
<div class="issue list">
181-
{{range $index, $issue := .Issues}}
182-
{{ $timeStr:= TimeSinceUnix $issue.CreatedUnix $.Lang }}
181+
{{range .Issues}}
182+
{{ $timeStr:= TimeSinceUnix .CreatedUnix $.Lang }}
183183
<li class="item">
184184
<div class="ui checkbox issue-checkbox">
185-
<input type="checkbox" data-issue-id={{$issue.ID}}></input>
185+
<input type="checkbox" data-issue-id={{.ID}}></input>
186186
</div>
187-
<div class="ui {{if $issue.IsRead}}black{{else}}green{{end}} label">#{{$issue.Index}}</div>
188-
<a class="title has-emoji" href="{{$.Link}}/{{$issue.Index}}">{{$issue.Title}}</a>
189-
{{if $issue.IsPull}}
190-
{{template "repo/commit_status" (index $.IssuesStates $issue.ID)}}
187+
<div class="ui {{if .IsRead}}black{{else}}green{{end}} label">#{{.Index}}</div>
188+
<a class="title has-emoji" href="{{$.Link}}/{{.Index}}">{{.Title}}</a>
189+
{{if .IsPull}}
190+
{{template "repo/commit_status" (index $.IssuesStates .ID)}}
191191
{{end}}
192-
{{if $issue.Ref}}
193-
<a class="ui label" href="{{$.RepoLink}}/src/branch/{{$issue.Ref}}">{{$issue.Ref}}</a>
192+
{{if .Ref}}
193+
<a class="ui label" href="{{$.RepoLink}}/src/branch/{{.Ref}}">{{.Ref}}</a>
194194
{{end}}
195-
{{range $issue.Labels}}
195+
{{range .Labels}}
196196
<a class="ui label" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}" style="color: {{.ForegroundColor}}; background-color: {{.Color}}" title="{{.Description}}">{{.Name}}</a>
197197
{{end}}
198198

199-
{{if $issue.NumComments}}
200-
<span class="comment ui right"><i class="octicon octicon-comment"></i> {{$issue.NumComments}}</span>
199+
{{if .NumComments}}
200+
<span class="comment ui right"><i class="octicon octicon-comment"></i> {{.NumComments}}</span>
201201
{{end}}
202202

203203
{{if .TotalTrackedTime}}
@@ -218,11 +218,11 @@
218218
<span class="octicon octicon-milestone"></span> {{$issue.Milestone.Name}}
219219
</a>
220220
{{end}}
221-
{{if ne $issue.DeadlineUnix 0}}
221+
{{if ne .DeadlineUnix 0}}
222222
<span class="octicon octicon-calendar"></span>
223-
<span{{if $issue.IsOverdue}} class="overdue"{{end}}>{{$issue.DeadlineUnix.FormatShort}}</span>
223+
<span{{if .IsOverdue}} class="overdue"{{end}}>{{.DeadlineUnix.FormatShort}}</span>
224224
{{end}}
225-
{{range $issue.Assignees}}
225+
{{range .Assignees}}
226226
<a class="ui right assignee poping up" href="{{.HomeLink}}" data-content="{{.Name}}" data-variation="inverted" data-position="left center">
227227
<img class="ui avatar image" src="{{.RelAvatarLink}}">
228228
</a>

0 commit comments

Comments
 (0)