From 808e8b1c5ad6ce365dfcb0073572baa37b1587d5 Mon Sep 17 00:00:00 2001 From: Norwin Date: Mon, 6 Sep 2021 18:52:34 +0800 Subject: [PATCH] Correctly match login by ssh host with port (#391) fixes #380 note: It seems like it was expected that `SSHHost` only contains the host portion. So this may be breaking (although I don't believe many people used the feature like that with a custom ssh port). I can't think of a good reason to *not* specify the port in that field, including the port seems more intuitive Co-authored-by: Norwin Reviewed-on: https://gitea.com/gitea/tea/pulls/391 Reviewed-by: Andrew Thornton Reviewed-by: Lunny Xiao Co-authored-by: Norwin Co-committed-by: Norwin --- modules/context/context.go | 7 ++++--- modules/git/url.go | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/context/context.go b/modules/context/context.go index fc7a7b4..efedd40 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -185,8 +185,9 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L return repo, nil, "", err } for _, l := range logins { + sshHost := l.GetSSHHost() for _, u := range remoteConfig.URLs { - p, err := git.ParseURL(strings.TrimSpace(u)) + p, err := git.ParseURL(u) if err != nil { return repo, nil, "", fmt.Errorf("Git remote URL parse failed: %s", err.Error()) } @@ -197,8 +198,8 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L return repo, &l, strings.TrimSuffix(path, ".git"), nil } } else if strings.EqualFold(p.Scheme, "ssh") { - if l.GetSSHHost() == strings.Split(p.Host, ":")[0] { - return repo, &l, strings.TrimLeft(strings.TrimSuffix(p.Path, ".git"), "/"), nil + if sshHost == p.Host { + return repo, &l, strings.TrimLeft(p.Path, "/"), nil } } } diff --git a/modules/git/url.go b/modules/git/url.go index a2f3cc6..5b5a9a5 100644 --- a/modules/git/url.go +++ b/modules/git/url.go @@ -20,6 +20,10 @@ type URLParser struct { // Parse parses the git URL func (p *URLParser) Parse(rawURL string) (u *url.URL, err error) { + rawURL = strings.TrimSpace(rawURL) + + // convert the weird git ssh url format to a canonical url: + // git@gitea.com:gitea/tea -> ssh://git@gitea.com/gitea/tea if !protocolRe.MatchString(rawURL) && strings.Contains(rawURL, ":") && // not a Windows path