appview/pulls: fix regression in resubmitting fork based PRs #675

merged
opened by oppi.li targeting master from push-vpwznvpkklnz

if the upstream was updated, fork based PRs would be unable to resubmit. this is because the hidden tracking ref was not updated before performing a comparison, it was performed after. the ordering of events was incorrect.

additionaly, the RepoCompare call was being made against pull.TargetBranch when it should have been against the hidden ref.

Signed-off-by: oppiliappan me@oppi.li

Changed files
+27 -26
appview
pulls
+27 -26
appview/pulls/pulls.go
···
return
-
// extract patch by performing compare
-
forkScheme := "http"
-
if !s.config.Core.Dev {
-
forkScheme = "https"
-
}
-
forkHost := fmt.Sprintf("%s://%s", forkScheme, forkRepo.Knot)
-
forkRepoId := fmt.Sprintf("%s/%s", forkRepo.Did, forkRepo.Name)
-
forkXrpcBytes, err := tangled.RepoCompare(r.Context(), &indigoxrpc.Client{Host: forkHost}, forkRepoId, pull.TargetBranch, pull.PullSource.Branch)
-
if err != nil {
-
if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil {
-
log.Println("failed to call XRPC repo.compare for fork", xrpcerr)
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
-
return
-
}
-
log.Printf("failed to compare branches: %s", err)
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
-
return
-
}
-
-
var forkComparison types.RepoFormatPatchResponse
-
if err := json.Unmarshal(forkXrpcBytes, &forkComparison); err != nil {
-
log.Println("failed to decode XRPC compare response for fork", err)
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
-
return
-
}
-
// update the hidden tracking branch to latest
client, err := s.oauth.ServiceClient(
r,
···
return
+
hiddenRef := fmt.Sprintf("hidden/%s/%s", pull.PullSource.Branch, pull.TargetBranch)
+
// extract patch by performing compare
+
forkScheme := "http"
+
if !s.config.Core.Dev {
+
forkScheme = "https"
+
}
+
forkHost := fmt.Sprintf("%s://%s", forkScheme, forkRepo.Knot)
+
forkRepoId := fmt.Sprintf("%s/%s", forkRepo.Did, forkRepo.Name)
+
forkXrpcBytes, err := tangled.RepoCompare(r.Context(), &indigoxrpc.Client{Host: forkHost}, forkRepoId, hiddenRef, pull.PullSource.Branch)
+
if err != nil {
+
if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil {
+
log.Println("failed to call XRPC repo.compare for fork", xrpcerr)
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
+
return
+
}
+
log.Printf("failed to compare branches: %s", err)
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
+
return
+
}
+
+
var forkComparison types.RepoFormatPatchResponse
+
if err := json.Unmarshal(forkXrpcBytes, &forkComparison); err != nil {
+
log.Println("failed to decode XRPC compare response for fork", err)
+
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
+
return
+
}
+
// Use the fork comparison we already made
comparison := forkComparison