Repository: jesseduffield/lazygit (language: go)

Issue:
Open in browser doesn't work for some gitlab repos
**Describe the bug**
Open in browser doesn't work for some gitlab repos

**To Reproduce**
1. Clone [this repo](https://gitlab.com/gitlab-com/alliances/aws/public-tracker) with https: `git clone https://gitlab.com/gitlab-com/alliances/aws/public-tracker.git` 
2. Launch lazygit
3. Pick any commit and press `o` to open it in the browser
4. Observe 404 page

**Expected behavior**
I expect to see commit page, actually, because it exists and available to all users



Discussion / hints:
Oh, I see now why this happens

Gitlab service definition uses default regexp
https://github.com/jesseduffield/lazygit/blob/master/pkg/commands/hosting_service/definitions.go#L5

which assumes that URL structure would be `gitlab.com/owner/repo.git`

However, this is not the case for gitlab. A repo in Gitlab belongs to a group. A group itself can be member of another group (in this case they call such child group a subgroup). Group nesting is allowed up to 20 levels. Of course this nesting is reflected in the repo URL.

Source: https://docs.gitlab.com/ee/user/group/subgroups/index.html

I guess this should be an easy fix. Should I submit a PR?
> Should I submit a PR?

That would be great, thanks!

Fix patch:
diff --git a/pkg/commands/hosting_service/definitions.go b/pkg/commands/hosting_service/definitions.go
index c53ee050778..39a554c3fca 100644
--- a/pkg/commands/hosting_service/definitions.go
+++ b/pkg/commands/hosting_service/definitions.go
@@ -3,7 +3,7 @@ package hosting_service
 // if you want to make a custom regex for a given service feel free to test it out
 // at regoio.herokuapp.com
 var defaultUrlRegexStrings = []string{
-	`^(?:https?|ssh)://.*/(?P<owner>.*)/(?P<repo>.*?)(?:\.git)?$`,
+	`^(?:https?|ssh)://[^/]+/(?P<owner>.*)/(?P<repo>.*?)(?:\.git)?$`,
 	`^git@.*:(?P<owner>.*)/(?P<repo>.*?)(?:\.git)?$`,
 }
 var defaultRepoURLTemplate = "https://{{.webDomain}}/{{.owner}}/{{.repo}}"


Test patch:
diff --git a/pkg/commands/hosting_service/hosting_service_test.go b/pkg/commands/hosting_service/hosting_service_test.go
index b92daa98d54..ded310c858f 100644
--- a/pkg/commands/hosting_service/hosting_service_test.go
+++ b/pkg/commands/hosting_service/hosting_service_test.go
@@ -47,6 +47,15 @@ func TestGetPullRequestURL(t *testing.T) {
 				assert.Equal(t, "https://github.com/peter/calculator/compare/feature%2Fsum-operation?expand=1", url)
 			},
 		},
+		{
+			testName:  "Opens a link to new pull request on github with https remote url",
+			from:      "feature/sum-operation",
+			remoteUrl: "https://github.com/peter/calculator.git",
+			test: func(url string, err error) {
+				assert.NoError(t, err)
+				assert.Equal(t, "https://github.com/peter/calculator/compare/feature%2Fsum-operation?expand=1", url)
+			},
+		},
 		{
 			testName:  "Opens a link to new pull request on bitbucket with specific target branch",
 			from:      "feature/profile-page/avatar",
@@ -77,6 +86,16 @@ func TestGetPullRequestURL(t *testing.T) {
 				assert.Equal(t, "https://github.com/peter/calculator/compare/feature%2Foperations...feature%2Fsum-operation?expand=1", url)
 			},
 		},
+		{
+			testName:  "Opens a link to new pull request on github with https remote url with specific target branch",
+			from:      "feature/sum-operation",
+			to:        "feature/operations",
+			remoteUrl: "https://github.com/peter/calculator.git",
+			test: func(url string, err error) {
+				assert.NoError(t, err)
+				assert.Equal(t, "https://github.com/peter/calculator/compare/feature%2Foperations...feature%2Fsum-operation?expand=1", url)
+			},
+		},
 		{
 			testName:  "Opens a link to new pull request on gitlab",
 			from:      "feature/ui",
@@ -95,6 +114,15 @@ func TestGetPullRequestURL(t *testing.T) {
 				assert.Equal(t, "https://gitlab.com/peter/public/calculator/merge_requests/new?merge_request[source_branch]=feature%2Fui", url)
 			},
 		},
+		{
+			testName:  "Opens a link to new pull request on gitlab with https remote url in nested groups",
+			from:      "feature/ui",
+			remoteUrl: "https://gitlab.com/peter/public/calculator.git",
+			test: func(url string, err error) {
+				assert.NoError(t, err)
+				assert.Equal(t, "https://gitlab.com/peter/public/calculator/merge_requests/new?merge_request[source_branch]=feature%2Fui", url)
+			},
+		},
 		{
 			testName:  "Opens a link to new pull request on gitlab with specific target branch",
 			from:      "feature/commit-ui",
@@ -115,6 +143,16 @@ func TestGetPullRequestURL(t *testing.T) {
 				assert.Equal(t, "https://gitlab.com/peter/public/calculator/merge_requests/new?merge_request[source_branch]=feature%2Fcommit-ui&merge_request[target_branch]=epic%2Fui", url)
 			},
 		},
+		{
+			testName:  "Opens a link to new pull request on gitlab with https remote url with specific target branch in nested groups",
+			from:      "feature/commit-ui",
+			to:        "epic/ui",
+			remoteUrl: "https://gitlab.com/peter/public/calculator.git",
+			test: func(url string, err error) {
+				assert.NoError(t, err)
+				assert.Equal(t, "https://gitlab.com/peter/public/calculator/merge_requests/new?merge_request[source_branch]=feature%2Fcommit-ui&merge_request[target_branch]=epic%2Fui", url)
+			},
+		},
 		{
 			testName:  "Opens a link to new pull request on bitbucket with a custom SSH username",
 			from:      "feature/profile-page",