Skip to content

Commit f28771f

Browse files
committed
Extract shared sourceFromInput utility to SourceControlProvider.ts
Move the duplicated sourceFromInput function from both AzureDevOpsSourceControlProvider.ts and GitLabSourceControlProvider.ts into SourceControlProvider.ts where SourceControlRefSelector is already defined. Both provider files now import the shared function.
1 parent a2fa18e commit f28771f

3 files changed

Lines changed: 16 additions & 30 deletions

File tree

apps/server/src/sourceControl/AzureDevOpsSourceControlProvider.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Effect, Layer } from "effect";
22
import { SourceControlProviderError, type ChangeRequest } from "@t3tools/contracts";
33

44
import { AzureDevOpsCli, type AzureDevOpsCliError } from "./AzureDevOpsCli.ts";
5-
import { SourceControlProvider, type SourceControlRefSelector } from "./SourceControlProvider.ts";
5+
import { SourceControlProvider, sourceFromInput } from "./SourceControlProvider.ts";
66

77
function providerError(operation: string, cause: AzureDevOpsCliError): SourceControlProviderError {
88
return new SourceControlProviderError({
@@ -35,20 +35,6 @@ function toChangeRequest(summary: {
3535
};
3636
}
3737

38-
function sourceFromInput(input: {
39-
readonly headSelector: string;
40-
readonly source?: SourceControlRefSelector;
41-
}): SourceControlRefSelector | undefined {
42-
if (input.source) {
43-
return input.source;
44-
}
45-
46-
const match = /^([^:/\s]+):(.+)$/u.exec(input.headSelector.trim());
47-
const owner = match?.[1]?.trim();
48-
const refName = match?.[2]?.trim();
49-
return owner && refName ? { owner, refName } : undefined;
50-
}
51-
5238
export const make = Effect.fn("makeAzureDevOpsSourceControlProvider")(function* () {
5339
const azure = yield* AzureDevOpsCli;
5440

apps/server/src/sourceControl/GitLabSourceControlProvider.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Effect, Layer, Option } from "effect";
22
import { SourceControlProviderError, type ChangeRequest } from "@t3tools/contracts";
33

44
import { GitLabCli, type GitLabCliError, type GitLabMergeRequestSummary } from "./GitLabCli.ts";
5-
import { SourceControlProvider, type SourceControlRefSelector } from "./SourceControlProvider.ts";
5+
import { SourceControlProvider, sourceFromInput } from "./SourceControlProvider.ts";
66

77
function providerError(operation: string, cause: GitLabCliError): SourceControlProviderError {
88
return new SourceControlProviderError({
@@ -35,20 +35,6 @@ function toChangeRequest(summary: GitLabMergeRequestSummary): ChangeRequest {
3535
};
3636
}
3737

38-
function sourceFromInput(input: {
39-
readonly headSelector: string;
40-
readonly source?: SourceControlRefSelector;
41-
}): SourceControlRefSelector | undefined {
42-
if (input.source) {
43-
return input.source;
44-
}
45-
46-
const match = /^([^:/\s]+):(.+)$/u.exec(input.headSelector.trim());
47-
const owner = match?.[1]?.trim();
48-
const refName = match?.[2]?.trim();
49-
return owner && refName ? { owner, refName } : undefined;
50-
}
51-
5238
export const make = Effect.fn("makeGitLabSourceControlProvider")(function* () {
5339
const gitlab = yield* GitLabCli;
5440

apps/server/src/sourceControl/SourceControlProvider.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,20 @@ export interface SourceControlProviderShape {
6262
}) => Effect.Effect<void, SourceControlProviderError>;
6363
}
6464

65+
export function sourceFromInput(input: {
66+
readonly headSelector: string;
67+
readonly source?: SourceControlRefSelector;
68+
}): SourceControlRefSelector | undefined {
69+
if (input.source) {
70+
return input.source;
71+
}
72+
73+
const match = /^([^:/\s]+):(.+)$/u.exec(input.headSelector.trim());
74+
const owner = match?.[1]?.trim();
75+
const refName = match?.[2]?.trim();
76+
return owner && refName ? { owner, refName } : undefined;
77+
}
78+
6579
export class SourceControlProvider extends Context.Service<
6680
SourceControlProvider,
6781
SourceControlProviderShape

0 commit comments

Comments
 (0)