+33
-19
appview/pulls/pulls.go
+33
-19
appview/pulls/pulls.go
···
1
1
package pulls
2
2
3
3
import (
4
+
"context"
4
5
"database/sql"
5
6
"encoding/json"
6
7
"errors"
···
31
32
32
33
"github.com/bluekeyes/go-gitdiff/gitdiff"
33
34
comatproto "github.com/bluesky-social/indigo/api/atproto"
35
+
"github.com/bluesky-social/indigo/atproto/client"
34
36
lexutil "github.com/bluesky-social/indigo/lex/util"
35
37
indigoxrpc "github.com/bluesky-social/indigo/xrpc"
36
38
"github.com/go-chi/chi/v5"
···
1206
1208
return
1207
1209
}
1208
1210
1211
+
blob, err := comatproto.RepoUploadBlob(r.Context(), client, strings.NewReader(patch))
1212
+
if err != nil {
1213
+
log.Println("failed to upload patch", err)
1214
+
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1215
+
return
1216
+
}
1217
+
1209
1218
_, err = comatproto.RepoPutRecord(r.Context(), client, &comatproto.RepoPutRecord_Input{
1210
1219
Collection: tangled.RepoPullNSID,
1211
1220
Repo: user.Did,
···
1217
1226
Repo: string(f.RepoAt()),
1218
1227
Branch: targetBranch,
1219
1228
},
1220
-
Patch: patch,
1229
+
Patch: blob.Blob.Ref.String(),
1221
1230
Source: recordPullSource,
1222
1231
CreatedAt: time.Now().Format(time.RFC3339),
1223
1232
},
···
1273
1282
return
1274
1283
}
1275
1284
1276
-
// build a stack out of this patch
1277
-
stackId := uuid.New()
1278
-
stack, err := newStack(f, user, targetBranch, patch, pullSource, stackId.String())
1285
+
client, err := s.oauth.AuthorizedClient(r)
1279
1286
if err != nil {
1280
-
log.Println("failed to create stack", err)
1281
-
s.pages.Notice(w, "pull", fmt.Sprintf("Failed to create stack: %v", err))
1287
+
log.Println("failed to get authorized client", err)
1288
+
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1282
1289
return
1283
1290
}
1284
1291
1285
-
client, err := s.oauth.AuthorizedClient(r)
1292
+
// build a stack out of this patch
1293
+
stackId := uuid.New()
1294
+
stack, err := newStack(r.Context(), client, f, user, targetBranch, patch, pullSource, stackId.String())
1286
1295
if err != nil {
1287
-
log.Println("failed to get authorized client", err)
1288
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1296
+
log.Println("failed to create stack", err)
1297
+
s.pages.Notice(w, "pull", fmt.Sprintf("Failed to create stack: %v", err))
1289
1298
return
1290
1299
}
1291
1300
···
1902
1911
) {
1903
1912
targetBranch := pull.TargetBranch
1904
1913
1914
+
client, err := s.oauth.AuthorizedClient(r)
1915
+
if err != nil {
1916
+
log.Println("failed to authorize client")
1917
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
1918
+
return
1919
+
}
1920
+
1905
1921
origStack, _ := r.Context().Value("stack").(models.Stack)
1906
-
newStack, err := newStack(f, user, targetBranch, patch, pull.PullSource, stackId)
1922
+
newStack, err := newStack(r.Context(), client, f, user, targetBranch, patch, pull.PullSource, stackId)
1907
1923
if err != nil {
1908
1924
log.Println("failed to create resubmitted stack", err)
1909
1925
s.pages.Notice(w, "pull-merge-error", "Failed to merge pull request. Try again later.")
···
2124
2140
return
2125
2141
}
2126
2142
2127
-
client, err := s.oauth.AuthorizedClient(r)
2128
-
if err != nil {
2129
-
log.Println("failed to authorize client")
2130
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
2131
-
return
2132
-
}
2133
-
2134
2143
_, err = comatproto.RepoApplyWrites(r.Context(), client, &comatproto.RepoApplyWrites_Input{
2135
2144
Repo: user.Did,
2136
2145
Writes: writes,
···
2399
2408
s.pages.HxLocation(w, fmt.Sprintf("/%s/pulls/%d", f.OwnerSlashRepo(), pull.PullId))
2400
2409
}
2401
2410
2402
-
func newStack(f *reporesolver.ResolvedRepo, user *oauth.User, targetBranch, patch string, pullSource *models.PullSource, stackId string) (models.Stack, error) {
2411
+
func newStack(ctx context.Context, client *client.APIClient, f *reporesolver.ResolvedRepo, user *oauth.User, targetBranch, patch string, pullSource *models.PullSource, stackId string) (models.Stack, error) {
2403
2412
formatPatches, err := patchutil.ExtractPatches(patch)
2404
2413
if err != nil {
2405
2414
return nil, fmt.Errorf("Failed to extract patches: %v", err)
···
2424
2433
body := fp.Body
2425
2434
rkey := tid.TID()
2426
2435
2436
+
blob, err := comatproto.RepoUploadBlob(ctx, client, strings.NewReader(fp.Raw))
2437
+
if err != nil {
2438
+
return nil, fmt.Errorf("Failed to upload patch: %v", err)
2439
+
}
2440
+
2427
2441
initialSubmission := models.PullSubmission{
2428
-
Patch: fp.Raw,
2442
+
Patch: blob.Blob.Ref.String(),
2429
2443
SourceRev: fp.SHA,
2430
2444
}
2431
2445
pull := models.Pull{