From f92b4ccea42fe88691af97d4d5b399d4c0beda80 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 Change-Id: vpwznvpkklnznqrluuwooyltnutkuwzq 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 c8bc36cf..052d9392 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -1687,32 +1687,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, @@ -1744,6 +1718,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.43.0