mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-08-24 19:39:16 +02:00
Support Azure DevOps vs-ssh.visualstudio.com SSH remotes as hosting provider (#4822)
**PR Description** This PR adds support for parsing **legacy Azure DevOps SSH remotes** that use the `vs-ssh.visualstudio.com` host, which is still common in older repositories or corporate setups. This PR fixes issue #2667. Previously, even if users mapped this host to the Azure DevOps provider via `configServiceDomains`, URL generation failed with: ``` Failed to parse repo information from url ``` because the Azure DevOps `ServiceDefinition` regex set did not include this SSH format. ### Changes - Added a new regex to `azdoServiceDef.regexStrings` to match: ``` git@vs-ssh.visualstudio.com:v3/<org>/<project>/<repo> ``` - This allows `getRepoURLFromRemoteURL` to correctly extract `org`, `project`, and `repo` for these remotes. - Added a test case to `TestGetPullRequestURL` verifying that mapping `vs-ssh.visualstudio.com` → `azuredevops:dev.azure.com` produces the correct PR URL. ### Example With this config: ```yaml services: 'vs-ssh.visualstudio.com': 'azuredevops:dev.azure.com' ``` and remote: ``` git@vs-ssh.visualstudio.com:v3/myorg/myproject/myrepo ``` `GetPullRequestURL("feature/new", "")` now returns: ``` https://dev.azure.com/myorg/myproject/_git/myrepo/pullrequestcreate?sourceRef=feature%2Fnew ``` ### Why - Many users still have remotes in this legacy format. - This change is **backward-compatible** and does not affect existing supported remotes. - It unblocks URL generation for PRs and commits without requiring users to change their remotes. - Fixes #2667
This commit is contained in:
@@ -46,6 +46,7 @@ var azdoServiceDef = ServiceDefinition{
|
||||
pullRequestURLIntoTargetBranch: "/pullrequestcreate?sourceRef={{.From}}&targetRef={{.To}}",
|
||||
commitURL: "/commit/{{.CommitHash}}",
|
||||
regexStrings: []string{
|
||||
`^.+@vs-ssh\.visualstudio\.com[:/](?:v3/)?(?P<org>[^/]+)/(?P<project>[^/]+)/(?P<repo>[^/]+?)(?:\.git)?$`,
|
||||
`^git@ssh.dev.azure.com.*/(?P<org>.*)/(?P<project>.*)/(?P<repo>.*?)(?:\.git)?$`,
|
||||
`^https://.*@dev.azure.com/(?P<org>.*?)/(?P<project>.*?)/_git/(?P<repo>.*?)(?:\.git)?$`,
|
||||
`^https://.*/(?P<org>.*?)/(?P<project>.*?)/_git/(?P<repo>.*?)(?:\.git)?$`,
|
||||
|
@@ -223,6 +223,18 @@ func TestGetPullRequestURL(t *testing.T) {
|
||||
assert.Equal(t, "https://mycompany.azuredevops.com/collection/myproject/_git/myrepo/pullrequestcreate?sourceRef=feature%2Fnew", url)
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "Opens a link to new pull request on Azure DevOps (legacy vs-ssh.visualstudio.com SSH) with mapping to dev.azure.com",
|
||||
from: "feature/new",
|
||||
remoteUrl: "git@vs-ssh.visualstudio.com:v3/myorg/myproject/myrepo",
|
||||
configServiceDomains: map[string]string{
|
||||
"vs-ssh.visualstudio.com": "azuredevops:dev.azure.com",
|
||||
},
|
||||
test: func(url string, err error) {
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "https://dev.azure.com/myorg/myproject/_git/myrepo/pullrequestcreate?sourceRef=feature%2Fnew", url)
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "Opens a link to new pull request on Bitbucket Server (SSH)",
|
||||
from: "feature/new",
|
||||
|
Reference in New Issue
Block a user