loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Refactor StringsToInt64s (#29967)

And close #27176

(cherry picked from commit cdb4d1a8db096d60dba04728924dab85def45b19)

authored by

wxiaoguang and committed by
Earl Warren
e5920b4a f8060bb5

+30 -27
+3 -6
models/issues/pull_list.go
··· 11 11 access_model "code.gitea.io/gitea/models/perm/access" 12 12 "code.gitea.io/gitea/models/unit" 13 13 user_model "code.gitea.io/gitea/models/user" 14 - "code.gitea.io/gitea/modules/base" 15 14 "code.gitea.io/gitea/modules/log" 16 15 "code.gitea.io/gitea/modules/util" 17 16 ··· 23 22 db.ListOptions 24 23 State string 25 24 SortType string 26 - Labels []string 25 + Labels []int64 27 26 MilestoneID int64 28 27 } 29 28 ··· 36 35 sess.And("issue.is_closed=?", opts.State == "closed") 37 36 } 38 37 39 - if labelIDs, err := base.StringsToInt64s(opts.Labels); err != nil { 40 - return nil, err 41 - } else if len(labelIDs) > 0 { 38 + if len(opts.Labels) > 0 { 42 39 sess.Join("INNER", "issue_label", "issue.id = issue_label.issue_id"). 43 - In("issue_label.label_id", labelIDs) 40 + In("issue_label.label_id", opts.Labels) 44 41 } 45 42 46 43 if opts.MilestoneID > 0 {
-2
models/issues/pull_test.go
··· 67 67 }, 68 68 State: "open", 69 69 SortType: "newest", 70 - Labels: []string{}, 71 70 }) 72 71 assert.NoError(t, err) 73 72 assert.EqualValues(t, 3, count) ··· 114 113 }, 115 114 State: "open", 116 115 SortType: "oldest", 117 - Labels: []string{}, 118 116 }) 119 117 assert.NoError(t, err) 120 118 assert.EqualValues(t, 3, count)
+8 -5
modules/base/tool.go
··· 150 150 151 151 // StringsToInt64s converts a slice of string to a slice of int64. 152 152 func StringsToInt64s(strs []string) ([]int64, error) { 153 - ints := make([]int64, len(strs)) 154 - for i := range strs { 155 - n, err := strconv.ParseInt(strs[i], 10, 64) 153 + if strs == nil { 154 + return nil, nil 155 + } 156 + ints := make([]int64, 0, len(strs)) 157 + for _, s := range strs { 158 + n, err := strconv.ParseInt(s, 10, 64) 156 159 if err != nil { 157 - return ints, err 160 + return nil, err 158 161 } 159 - ints[i] = n 162 + ints = append(ints, n) 160 163 } 161 164 return ints, nil 162 165 }
+4 -3
modules/base/tool_test.go
··· 138 138 assert.NoError(t, err) 139 139 assert.Equal(t, expected, result) 140 140 } 141 + testSuccess(nil, nil) 141 142 testSuccess([]string{}, []int64{}) 142 143 testSuccess([]string{"-1234"}, []int64{-1234}) 143 - testSuccess([]string{"1", "4", "16", "64", "256"}, 144 - []int64{1, 4, 16, 64, 256}) 144 + testSuccess([]string{"1", "4", "16", "64", "256"}, []int64{1, 4, 16, 64, 256}) 145 145 146 - _, err := StringsToInt64s([]string{"-1", "a", "$"}) 146 + ints, err := StringsToInt64s([]string{"-1", "a"}) 147 + assert.Len(t, ints, 0) 147 148 assert.Error(t, err) 148 149 } 149 150
+1
options/locale/locale_en-US.ini
··· 114 114 error = Error 115 115 error404 = The page you are trying to reach either <strong>does not exist</strong> or <strong>you are not authorized</strong> to view it. 116 116 go_back = Go Back 117 + invalid_data = Invalid data: %v 117 118 118 119 never = Never 119 120 unknown = Unknown
+7 -2
routers/api/v1/repo/pull.go
··· 21 21 repo_model "code.gitea.io/gitea/models/repo" 22 22 "code.gitea.io/gitea/models/unit" 23 23 user_model "code.gitea.io/gitea/models/user" 24 + "code.gitea.io/gitea/modules/base" 24 25 "code.gitea.io/gitea/modules/git" 25 26 "code.gitea.io/gitea/modules/gitrepo" 26 27 "code.gitea.io/gitea/modules/log" ··· 96 97 // "404": 97 98 // "$ref": "#/responses/notFound" 98 99 100 + labelIDs, err := base.StringsToInt64s(ctx.FormStrings("labels")) 101 + if err != nil { 102 + ctx.Error(http.StatusInternalServerError, "PullRequests", err) 103 + return 104 + } 99 105 listOptions := utils.GetListOptions(ctx) 100 - 101 106 prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{ 102 107 ListOptions: listOptions, 103 108 State: ctx.FormTrim("state"), 104 109 SortType: ctx.FormTrim("sort"), 105 - Labels: ctx.FormStrings("labels"), 110 + Labels: labelIDs, 106 111 MilestoneID: ctx.FormInt64("milestone"), 107 112 }) 108 113 if err != nil {
+1 -2
routers/web/repo/issue.go
··· 192 192 if len(selectLabels) > 0 { 193 193 labelIDs, err = base.StringsToInt64s(strings.Split(selectLabels, ",")) 194 194 if err != nil { 195 - ctx.ServerError("StringsToInt64s", err) 196 - return 195 + ctx.Flash.Error(ctx.Tr("invalid_data", selectLabels), true) 197 196 } 198 197 } 199 198
+2 -5
routers/web/user/home.go
··· 529 529 530 530 // Get IDs for labels (a filter option for issues/pulls). 531 531 // Required for IssuesOptions. 532 - var labelIDs []int64 533 532 selectedLabels := ctx.FormString("labels") 534 533 if len(selectedLabels) > 0 && selectedLabels != "0" { 535 534 var err error 536 - labelIDs, err = base.StringsToInt64s(strings.Split(selectedLabels, ",")) 535 + opts.LabelIDs, err = base.StringsToInt64s(strings.Split(selectedLabels, ",")) 537 536 if err != nil { 538 - ctx.ServerError("StringsToInt64s", err) 539 - return 537 + ctx.Flash.Error(ctx.Tr("invalid_data", selectedLabels), true) 540 538 } 541 539 } 542 - opts.LabelIDs = labelIDs 543 540 544 541 // ------------------------------ 545 542 // Get issues as defined by opts.
+1 -2
routers/web/user/notification.go
··· 268 268 var err error 269 269 labelIDs, err = base.StringsToInt64s(strings.Split(selectedLabels, ",")) 270 270 if err != nil { 271 - ctx.ServerError("StringsToInt64s", err) 272 - return 271 + ctx.Flash.Error(ctx.Tr("invalid_data", selectedLabels), true) 273 272 } 274 273 } 275 274
+1
templates/repo/issue/list.tmpl
··· 2 2 <div role="main" aria-label="{{.Title}}" class="page-content repository issue-list"> 3 3 {{template "repo/header" .}} 4 4 <div class="ui container"> 5 + {{template "base/alert" .}} 5 6 6 7 {{if .PinnedIssues}} 7 8 <div id="issue-pins" {{if .IsRepoAdmin}}data-is-repo-admin{{end}}>
+1
templates/repo/issue/milestone_issues.tmpl
··· 2 2 <div role="main" aria-label="{{.Title}}" class="page-content repository milestone-issue-list"> 3 3 {{template "repo/header" .}} 4 4 <div class="ui container"> 5 + {{template "base/alert" .}} 5 6 <div class="gt-df"> 6 7 <h1 class="gt-mb-3">{{.Milestone.Name}}</h1> 7 8 {{if not .Repository.IsArchived}}
+1
templates/user/dashboard/issues.tmpl
··· 2 2 <div role="main" aria-label="{{.Title}}" class="page-content dashboard issues"> 3 3 {{template "user/dashboard/navbar" .}} 4 4 <div class="ui container"> 5 + {{template "base/alert" .}} 5 6 <div class="flex-container"> 6 7 <div class="flex-container-nav"> 7 8 <div class="ui secondary vertical filter menu tw-bg-transparent">