Showing the changes to apps/server/src/pullRequest/pullRequestSyncKey.ts (1 of 172 files). Show all
Unified · Split
| @@ -0,0 +1,44 @@ | |||
| 1 | import { | ||
| 2 | pullRequestHostOf, | ||
| 3 | type PullRequestRef, | ||
| 4 | type RepositoryIdentity, | ||
| 5 | type SourceControlProviderKind, | ||
| 6 | type ThreadPullRequestKey, | ||
| 7 | } from "@t3tools/contracts"; | ||
| 8 | import { sourceControlRepositorySelector } from "@t3tools/shared/sourceControl"; | ||
| 9 | import { normalizeThreadPullRequestKey } from "@t3tools/shared/threadPullRequests"; | ||
| 10 | |||
| 11 | /** Convert checkout-scoped references to the host-level identity used by linked threads. */ | ||
| 12 | export function pullRequestSyncKey( | ||
| 13 | reference: PullRequestRef, | ||
| 14 | identity?: RepositoryIdentity | null, | ||
| 15 | ): ThreadPullRequestKey | null { | ||
| 16 | if (identity?.provider === "azure-devops" && !reference.repository.includes("/")) { | ||
| 17 | if ( | ||
| 18 | reference.repository.toLowerCase() !== | ||
| 19 | sourceControlRepositorySelector(identity)?.toLowerCase() || | ||
| 20 | (reference.host !== undefined && | ||
| 21 | reference.host.toLowerCase() !== pullRequestHostOf(identity, "azure-devops")) | ||
| 22 | ) | ||
| 23 | return null; | ||
| 24 | const [host, ...repository] = identity.canonicalKey.split("/"); | ||
| 25 | if (!host || repository.length === 0) return null; | ||
| 26 | return normalizeThreadPullRequestKey({ | ||
| 27 | host, | ||
| 28 | repository: repository.join("/"), | ||
| 29 | number: reference.number, | ||
| 30 | }); | ||
| 31 | } | ||
| 32 | const host = | ||
| 33 | reference.host ?? | ||
| 34 | (identity | ||
| 35 | ? pullRequestHostOf(identity, identity.provider as SourceControlProviderKind) | ||
| 36 | : undefined); | ||
| 37 | return host === undefined | ||
| 38 | ? null | ||
| 39 | : normalizeThreadPullRequestKey({ | ||
| 40 | host, | ||
| 41 | repository: reference.repository, | ||
| 42 | number: reference.number, | ||
| 43 | }); | ||
| 44 | } | ||