···
637
-
resp, err := ksClient.Compare(f.OwnerDid(), f.RepoName, targetBranch, sourceBranch)
638
-
switch resp.StatusCode {
641
-
s.pages.Notice(w, "pull", "Branch based pull requests are not supported on this knot.")
645
-
respBody, err := io.ReadAll(resp.Body)
637
+
diffTreeResponse, err := ksClient.Compare(f.OwnerDid(), f.RepoName, targetBranch, sourceBranch)
647
-
log.Println("failed to compare across branches")
648
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
651
-
defer resp.Body.Close()
653
-
var diffTreeResponse types.RepoDiffTreeResponse
654
-
err = json.Unmarshal(respBody, &diffTreeResponse)
656
-
log.Println("failed to unmarshal diff tree response", err)
657
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
639
+
log.Println("failed to compare", err)
640
+
s.pages.Notice(w, "pull", err.Error())
···
// hiddenRef: hidden/feature-1/main (on repo-fork)
// targetBranch: main (on repo-1)
// sourceBranch: feature-1 (on repo-fork)
733
-
diffResp, err := us.Compare(user.Did, fork.Name, hiddenRef, sourceBranch)
716
+
diffTreeResponse, err := us.Compare(user.Did, fork.Name, hiddenRef, sourceBranch)
log.Println("failed to compare across branches", err)
736
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
740
-
respBody, err := io.ReadAll(diffResp.Body)
742
-
log.Println("failed to read response body", err)
743
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
747
-
defer resp.Body.Close()
749
-
var diffTreeResponse types.RepoDiffTreeResponse
750
-
err = json.Unmarshal(respBody, &diffTreeResponse)
752
-
log.Println("failed to unmarshal diff tree response", err)
753
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
719
+
s.pages.Notice(w, "pull", err.Error())
···
patch := r.FormValue("patch")
1056
-
s.pages.Notice(w, "resubmit-error", "Patch is empty.")
1060
-
if patch == pull.LatestPatch() {
1061
-
s.pages.Notice(w, "resubmit-error", "Patch is identical to previous submission.")
1065
-
if !isPatchValid(patch) {
1066
-
s.pages.Notice(w, "resubmit-error", "Invalid patch format. Please provide a valid diff.")
1021
+
if err = validateResubmittedPatch(pull, patch); err != nil {
1022
+
s.pages.Notice(w, "resubmit-error", err.Error())
tx, err := s.db.BeginTx(r.Context(), nil)
···
pull, ok := r.Context().Value("pull").(*db.Pull)
log.Println("failed to get pull")
1130
-
s.pages.Notice(w, "pull-error", "Failed to edit patch. Try again later.")
1085
+
s.pages.Notice(w, "resubmit-error", "Failed to edit patch. Try again later.")
···
ksClient, err := NewUnsignedClient(f.Knot, s.config.Dev)
log.Printf("failed to create client for %s: %s", f.Knot, err)
1155
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1110
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
1159
-
compareResp, err := ksClient.Compare(f.OwnerDid(), f.RepoName, pull.TargetBranch, pull.PullSource.Branch)
1114
+
diffTreeResponse, err := ksClient.Compare(f.OwnerDid(), f.RepoName, pull.TargetBranch, pull.PullSource.Branch)
1161
-
log.Printf("failed to compare branches: %s", err)
1162
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1165
-
defer compareResp.Body.Close()
1167
-
switch compareResp.StatusCode {
1170
-
s.pages.Notice(w, "pull", "Branch based pull requests are not supported on this knot.")
1174
-
respBody, err := io.ReadAll(compareResp.Body)
1176
-
log.Println("failed to compare across branches")
1177
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1180
-
defer compareResp.Body.Close()
1182
-
var diffTreeResponse types.RepoDiffTreeResponse
1183
-
err = json.Unmarshal(respBody, &diffTreeResponse)
1185
-
log.Println("failed to unmarshal diff tree response", err)
1186
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1116
+
log.Printf("compare request failed: %s", err)
1117
+
s.pages.Notice(w, "resubmit-error", err.Error())
sourceRev := diffTreeResponse.DiffTree.Rev2
patch := diffTreeResponse.DiffTree.Patch
1194
-
s.pages.Notice(w, "resubmit-error", "Patch is empty.")
1198
-
if patch == pull.LatestPatch() {
1199
-
s.pages.Notice(w, "resubmit-error", "Patch is identical to previous submission.")
1203
-
if !isPatchValid(patch) {
1204
-
s.pages.Notice(w, "resubmit-error", "Invalid patch format. Please provide a valid diff.")
1124
+
if err = validateResubmittedPatch(pull, patch); err != nil {
1125
+
s.pages.Notice(w, "resubmit-error", err.Error())
if sourceRev == pull.Submissions[pull.LastRoundNumber()].SourceRev {
···
pull, ok := r.Context().Value("pull").(*db.Pull)
log.Println("failed to get pull")
1277
-
s.pages.Notice(w, "pull-error", "Failed to edit patch. Try again later.")
1197
+
s.pages.Notice(w, "resubmit-error", "Failed to edit patch. Try again later.")
···
forkRepo, err := db.GetRepoByAtUri(s.db, pull.PullSource.RepoAt.String())
log.Println("failed to get source repo", err)
1296
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1216
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
···
ksClient, err := NewUnsignedClient(forkRepo.Knot, s.config.Dev)
log.Printf("failed to create client for %s: %s", forkRepo.Knot, err)
1304
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1224
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
secret, err := db.GetRegistrationKey(s.db, forkRepo.Knot)
log.Printf("failed to get registration key for %s: %s", forkRepo.Knot, err)
1311
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1231
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
// update the hidden tracking branch to latest
signedClient, err := NewSignedClient(forkRepo.Knot, secret, s.config.Dev)
log.Printf("failed to create signed client for %s: %s", forkRepo.Knot, err)
1318
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1239
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
resp, err := signedClient.NewHiddenRef(forkRepo.Did, forkRepo.Name, pull.PullSource.Branch, pull.TargetBranch)
if err != nil || resp.StatusCode != http.StatusNoContent {
log.Printf("failed to update tracking branch: %s", err)
1324
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1246
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
hiddenRef := url.QueryEscape(fmt.Sprintf("hidden/%s/%s", pull.PullSource.Branch, pull.TargetBranch))
1329
-
compareResp, err := ksClient.Compare(forkRepo.Did, forkRepo.Name, hiddenRef, pull.PullSource.Branch)
1251
+
diffTreeResponse, err := ksClient.Compare(forkRepo.Did, forkRepo.Name, hiddenRef, pull.PullSource.Branch)
log.Printf("failed to compare branches: %s", err)
1332
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1335
-
defer compareResp.Body.Close()
1337
-
switch compareResp.StatusCode {
1340
-
s.pages.Notice(w, "pull", "Branch based pull requests are not supported on this knot.")
1344
-
respBody, err := io.ReadAll(compareResp.Body)
1346
-
log.Println("failed to compare across branches")
1347
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1350
-
defer compareResp.Body.Close()
1352
-
var diffTreeResponse types.RepoDiffTreeResponse
1353
-
err = json.Unmarshal(respBody, &diffTreeResponse)
1355
-
log.Println("failed to unmarshal diff tree response", err)
1356
-
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
1254
+
s.pages.Notice(w, "resubmit-error", err.Error())
sourceRev := diffTreeResponse.DiffTree.Rev2
patch := diffTreeResponse.DiffTree.Patch
1364
-
s.pages.Notice(w, "resubmit-error", "Patch is empty.")
1368
-
if patch == pull.LatestPatch() {
1369
-
s.pages.Notice(w, "resubmit-error", "Patch is identical to previous submission.")
1373
-
if !isPatchValid(patch) {
1374
-
s.pages.Notice(w, "resubmit-error", "Invalid patch format. Please provide a valid diff.")
1261
+
if err = validateResubmittedPatch(pull, patch); err != nil {
1262
+
s.pages.Notice(w, "resubmit-error", err.Error())
if sourceRev == pull.Submissions[pull.LastRoundNumber()].SourceRev {
···
s.pages.HxLocation(w, fmt.Sprintf("/%s/pulls/%d", f.OwnerSlashRepo(), pull.PullId))
1330
+
// validate a resubmission against a pull request
1331
+
func validateResubmittedPatch(pull *db.Pull, patch string) error {
1333
+
return fmt.Errorf("Patch is empty.")
1336
+
if patch == pull.LatestPatch() {
1337
+
return fmt.Errorf("Patch is identical to previous submission.")
1340
+
if !isPatchValid(patch) {
1341
+
return fmt.Errorf("Invalid patch format. Please provide a valid diff.")
func (s *State) MergePull(w http.ResponseWriter, r *http.Request) {