History

Refactor collection handling for mobile remote connect

- Replace chained array transforms with explicit loops across mobile and server paths - Tighten provider, git, and orchestration parsing while preserving behavior - Improve remote-connect UI data shaping and thread activity filtering

Julius Marminge committed 6 months ago

Commit 90fea7b1 parent 7793bd654 files · +768 −546Browse files

Showing the changes to apps/server/src/sourceControl (4 of 54 files). Show all

Unified · Split

4 files
  1. apps/server/src/sourceControl/AzureDevOpsCli.ts +7 −4
  2. apps/server/src/sourceControl/GitLabCli.ts +7 −4
  3. apps/server/src/sourceControl/SourceControlProviderDiscovery.ts +15 −6
  4. apps/server/src/sourceControl/SourceControlProviderRegistry.ts +11 −12
apps/server/src/sourceControl/AzureDevOpsCli.ts+7−4
@@ -208,10 +208,13 @@ function parseRepositorySpecifier(repository: string): { · 207 unmodified lines
208208 readonly project: string | null;
209209 readonly name: string;
210210 } {
211− const parts = repository
212− .split("/")
213− .map((part) => part.trim())
214− .filter((part) => part.length > 0);
211+ const parts: Array<string> = [];
212+ for (const part of repository.split("/")) {
213+ const trimmed = part.trim();
214+ if (trimmed.length > 0) {
215+ parts.push(trimmed);
216+ }
217+ }
215218 return {
216219 project: parts.length > 1 ? (parts.at(-2) ?? null) : null,
217220 name: parts.at(-1) ?? repository.trim(),
apps/server/src/sourceControl/GitLabCli.ts+7−4
@@ -247,10 +247,13 @@ function parseRepositoryPath(repository: string): { · 246 unmodified lines
247247 readonly namespacePath: string | null;
248248 readonly projectPath: string;
249249 } {
250− const parts = repository
251− .split("/")
252− .map((part) => part.trim())
253− .filter((part) => part.length > 0);
250+ const parts: Array<string> = [];
251+ for (const part of repository.split("/")) {
252+ const trimmed = part.trim();
253+ if (trimmed.length > 0) {
254+ parts.push(trimmed);
255+ }
256+ }
254257 const projectPath = parts.at(-1) ?? repository.trim();
255258 const namespacePath = parts.length > 1 ? parts.slice(0, -1).join("/") : null;
256259 return { namespacePath, projectPath };
apps/server/src/sourceControl/SourceControlProviderDiscovery.ts+15−6
@@ -96,15 +96,24 @@ export function unknownAuth(detail?: string): SourceControlProviderAuth { · 95 unmodified lines
9696 }
9797
9898 export function combinedAuthOutput(input: SourceControlAuthProbeInput): string {
99− return [input.stdout, input.stderr].filter((entry) => entry.trim().length > 0).join("\n");
99+ const parts: string[] = [];
100+ for (const entry of [input.stdout, input.stderr]) {
101+ if (entry.trim().length > 0) {
102+ parts.push(entry);
103+ }
104+ }
105+ return parts.join("\n");
100106 }
101107
102108 function sanitizedAuthLines(text: string): ReadonlyArray<string> {
103− return text
104− .split(/\r?\n/)
105− .map((entry) => entry.trim())
106− .filter((entry) => entry.length > 0)
107− .filter((entry) => !/^[-\s]*token(?:\s+scopes?)?:/iu.test(entry));
109+ const lines: string[] = [];
110+ for (const entry of text.split(/\r?\n/)) {
111+ const line = entry.trim();
112+ if (line.length === 0) continue;
113+ if (/^[-\s]*token(?:\s+scopes?)?:/iu.test(line)) continue;
114+ lines.push(line);
115+ }
116+ return lines;
108117 }
109118
110119 export function firstSafeAuthLine(text: string): string | undefined {
apps/server/src/sourceControl/SourceControlProviderRegistry.ts+11−12
@@ -92,18 +92,17 @@ function selectProviderContext( · 91 unmodified lines
9292 readonly url: string;
9393 }>,
9494 ): SourceControlProvider.SourceControlProviderContext | null {
95− const candidates = remotes
96− .map((remote) => {
97− const provider = detectSourceControlProviderFromRemoteUrl(remote.url);
98− return provider
99− ? {
100− provider,
101− remoteName: remote.name,
102− remoteUrl: remote.url,
103− }
104− : null;
105− })
106− .filter((value): value is SourceControlProvider.SourceControlProviderContext => value !== null);
95+ const candidates: Array<SourceControlProvider.SourceControlProviderContext> = [];
96+ for (const remote of remotes) {
97+ const provider = detectSourceControlProviderFromRemoteUrl(remote.url);
98+ if (provider) {
99+ candidates.push({
100+ provider,
101+ remoteName: remote.name,
102+ remoteUrl: remote.url,
103+ });
104+ }
105+ }
107106
108107 return (
109108 candidates.find((candidate) => candidate.remoteName === "origin") ??

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t