diff --git a/packages/server/src/services/gitea-service.test.ts b/packages/server/src/services/gitea-service.test.ts index bc7b28a06c..1f00e780c9 100644 --- a/packages/server/src/services/gitea-service.test.ts +++ b/packages/server/src/services/gitea-service.test.ts @@ -2340,6 +2340,22 @@ describe("createGiteaService", () => { expect(calls).toContainEqual(["api", "repos/example-user/sample-repo/pulls/5"]); }); + it("keeps a pull request from a deleted fork cross-repository", async () => { + const { service } = makeService((args) => + args[0] === "api" + ? ok(JSON.stringify({ head: { repo: null }, base: { repo: { id: 1 } } })) + : ok(JSON.stringify(STATUS_PR_VIEW)), + ); + + const target = await service.getPullRequestCheckoutTarget({ cwd: "/repo", number: 5 }); + + expect(target).toMatchObject({ + checkoutRefs: [{ remoteName: "origin", remoteRef: "refs/pull/5/head" }], + headOwnerLogin: null, + isCrossRepository: true, + }); + }); + it("prefixes the local branch name with the fork owner for a cross-repository checkout", () => { const { service } = makeService(() => ok("")); diff --git a/packages/server/src/services/gitea-service.ts b/packages/server/src/services/gitea-service.ts index 0e975ca1da..b6d2088c5e 100644 --- a/packages/server/src/services/gitea-service.ts +++ b/packages/server/src/services/gitea-service.ts @@ -1465,9 +1465,13 @@ export function createGiteaService(options: CreateGiteaServiceOptions = {}): For ); const headRepo = pr.head?.repo ?? null; const baseRepo = pr.base?.repo ?? null; - if (headRepo?.id == null || baseRepo?.id == null || headRepo.id === baseRepo.id) { + if (baseRepo?.id == null || headRepo?.id === baseRepo.id) { return sameRepo; } + if (headRepo?.id == null) { + // fork was deleted + return { ...sameRepo, isCrossRepository: true }; + } return { isCrossRepository: true, headOwnerLogin: headRepo.owner?.login ?? null,