Monorepo for Tangled tangled.org

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 <me@oppi.li>

oppi.li f92b4cce 36015515

verified
Changed files
+27 -26
appview
pulls
+27 -26
appview/pulls/pulls.go
··· 1687 return 1688 } 1689 1690 - // extract patch by performing compare 1691 - forkScheme := "http" 1692 - if !s.config.Core.Dev { 1693 - forkScheme = "https" 1694 - } 1695 - forkHost := fmt.Sprintf("%s://%s", forkScheme, forkRepo.Knot) 1696 - forkRepoId := fmt.Sprintf("%s/%s", forkRepo.Did, forkRepo.Name) 1697 - forkXrpcBytes, err := tangled.RepoCompare(r.Context(), &indigoxrpc.Client{Host: forkHost}, forkRepoId, pull.TargetBranch, pull.PullSource.Branch) 1698 - if err != nil { 1699 - if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { 1700 - log.Println("failed to call XRPC repo.compare for fork", xrpcerr) 1701 - s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1702 - return 1703 - } 1704 - log.Printf("failed to compare branches: %s", err) 1705 - s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1706 - return 1707 - } 1708 - 1709 - var forkComparison types.RepoFormatPatchResponse 1710 - if err := json.Unmarshal(forkXrpcBytes, &forkComparison); err != nil { 1711 - log.Println("failed to decode XRPC compare response for fork", err) 1712 - s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1713 - return 1714 - } 1715 - 1716 // update the hidden tracking branch to latest 1717 client, err := s.oauth.ServiceClient( 1718 r, ··· 1741 if !resp.Success { 1742 log.Println("Failed to update tracking ref.", "err", resp.Error) 1743 s.pages.Notice(w, "resubmit-error", "Failed to update tracking ref.") 1744 return 1745 } 1746
··· 1687 return 1688 } 1689 1690 // update the hidden tracking branch to latest 1691 client, err := s.oauth.ServiceClient( 1692 r, ··· 1715 if !resp.Success { 1716 log.Println("Failed to update tracking ref.", "err", resp.Error) 1717 s.pages.Notice(w, "resubmit-error", "Failed to update tracking ref.") 1718 + return 1719 + } 1720 + 1721 + hiddenRef := fmt.Sprintf("hidden/%s/%s", pull.PullSource.Branch, pull.TargetBranch) 1722 + // extract patch by performing compare 1723 + forkScheme := "http" 1724 + if !s.config.Core.Dev { 1725 + forkScheme = "https" 1726 + } 1727 + forkHost := fmt.Sprintf("%s://%s", forkScheme, forkRepo.Knot) 1728 + forkRepoId := fmt.Sprintf("%s/%s", forkRepo.Did, forkRepo.Name) 1729 + forkXrpcBytes, err := tangled.RepoCompare(r.Context(), &indigoxrpc.Client{Host: forkHost}, forkRepoId, hiddenRef, pull.PullSource.Branch) 1730 + if err != nil { 1731 + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { 1732 + log.Println("failed to call XRPC repo.compare for fork", xrpcerr) 1733 + s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1734 + return 1735 + } 1736 + log.Printf("failed to compare branches: %s", err) 1737 + s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1738 + return 1739 + } 1740 + 1741 + var forkComparison types.RepoFormatPatchResponse 1742 + if err := json.Unmarshal(forkXrpcBytes, &forkComparison); err != nil { 1743 + log.Println("failed to decode XRPC compare response for fork", err) 1744 + s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1745 return 1746 } 1747