Signed-off-by: Evan Jarrett evan@evanjarrett.com
REVERTED
appview/db/pipeline.go
REVERTED
appview/db/pipeline.go
···
168
168
169
169
// this is a mega query, but the most useful one:
170
170
// get N pipelines, for each one get the latest status of its N workflows
171
+
func GetPipelineStatuses(e Execer, limit int, filters ...filter) ([]models.Pipeline, error) {
171
-
func GetPipelineStatuses(e Execer, filters ...filter) ([]models.Pipeline, error) {
172
172
var conditions []string
173
173
var args []any
174
174
for _, filter := range filters {
···
205
205
join
206
206
triggers t ON p.trigger_id = t.id
207
207
%s
208
+
order by p.created desc
209
+
limit %d
210
+
`, whereClause, limit)
208
-
`, whereClause)
209
211
210
212
rows, err := e.Query(query, args...)
211
213
if err != nil {
REVERTED
appview/pages/templates/repo/compare/compare.html
REVERTED
appview/pages/templates/repo/compare/compare.html
REVERTED
appview/pages/templates/repo/settings/general.html
REVERTED
appview/pages/templates/repo/settings/general.html
REVERTED
appview/pages/templates/user/fragments/editBio.html
REVERTED
appview/pages/templates/user/fragments/editBio.html
REVERTED
appview/pipelines/pipelines.go
REVERTED
appview/pipelines/pipelines.go
···
82
82
83
83
ps, err := db.GetPipelineStatuses(
84
84
p.db,
85
+
30,
85
86
db.FilterEq("repo_owner", repoInfo.OwnerDid),
86
87
db.FilterEq("repo_name", repoInfo.Name),
87
88
db.FilterEq("knot", repoInfo.Knot),
···
124
125
125
126
ps, err := db.GetPipelineStatuses(
126
127
p.db,
128
+
1,
127
129
db.FilterEq("repo_owner", repoInfo.OwnerDid),
128
130
db.FilterEq("repo_name", repoInfo.Name),
129
131
db.FilterEq("knot", repoInfo.Knot),
···
193
195
194
196
ps, err := db.GetPipelineStatuses(
195
197
p.db,
198
+
1,
196
199
db.FilterEq("repo_owner", repoInfo.OwnerDid),
197
200
db.FilterEq("repo_name", repoInfo.Name),
198
201
db.FilterEq("knot", repoInfo.Knot),
REVERTED
appview/pulls/pulls.go
REVERTED
appview/pulls/pulls.go
···
178
178
179
179
ps, err := db.GetPipelineStatuses(
180
180
s.db,
181
+
len(shas),
181
182
db.FilterEq("repo_owner", repoInfo.OwnerDid),
182
183
db.FilterEq("repo_name", repoInfo.Name),
183
184
db.FilterEq("knot", repoInfo.Knot),
···
648
649
repoInfo := f.RepoInfo(user)
649
650
ps, err := db.GetPipelineStatuses(
650
651
s.db,
652
+
len(shas),
651
653
db.FilterEq("repo_owner", repoInfo.OwnerDid),
652
654
db.FilterEq("repo_name", repoInfo.Name),
653
655
db.FilterEq("knot", repoInfo.Knot),
REVERTED
appview/repo/compare.go
REVERTED
appview/repo/compare.go
···
116
116
}
117
117
118
118
// if user is navigating to one of
119
+
// /compare/{base}...{head}
119
120
// /compare/{base}/{head}
121
+
var base, head string
122
+
rest := chi.URLParam(r, "*")
123
+
124
+
var parts []string
125
+
if strings.Contains(rest, "...") {
126
+
parts = strings.SplitN(rest, "...", 2)
127
+
} else if strings.Contains(rest, "/") {
128
+
parts = strings.SplitN(rest, "/", 2)
129
+
}
130
+
131
+
if len(parts) == 2 {
132
+
base = parts[0]
133
+
head = parts[1]
120
-
// /compare/{base}...{head}
121
-
base := chi.URLParam(r, "base")
122
-
head := chi.URLParam(r, "head")
123
-
if base == "" && head == "" {
124
-
rest := chi.URLParam(r, "*") // master...feature/xyz
125
-
parts := strings.SplitN(rest, "...", 2)
126
-
if len(parts) == 2 {
127
-
base = parts[0]
128
-
head = parts[1]
129
-
}
130
134
}
131
135
132
136
base, _ = url.PathUnescape(base)
REVERTED
appview/repo/repo_util.go
REVERTED
appview/repo/repo_util.go
···
1
1
package repo
2
2
3
3
import (
4
-
"crypto/rand"
5
-
"math/big"
6
4
"slices"
7
5
"sort"
8
6
"strings"
···
90
88
return
91
89
}
92
90
93
-
func randomString(n int) string {
94
-
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
95
-
result := make([]byte, n)
96
-
97
-
for i := 0; i < n; i++ {
98
-
n, _ := rand.Int(rand.Reader, big.NewInt(int64(len(letters))))
99
-
result[i] = letters[n.Int64()]
100
-
}
101
-
102
-
return string(result)
103
-
}
104
-
105
91
// grab pipelines from DB and munge that into a hashmap with commit sha as key
106
92
//
107
93
// golang is so blessed that it requires 35 lines of imperative code for this
···
118
104
119
105
ps, err := db.GetPipelineStatuses(
120
106
d,
107
+
len(shas),
121
108
db.FilterEq("repo_owner", repoInfo.OwnerDid),
122
109
db.FilterEq("repo_name", repoInfo.Name),
123
110
db.FilterEq("knot", repoInfo.Knot),
REVERTED
appview/repo/router.go
REVERTED
appview/repo/router.go
REVERTED
nix/pkgs/knot-unwrapped.nix
REVERTED
nix/pkgs/knot-unwrapped.nix
ERROR
spindle/engines/nixery/engine.go
ERROR
spindle/engines/nixery/engine.go
Failed to calculate interdiff for this file.
ERROR
spindle/engines/nixery/setup_steps.go
ERROR
spindle/engines/nixery/setup_steps.go
Failed to calculate interdiff for this file.
ERROR
spindle/models/clone.go
ERROR
spindle/models/clone.go
Failed to calculate interdiff for this file.
ERROR
spindle/models/clone_test.go
ERROR
spindle/models/clone_test.go
Failed to calculate interdiff for this file.