1
// Copyright 2022 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
12
// ErrWrongURLFormat represents an error with wrong url format
13
type ErrWrongURLFormat struct {
17
func (err ErrWrongURLFormat) Error() string {
18
return fmt.Sprintf("git URL %s format is wrong", err.URL)
21
// GitURL represents a git URL
24
extraMark int // 0 no extra 1 scp 2 file path with no prefix
27
// String returns the URL's string
28
func (u *GitURL) String() string {
33
return fmt.Sprintf("%s@%s:%s", u.User.Username(), u.Host, u.Path)
41
// Parse parse all kinds of git URL
42
func Parse(remote string) (*GitURL, error) {
43
if strings.Contains(remote, "://") {
44
u, err := stdurl.Parse(remote)
48
return &GitURL{URL: u}, nil
49
} else if strings.Contains(remote, "@") && strings.Contains(remote, ":") {
53
squareBrackets := false
56
for i := 0; i < len(remote); i++ {
59
url.User = stdurl.User(remote[:i])
63
url.Host = strings.ReplaceAll(remote[lastIndex:i], "%25", "%")
64
if len(remote) <= i+1 {
65
return nil, ErrWrongURLFormat{URL: remote}
67
url.Path = remote[i+1:]
73
squareBrackets = false