Skip to content

Commit 489c8a1

Browse files
authored
Compare SSH_DOMAIN when parsing submodule URLs (#12753)
Right now we only compare the hostname from a submodule with the prefixURL it is viewed from to check if the submodule is hosted on the same Gitea instance. This adds an additional check to compare it against SSH_DOMAIN as well since the same Gitea instance might have a different hostname for SSH and if the submodule uses that hostname we should also detect that and link to the proper DOMAIN value. Fixes #12747, #9756
1 parent 9af60ce commit 489c8a1

File tree

4 files changed

+27
-23
lines changed

4 files changed

+27
-23
lines changed

modules/git/submodule.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func NewSubModuleFile(c *Commit, refURL, refID string) *SubModuleFile {
3939
}
4040
}
4141

42-
func getRefURL(refURL, urlPrefix, repoFullName string) string {
42+
func getRefURL(refURL, urlPrefix, repoFullName, sshDomain string) string {
4343
if refURL == "" {
4444
return ""
4545
}
@@ -76,7 +76,7 @@ func getRefURL(refURL, urlPrefix, repoFullName string) string {
7676
pth = "/" + pth
7777
}
7878

79-
if urlPrefixHostname == refHostname {
79+
if urlPrefixHostname == refHostname || refHostname == sshDomain {
8080
return urlPrefix + path.Clean(path.Join("/", pth))
8181
}
8282
return "http://" + refHostname + pth
@@ -102,7 +102,7 @@ func getRefURL(refURL, urlPrefix, repoFullName string) string {
102102
return ref.Scheme + "://" + fmt.Sprintf("%v", ref.User) + "@" + ref.Host + ref.Path
103103
}
104104
return ref.Scheme + "://" + ref.Host + ref.Path
105-
} else if urlPrefixHostname == refHostname {
105+
} else if urlPrefixHostname == refHostname || refHostname == sshDomain {
106106
return urlPrefix + path.Clean(path.Join("/", ref.Path))
107107
} else {
108108
return "http://" + refHostname + ref.Path
@@ -114,8 +114,8 @@ func getRefURL(refURL, urlPrefix, repoFullName string) string {
114114
}
115115

116116
// RefURL guesses and returns reference URL.
117-
func (sf *SubModuleFile) RefURL(urlPrefix string, repoFullName string) string {
118-
return getRefURL(sf.refURL, urlPrefix, repoFullName)
117+
func (sf *SubModuleFile) RefURL(urlPrefix, repoFullName, sshDomain string) string {
118+
return getRefURL(sf.refURL, urlPrefix, repoFullName, sshDomain)
119119
}
120120

121121
// RefID returns reference ID.

modules/git/submodule_test.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,29 @@ func TestGetRefURL(t *testing.T) {
1515
refURL string
1616
prefixURL string
1717
parentPath string
18+
SSHDomain string
1819
expect string
1920
}{
20-
{"git://github.com/user1/repo1", "/", "user1/repo2", "http://github.com/user1/repo1"},
21-
{"https://localhost/user1/repo1.git", "/", "user1/repo2", "https://localhost/user1/repo1"},
22-
{"http://localhost/user1/repo1.git", "/", "owner/reponame", "http://localhost/user1/repo1"},
23-
{"[email protected]:user1/repo1.git", "/", "owner/reponame", "http://github.com/user1/repo1"},
24-
{"ssh://[email protected]:2222/zefie/lge_g6_kernel_scripts.git", "/", "zefie/lge_g6_kernel", "http://git.zefie.net/zefie/lge_g6_kernel_scripts"},
25-
{"[email protected]:2222/zefie/lge_g6_kernel_scripts.git", "/", "zefie/lge_g6_kernel", "http://git.zefie.net/2222/zefie/lge_g6_kernel_scripts"},
26-
{"[email protected]:go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "https://try.gitea.io/go-gitea/gitea"},
27-
{"ssh://[email protected]:9999/go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "https://try.gitea.io/go-gitea/gitea"},
28-
{"git://[email protected]:9999/go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "https://try.gitea.io/go-gitea/gitea"},
29-
{"ssh://[email protected]:9999/go-gitea/gitea", "https://127.0.0.1:3000/", "go-gitea/sdk", "https://127.0.0.1:3000/go-gitea/gitea"},
30-
{"https://gitea.com:3000/user1/repo1.git", "https://127.0.0.1:3000/", "user/repo2", "https://gitea.com:3000/user1/repo1"},
31-
{"https://example.gitea.com/gitea/user1/repo1.git", "https://example.gitea.com/gitea/", "user/repo2", "https://example.gitea.com/gitea/user1/repo1"},
32-
{"https://username:[email protected]/username/repository.git", "/", "username/repository2", "https://username:[email protected]/username/repository"},
33-
{"somethingbad", "https://127.0.0.1:3000/go-gitea/gitea", "/", ""},
34-
{"git@localhost:user/repo", "https://localhost/", "user2/repo1", "https://localhost/user/repo"},
35-
{"../path/to/repo.git/", "https://localhost/", "user/repo2", "https://localhost/user/path/to/repo.git"},
21+
{"git://github.com/user1/repo1", "/", "user1/repo2", "", "http://github.com/user1/repo1"},
22+
{"https://localhost/user1/repo1.git", "/", "user1/repo2", "", "https://localhost/user1/repo1"},
23+
{"http://localhost/user1/repo1.git", "/", "owner/reponame", "", "http://localhost/user1/repo1"},
24+
{"[email protected]:user1/repo1.git", "/", "owner/reponame", "", "http://github.com/user1/repo1"},
25+
{"ssh://[email protected]:2222/zefie/lge_g6_kernel_scripts.git", "/", "zefie/lge_g6_kernel", "", "http://git.zefie.net/zefie/lge_g6_kernel_scripts"},
26+
{"[email protected]:2222/zefie/lge_g6_kernel_scripts.git", "/", "zefie/lge_g6_kernel", "", "http://git.zefie.net/2222/zefie/lge_g6_kernel_scripts"},
27+
{"[email protected]:go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "", "https://try.gitea.io/go-gitea/gitea"},
28+
{"ssh://[email protected]:9999/go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "", "https://try.gitea.io/go-gitea/gitea"},
29+
{"git://[email protected]:9999/go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "", "https://try.gitea.io/go-gitea/gitea"},
30+
{"ssh://[email protected]:9999/go-gitea/gitea", "https://127.0.0.1:3000/", "go-gitea/sdk", "", "https://127.0.0.1:3000/go-gitea/gitea"},
31+
{"https://gitea.com:3000/user1/repo1.git", "https://127.0.0.1:3000/", "user/repo2", "", "https://gitea.com:3000/user1/repo1"},
32+
{"https://example.gitea.com/gitea/user1/repo1.git", "https://example.gitea.com/gitea/", "", "user/repo2", "https://example.gitea.com/gitea/user1/repo1"},
33+
{"https://username:[email protected]/username/repository.git", "/", "username/repository2", "", "https://username:[email protected]/username/repository"},
34+
{"somethingbad", "https://127.0.0.1:3000/go-gitea/gitea", "/", "", ""},
35+
{"git@localhost:user/repo", "https://localhost/", "user2/repo1", "", "https://localhost/user/repo"},
36+
{"../path/to/repo.git/", "https://localhost/", "user/repo2", "", "https://localhost/user/path/to/repo.git"},
37+
{"ssh://[email protected]:2222/go-gitea/gitea", "https://try.gitea.io/", "go-gitea/sdk", "ssh.gitea.io", "https://try.gitea.io/go-gitea/gitea"},
3638
}
3739

3840
for _, kase := range kases {
39-
assert.EqualValues(t, kase.expect, getRefURL(kase.refURL, kase.prefixURL, kase.parentPath))
41+
assert.EqualValues(t, kase.expect, getRefURL(kase.refURL, kase.prefixURL, kase.parentPath, kase.SSHDomain))
4042
}
4143
}

routers/repo/view.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,8 @@ func renderDirectory(ctx *context.Context, treeLink string) {
365365
ctx.Data["CanAddFile"] = !ctx.Repo.Repository.IsArchived
366366
ctx.Data["CanUploadFile"] = setting.Repository.Upload.Enabled && !ctx.Repo.Repository.IsArchived
367367
}
368+
369+
ctx.Data["SSHDomain"] = setting.SSH.Domain
368370
}
369371

370372
func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink string) {

templates/repo/view_list.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<span class="truncate">
4848
{{if $entry.IsSubModule}}
4949
{{svg "octicon-file-submodule" 16}}
50-
{{$refURL := $commit.RefURL AppUrl $.Repository.FullName}}
50+
{{$refURL := $commit.RefURL AppUrl $.Repository.FullName $.SSHDomain}}
5151
{{if $refURL}}
5252
<a href="{{$refURL}}">{{$entry.Name}}</a><span class="at">@</span><a href="{{$refURL}}/commit/{{$commit.RefID}}">{{ShortSha $commit.RefID}}</a>
5353
{{else}}

0 commit comments

Comments
 (0)