Fix LocalGitCredentialsHelper parsing of IP:port Git remote URLs #1299
+78
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Swift's
URL(string:)fails to parse Git remote URLs like192.1.1.1:3000/repo.gitorforgejo.local:3000/repo.git, causingUnsupportedRemoteURLerrors when pushing to self-hosted Git instances. These URLs work with libgit2 directly (terminallg2 pushsucceeds) but fail in the credentials helper.Changes
normalizeRemoteURL()static helper method to LocalGitCredentialsHelper to detect and fix bare IP:port or hostname:port patterns by prependinghttp://scheme before URL parsingcredentialsForRemote()to use normalizeRemoteURL before parsing remote URLsonClone()in SourceControlContainer to use normalizeRemoteURL for user-provided URLs during clone operationsgit@host:path) and fully-qualified URLs (https://host/path)The fix is applied consistently across all Git URL parsing points to ensure IP:port URLs work for push, pull, fetch, and clone operations.
Example
// Before: URL(string: "192.1.1.1:3000/repo.git") → nil (throws UnsupportedRemoteURL) // After: normalizeRemoteURL("192.1.1.1:3000/repo.git") → "http://192.1.1.1:3000/repo.git" // URL(string: "http://192.1.1.1:3000/repo.git") → valid URL with host/portHandles all URL formats:
http://prefixhttp://prefixgit@host:path) → preserved unchangedTesting
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.