forked from tangled.org/core
Monorepo for Tangled — https://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>

authored by oppi.li and committed by Tangled 8fde032e 33b5a9a5

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