diff --git a/pkg/opt/opt.go b/pkg/opt/opt.go index ddc5b61a..41dc6e9c 100644 --- a/pkg/opt/opt.go +++ b/pkg/opt/opt.go @@ -268,14 +268,24 @@ func NewRegistryOptionsFrom(rawUrlorOciRef string, settings *settings.Settings) // NewGitOptionsFromUrl will parse the git options from the git url. // https, http, git and ssh are supported. func NewGitOptionsFromUrl(parsedUrl *url.URL) *GitOptions { - if parsedUrl.Scheme == "" { - return nil + if parsedUrl.Scheme == "" || parsedUrl.Scheme == constants.GitScheme { + // go-getter do not supports git scheme, so we need to convert it to https scheme. + parsedUrl.Scheme = constants.HttpsScheme } + + commit := parsedUrl.Query().Get(constants.GitCommit) + branch := parsedUrl.Query().Get(constants.GitBranch) + tag := parsedUrl.Query().Get(constants.Tag) + + // clean the query in git url + parsedUrl.RawQuery = "" + url := parsedUrl.String() + return &GitOptions{ - Url: parsedUrl.Host + parsedUrl.Path, - Branch: parsedUrl.Query().Get(constants.GitBranch), - Tag: parsedUrl.Query().Get(constants.Tag), - Commit: parsedUrl.Query().Get(constants.GitCommit), + Url: url, + Branch: branch, + Commit: commit, + Tag: tag, } } @@ -283,7 +293,7 @@ func NewGitOptionsFromUrl(parsedUrl *url.URL) *GitOptions { // https, http, oci is supported. func NewOciOptionsFromUrl(parsedUrl *url.URL) *OciOptions { if parsedUrl.Scheme == "" { - return nil + parsedUrl.Scheme = constants.HttpsScheme } return &OciOptions{ Reg: parsedUrl.Host, diff --git a/pkg/opt/opt_test.go b/pkg/opt/opt_test.go index 0e21ad4c..f8e5961f 100644 --- a/pkg/opt/opt_test.go +++ b/pkg/opt/opt_test.go @@ -51,17 +51,22 @@ func TestNewRegistryOptionsFromRef(t *testing.T) { opts, err = NewRegistryOptionsFrom("ssh://github.com/kcl-lang/test1?tag=0.0.1", settings) assert.Equal(t, err, nil) assert.Equal(t, opts.Git.Tag, "0.0.1") - assert.Equal(t, opts.Git.Url, "github.com/kcl-lang/test1") + assert.Equal(t, opts.Git.Url, "ssh://github.com/kcl-lang/test1") opts, err = NewRegistryOptionsFrom("http://github.com/kcl-lang/test1?commit=123456", settings) assert.Equal(t, err, nil) assert.Equal(t, opts.Git.Commit, "123456") - assert.Equal(t, opts.Git.Url, "github.com/kcl-lang/test1") + assert.Equal(t, opts.Git.Url, "http://github.com/kcl-lang/test1") opts, err = NewRegistryOptionsFrom("https://github.com/kcl-lang/test1?branch=main", settings) assert.Equal(t, err, nil) assert.Equal(t, opts.Git.Branch, "main") - assert.Equal(t, opts.Git.Url, "github.com/kcl-lang/test1") + assert.Equal(t, opts.Git.Url, "https://github.com/kcl-lang/test1") + + opts, err = NewRegistryOptionsFrom("git://github.com/kcl-lang/test1?branch=main", settings) + assert.Equal(t, err, nil) + assert.Equal(t, opts.Git.Branch, "main") + assert.Equal(t, opts.Git.Url, "https://github.com/kcl-lang/test1") } func TestNewOciOptions(t *testing.T) {