From 8fde032ef17690a2354bd27e7c2f0288f677a541 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Wed, 15 Oct 2025 13:09:20 +0100 Subject: [PATCH] appview/pulls: fix regression in resubmitting fork based PRs 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 --- appview/pulls/pulls.go | 53 +++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index dde7cb99..926cf35c 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -1695,32 +1695,6 @@ func (s *Pulls) resubmitFork(w http.ResponseWriter, r *http.Request) { 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, @@ -1752,6 +1726,33 @@ func (s *Pulls) resubmitFork(w http.ResponseWriter, r *http.Request) { 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 -- 2.51.2