+2
-3
appview/issues/issues.go
+2
-3
appview/issues/issues.go
···
226
l := rp.logger.With("handler", "DeleteIssue")
227
noticeId := "issue-actions-error"
228
229
-
user := rp.oauth.GetUser(r)
230
-
231
f, err := rp.repoResolver.Resolve(r)
232
if err != nil {
233
l.Error("failed to get repo and knot", "err", err)
···
271
rp.notifier.DeleteIssue(r.Context(), issue)
272
273
// return to all issues page
274
-
rp.pages.HxRedirect(w, "/"+f.RepoInfo(user).FullName()+"/issues")
275
}
276
277
func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) {
···
226
l := rp.logger.With("handler", "DeleteIssue")
227
noticeId := "issue-actions-error"
228
229
f, err := rp.repoResolver.Resolve(r)
230
if err != nil {
231
l.Error("failed to get repo and knot", "err", err)
···
269
rp.notifier.DeleteIssue(r.Context(), issue)
270
271
// return to all issues page
272
+
ownerSlashRepo := reporesolver.GetBaseRepoPath(r, &f.Repo)
273
+
rp.pages.HxRedirect(w, "/"+ownerSlashRepo+"/issues")
274
}
275
276
func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) {
+13
-20
appview/pipelines/pipelines.go
+13
-20
appview/pipelines/pipelines.go
···
78
return
79
}
80
81
-
repoInfo := f.RepoInfo(user)
82
-
83
ps, err := db.GetPipelineStatuses(
84
p.db,
85
30,
86
-
db.FilterEq("repo_owner", repoInfo.OwnerDid),
87
-
db.FilterEq("repo_name", repoInfo.Name),
88
-
db.FilterEq("knot", repoInfo.Knot),
89
)
90
if err != nil {
91
l.Error("failed to query db", "err", err)
···
94
95
p.pages.Pipelines(w, pages.PipelinesParams{
96
LoggedInUser: user,
97
-
RepoInfo: repoInfo,
98
Pipelines: ps,
99
})
100
}
···
109
return
110
}
111
112
-
repoInfo := f.RepoInfo(user)
113
-
114
pipelineId := chi.URLParam(r, "pipeline")
115
if pipelineId == "" {
116
l.Error("empty pipeline ID")
···
126
ps, err := db.GetPipelineStatuses(
127
p.db,
128
1,
129
-
db.FilterEq("repo_owner", repoInfo.OwnerDid),
130
-
db.FilterEq("repo_name", repoInfo.Name),
131
-
db.FilterEq("knot", repoInfo.Knot),
132
db.FilterEq("id", pipelineId),
133
)
134
if err != nil {
···
145
146
p.pages.Workflow(w, pages.WorkflowParams{
147
LoggedInUser: user,
148
-
RepoInfo: repoInfo,
149
Pipeline: singlePipeline,
150
Workflow: workflow,
151
})
···
176
ctx, cancel := context.WithCancel(r.Context())
177
defer cancel()
178
179
-
user := p.oauth.GetUser(r)
180
f, err := p.repoResolver.Resolve(r)
181
if err != nil {
182
l.Error("failed to get repo and knot", "err", err)
···
184
return
185
}
186
187
-
repoInfo := f.RepoInfo(user)
188
-
189
pipelineId := chi.URLParam(r, "pipeline")
190
workflow := chi.URLParam(r, "workflow")
191
if pipelineId == "" || workflow == "" {
···
196
ps, err := db.GetPipelineStatuses(
197
p.db,
198
1,
199
-
db.FilterEq("repo_owner", repoInfo.OwnerDid),
200
-
db.FilterEq("repo_name", repoInfo.Name),
201
-
db.FilterEq("knot", repoInfo.Knot),
202
db.FilterEq("id", pipelineId),
203
)
204
if err != nil || len(ps) != 1 {
···
208
}
209
210
singlePipeline := ps[0]
211
-
spindle := repoInfo.Spindle
212
-
knot := repoInfo.Knot
213
rkey := singlePipeline.Rkey
214
215
if spindle == "" || knot == "" || rkey == "" {
···
78
return
79
}
80
81
ps, err := db.GetPipelineStatuses(
82
p.db,
83
30,
84
+
db.FilterEq("repo_owner", f.Did),
85
+
db.FilterEq("repo_name", f.Name),
86
+
db.FilterEq("knot", f.Knot),
87
)
88
if err != nil {
89
l.Error("failed to query db", "err", err)
···
92
93
p.pages.Pipelines(w, pages.PipelinesParams{
94
LoggedInUser: user,
95
+
RepoInfo: f.RepoInfo(user),
96
Pipelines: ps,
97
})
98
}
···
107
return
108
}
109
110
pipelineId := chi.URLParam(r, "pipeline")
111
if pipelineId == "" {
112
l.Error("empty pipeline ID")
···
122
ps, err := db.GetPipelineStatuses(
123
p.db,
124
1,
125
+
db.FilterEq("repo_owner", f.Did),
126
+
db.FilterEq("repo_name", f.Name),
127
+
db.FilterEq("knot", f.Knot),
128
db.FilterEq("id", pipelineId),
129
)
130
if err != nil {
···
141
142
p.pages.Workflow(w, pages.WorkflowParams{
143
LoggedInUser: user,
144
+
RepoInfo: f.RepoInfo(user),
145
Pipeline: singlePipeline,
146
Workflow: workflow,
147
})
···
172
ctx, cancel := context.WithCancel(r.Context())
173
defer cancel()
174
175
f, err := p.repoResolver.Resolve(r)
176
if err != nil {
177
l.Error("failed to get repo and knot", "err", err)
···
179
return
180
}
181
182
pipelineId := chi.URLParam(r, "pipeline")
183
workflow := chi.URLParam(r, "workflow")
184
if pipelineId == "" || workflow == "" {
···
189
ps, err := db.GetPipelineStatuses(
190
p.db,
191
1,
192
+
db.FilterEq("repo_owner", f.Did),
193
+
db.FilterEq("repo_name", f.Name),
194
+
db.FilterEq("knot", f.Knot),
195
db.FilterEq("id", pipelineId),
196
)
197
if err != nil || len(ps) != 1 {
···
201
}
202
203
singlePipeline := ps[0]
204
+
spindle := f.Spindle
205
+
knot := f.Knot
206
rkey := singlePipeline.Rkey
207
208
if spindle == "" || knot == "" || rkey == "" {
+7
-10
appview/pulls/pulls.go
+7
-10
appview/pulls/pulls.go
···
162
resubmitResult = s.resubmitCheck(r, f, pull, stack)
163
}
164
165
-
repoInfo := f.RepoInfo(user)
166
-
167
m := make(map[string]models.Pipeline)
168
169
var shas []string
···
180
ps, err := db.GetPipelineStatuses(
181
s.db,
182
len(shas),
183
-
db.FilterEq("repo_owner", repoInfo.OwnerDid),
184
-
db.FilterEq("repo_name", repoInfo.Name),
185
-
db.FilterEq("knot", repoInfo.Knot),
186
db.FilterIn("sha", shas),
187
)
188
if err != nil {
···
223
224
s.pages.RepoSinglePull(w, pages.RepoSinglePullParams{
225
LoggedInUser: user,
226
-
RepoInfo: repoInfo,
227
Pull: pull,
228
Stack: stack,
229
AbandonedPulls: abandonedPulls,
···
647
}
648
pulls = pulls[:n]
649
650
-
repoInfo := f.RepoInfo(user)
651
ps, err := db.GetPipelineStatuses(
652
s.db,
653
len(shas),
654
-
db.FilterEq("repo_owner", repoInfo.OwnerDid),
655
-
db.FilterEq("repo_name", repoInfo.Name),
656
-
db.FilterEq("knot", repoInfo.Knot),
657
db.FilterIn("sha", shas),
658
)
659
if err != nil {
···
162
resubmitResult = s.resubmitCheck(r, f, pull, stack)
163
}
164
165
m := make(map[string]models.Pipeline)
166
167
var shas []string
···
178
ps, err := db.GetPipelineStatuses(
179
s.db,
180
len(shas),
181
+
db.FilterEq("repo_owner", f.Did),
182
+
db.FilterEq("repo_name", f.Name),
183
+
db.FilterEq("knot", f.Knot),
184
db.FilterIn("sha", shas),
185
)
186
if err != nil {
···
221
222
s.pages.RepoSinglePull(w, pages.RepoSinglePullParams{
223
LoggedInUser: user,
224
+
RepoInfo: f.RepoInfo(user),
225
Pull: pull,
226
Stack: stack,
227
AbandonedPulls: abandonedPulls,
···
645
}
646
pulls = pulls[:n]
647
648
ps, err := db.GetPipelineStatuses(
649
s.db,
650
len(shas),
651
+
db.FilterEq("repo_owner", f.Did),
652
+
db.FilterEq("repo_name", f.Name),
653
+
db.FilterEq("knot", f.Knot),
654
db.FilterIn("sha", shas),
655
)
656
if err != nil {
+2
-6
appview/repo/compare.go
+2
-6
appview/repo/compare.go
···
88
return
89
}
90
91
-
repoinfo := f.RepoInfo(user)
92
-
93
rp.pages.RepoCompareNew(w, pages.RepoCompareNewParams{
94
LoggedInUser: user,
95
-
RepoInfo: repoinfo,
96
Branches: branches,
97
Tags: tags.Tags,
98
Base: base,
···
202
diff = patchutil.AsNiceDiff(formatPatch.FormatPatchRaw, base)
203
}
204
205
-
repoinfo := f.RepoInfo(user)
206
-
207
rp.pages.RepoCompare(w, pages.RepoCompareParams{
208
LoggedInUser: user,
209
-
RepoInfo: repoinfo,
210
Branches: branches.Branches,
211
Tags: tags.Tags,
212
Base: base,
···
88
return
89
}
90
91
rp.pages.RepoCompareNew(w, pages.RepoCompareNewParams{
92
LoggedInUser: user,
93
+
RepoInfo: f.RepoInfo(user),
94
Branches: branches,
95
Tags: tags.Tags,
96
Base: base,
···
200
diff = patchutil.AsNiceDiff(formatPatch.FormatPatchRaw, base)
201
}
202
203
rp.pages.RepoCompare(w, pages.RepoCompareParams{
204
LoggedInUser: user,
205
+
RepoInfo: f.RepoInfo(user),
206
Branches: branches.Branches,
207
Tags: tags.Tags,
208
Base: base,
+3
-4
appview/repo/index.go
+3
-4
appview/repo/index.go
···
52
}
53
54
user := rp.oauth.GetUser(r)
55
-
repoInfo := f.RepoInfo(user)
56
57
// Build index response from multiple XRPC calls
58
result, err := rp.buildIndexResponse(r.Context(), xrpcc, f, ref)
···
62
rp.pages.RepoIndexPage(w, pages.RepoIndexParams{
63
LoggedInUser: user,
64
NeedsKnotUpgrade: true,
65
-
RepoInfo: repoInfo,
66
})
67
return
68
}
···
140
for _, c := range commitsTrunc {
141
shas = append(shas, c.Hash.String())
142
}
143
-
pipelines, err := getPipelineStatuses(rp.db, repoInfo, shas)
144
if err != nil {
145
l.Error("failed to fetch pipeline statuses", "err", err)
146
// non-fatal
···
148
149
rp.pages.RepoIndexPage(w, pages.RepoIndexParams{
150
LoggedInUser: user,
151
-
RepoInfo: repoInfo,
152
TagMap: tagMap,
153
RepoIndexResponse: *result,
154
CommitsTrunc: commitsTrunc,
···
52
}
53
54
user := rp.oauth.GetUser(r)
55
56
// Build index response from multiple XRPC calls
57
result, err := rp.buildIndexResponse(r.Context(), xrpcc, f, ref)
···
61
rp.pages.RepoIndexPage(w, pages.RepoIndexParams{
62
LoggedInUser: user,
63
NeedsKnotUpgrade: true,
64
+
RepoInfo: f.RepoInfo(user),
65
})
66
return
67
}
···
139
for _, c := range commitsTrunc {
140
shas = append(shas, c.Hash.String())
141
}
142
+
pipelines, err := getPipelineStatuses(rp.db, &f.Repo, shas)
143
if err != nil {
144
l.Error("failed to fetch pipeline statuses", "err", err)
145
// non-fatal
···
147
148
rp.pages.RepoIndexPage(w, pages.RepoIndexParams{
149
LoggedInUser: user,
150
+
RepoInfo: f.RepoInfo(user),
151
TagMap: tagMap,
152
RepoIndexResponse: *result,
153
CommitsTrunc: commitsTrunc,
+3
-6
appview/repo/log.go
+3
-6
appview/repo/log.go
···
121
l.Error("failed to GetVerifiedObjectCommits", "err", err)
122
}
123
124
-
repoInfo := f.RepoInfo(user)
125
-
126
var shas []string
127
for _, c := range xrpcResp.Commits {
128
shas = append(shas, c.Hash.String())
129
}
130
-
pipelines, err := getPipelineStatuses(rp.db, repoInfo, shas)
131
if err != nil {
132
l.Error("failed to getPipelineStatuses", "err", err)
133
// non-fatal
···
136
rp.pages.RepoLog(w, pages.RepoLogParams{
137
LoggedInUser: user,
138
TagMap: tagMap,
139
-
RepoInfo: repoInfo,
140
RepoLogResponse: xrpcResp,
141
EmailToDid: emailToDidMap,
142
VerifiedCommits: vc,
···
200
}
201
202
user := rp.oauth.GetUser(r)
203
-
repoInfo := f.RepoInfo(user)
204
-
pipelines, err := getPipelineStatuses(rp.db, repoInfo, []string{result.Diff.Commit.This})
205
if err != nil {
206
l.Error("failed to getPipelineStatuses", "err", err)
207
// non-fatal
···
121
l.Error("failed to GetVerifiedObjectCommits", "err", err)
122
}
123
124
var shas []string
125
for _, c := range xrpcResp.Commits {
126
shas = append(shas, c.Hash.String())
127
}
128
+
pipelines, err := getPipelineStatuses(rp.db, &f.Repo, shas)
129
if err != nil {
130
l.Error("failed to getPipelineStatuses", "err", err)
131
// non-fatal
···
134
rp.pages.RepoLog(w, pages.RepoLogParams{
135
LoggedInUser: user,
136
TagMap: tagMap,
137
+
RepoInfo: f.RepoInfo(user),
138
RepoLogResponse: xrpcResp,
139
EmailToDid: emailToDidMap,
140
VerifiedCommits: vc,
···
198
}
199
200
user := rp.oauth.GetUser(r)
201
+
pipelines, err := getPipelineStatuses(rp.db, &f.Repo, []string{result.Diff.Commit.This})
202
if err != nil {
203
l.Error("failed to getPipelineStatuses", "err", err)
204
// non-fatal
+2
-3
appview/repo/repo.go
+2
-3
appview/repo/repo.go
···
959
return
960
}
961
962
-
repoInfo := f.RepoInfo(user)
963
-
if repoInfo.Source == nil {
964
rp.pages.Notice(w, "repo", "This repository is not a fork.")
965
return
966
}
···
971
&tangled.RepoForkSync_Input{
972
Did: user.Did,
973
Name: f.Name,
974
-
Source: repoInfo.Source.RepoAt().String(),
975
Branch: ref,
976
},
977
)
+4
-5
appview/repo/repo_util.go
+4
-5
appview/repo/repo_util.go
···
7
8
"tangled.org/core/appview/db"
9
"tangled.org/core/appview/models"
10
-
"tangled.org/core/appview/pages/repoinfo"
11
"tangled.org/core/types"
12
13
"github.com/go-git/go-git/v5/plumbing/object"
···
93
// golang is so blessed that it requires 35 lines of imperative code for this
94
func getPipelineStatuses(
95
d *db.DB,
96
-
repoInfo repoinfo.RepoInfo,
97
shas []string,
98
) (map[string]models.Pipeline, error) {
99
m := make(map[string]models.Pipeline)
···
105
ps, err := db.GetPipelineStatuses(
106
d,
107
len(shas),
108
-
db.FilterEq("repo_owner", repoInfo.OwnerDid),
109
-
db.FilterEq("repo_name", repoInfo.Name),
110
-
db.FilterEq("knot", repoInfo.Knot),
111
db.FilterIn("sha", shas),
112
)
113
if err != nil {
···
7
8
"tangled.org/core/appview/db"
9
"tangled.org/core/appview/models"
10
"tangled.org/core/types"
11
12
"github.com/go-git/go-git/v5/plumbing/object"
···
92
// golang is so blessed that it requires 35 lines of imperative code for this
93
func getPipelineStatuses(
94
d *db.DB,
95
+
repo *models.Repo,
96
shas []string,
97
) (map[string]models.Pipeline, error) {
98
m := make(map[string]models.Pipeline)
···
104
ps, err := db.GetPipelineStatuses(
105
d,
106
len(shas),
107
+
db.FilterEq("repo_owner", repo.Did),
108
+
db.FilterEq("repo_name", repo.Name),
109
+
db.FilterEq("knot", repo.Knot),
110
db.FilterIn("sha", shas),
111
)
112
if err != nil {