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
··· 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, ··· 1744 1718 return 1745 1719 } 1746 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 + 1747 1748 // Use the fork comparison we already made 1748 1749 comparison := forkComparison 1749 1750