From 9ceac91fd1c9f6a62293c6c69b2ba94e9b0b441f Mon Sep 17 00:00:00 2001 From: "Niranjan G.S" <113916783+Quarks07@users.noreply.github.com> Date: Sun, 25 Oct 2026 19:14:56 +0530 Subject: [PATCH] fix(shared): keep Windows clone paths out of SSH conversion Windows drive paths were parsed as SCP-style SSH remotes, so Add to another machine offered an invalid HTTPS rewrite. Reject them using the existing Windows path helper and preserve valid single-letter SSH hosts. Code and regression tests written by GPT-6 Astra at high reasoning through the Codex harness in T3 Code. --- packages/shared/src/cloneUrl.test.ts | 17 +++++++++++++++++ packages/shared/src/cloneUrl.ts | 3 +++ 2 files changed, 20 insertions(+) diff --git a/packages/shared/src/cloneUrl.test.ts b/packages/shared/src/cloneUrl.test.ts index a55192f25e0bb..4ed3ef8f09673 100644 --- a/packages/shared/src/cloneUrl.test.ts +++ b/packages/shared/src/cloneUrl.test.ts @@ -3,6 +3,23 @@ import { describe, expect, it } from "vite-plus/test"; import { cloneUrlForProtocol, cloneUrlProtocol } from "./cloneUrl.ts"; describe("cloneUrlForProtocol", () => { + it.each(["C:\\repos\\project.git", "c:\\repos\\project.git", "C:/repos/project.git"])( + "does not offer network protocols for a Windows local path: %s", + (path) => { + expect(cloneUrlProtocol(path)).toBeNull(); + expect(cloneUrlForProtocol(path, "ssh")).toBeNull(); + expect(cloneUrlForProtocol(path, "https")).toBeNull(); + }, + ); + + it.each(["c:repo.git", "git@c:repo.git", "ssh://git@c/repo.git"])( + "keeps SSH URLs with a single-letter host: %s", + (url) => { + expect(cloneUrlProtocol(url)).toBe("ssh"); + expect(cloneUrlForProtocol(url, "https")).toBe("https://c/repo.git"); + }, + ); + it("switches between scp-style SSH and HTTPS", () => { expect(cloneUrlForProtocol("git@github.com:pingdotgg/t3code.git", "https")).toBe( "https://github.com/pingdotgg/t3code.git", diff --git a/packages/shared/src/cloneUrl.ts b/packages/shared/src/cloneUrl.ts index e4d0fa18beec4..668236a1be2aa 100644 --- a/packages/shared/src/cloneUrl.ts +++ b/packages/shared/src/cloneUrl.ts @@ -1,3 +1,5 @@ +import { isWindowsDrivePath } from "./path.ts"; + export type CloneProtocol = "ssh" | "https"; const SCP_LIKE_URL = /^(?:[^@/\s]+@)?([^:/\s]+):(?!\/)(.+)$/; @@ -8,6 +10,7 @@ function parseCloneUrl( url: string, ): { protocol: CloneProtocol; host: string; path: string; customPort: boolean } | null { const trimmed = url.trim(); + if (isWindowsDrivePath(trimmed)) return null; const ssh = SSH_URL.exec(trimmed); if (ssh) return { protocol: "ssh", host: ssh[1]!, path: ssh[3]!, customPort: !!ssh[2] }; const https = HTTPS_URL.exec(trimmed);