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 1687 return 1688 1688 } 1689 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 1690 // update the hidden tracking branch to latest 1717 1691 client, err := s.oauth.ServiceClient( 1718 1692 r, ··· 1741 1715 if !resp.Success { 1742 1716 log.Println("Failed to update tracking ref.", "err", resp.Error) 1743 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.") 1744 1745 return 1745 1746 } 1746 1747