Skip to content

Commit

Permalink
Merge pull request #756 from matejrisek/fix/scp-style-submodule-url
Browse files Browse the repository at this point in the history
git: fix the issue with submodules having the SCP style URL fail due to the wrong URL parsing
  • Loading branch information
pjbgf committed Jun 5, 2023
2 parents d4b7c8f + 9706315 commit 4211278
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
14 changes: 7 additions & 7 deletions submodule.go
Expand Up @@ -5,13 +5,13 @@ import (
"context"
"errors"
"fmt"
"net/url"
"path"

"github.com/go-git/go-billy/v5"
"github.com/go-git/go-git/v5/config"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/format/index"
"github.com/go-git/go-git/v5/plumbing/transport"
)

var (
Expand Down Expand Up @@ -133,29 +133,29 @@ func (s *Submodule) Repository() (*Repository, error) {
return nil, err
}

moduleURL, err := url.Parse(s.c.URL)
moduleEndpoint, err := transport.NewEndpoint(s.c.URL)
if err != nil {
return nil, err
}

if !path.IsAbs(moduleURL.Path) {
if !path.IsAbs(moduleEndpoint.Path) && moduleEndpoint.Protocol == "file" {
remotes, err := s.w.r.Remotes()
if err != nil {
return nil, err
}

rootURL, err := url.Parse(remotes[0].c.URLs[0])
rootEndpoint, err := transport.NewEndpoint(remotes[0].c.URLs[0])
if err != nil {
return nil, err
}

rootURL.Path = path.Join(rootURL.Path, moduleURL.Path)
*moduleURL = *rootURL
rootEndpoint.Path = path.Join(rootEndpoint.Path, moduleEndpoint.Path)
*moduleEndpoint = *rootEndpoint
}

_, err = r.CreateRemote(&config.RemoteConfig{
Name: DefaultRemoteName,
URLs: []string{moduleURL.String()},
URLs: []string{moduleEndpoint.String()},
})

return r, err
Expand Down
26 changes: 26 additions & 0 deletions submodule_test.go
Expand Up @@ -5,7 +5,10 @@ import (
"path/filepath"
"testing"

"github.com/go-git/go-billy/v5/memfs"
"github.com/go-git/go-git/v5/config"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/storage/memory"

fixtures "github.com/go-git/go-git-fixtures/v4"
. "gopkg.in/check.v1"
Expand Down Expand Up @@ -258,3 +261,26 @@ func (s *SubmoduleSuite) TestSubmodulesFetchDepth(c *C) {

c.Assert(commitCount, Equals, 1)
}

func (s *SubmoduleSuite) TestSubmoduleParseScp(c *C) {
repo := &Repository{
Storer: memory.NewStorage(),
wt: memfs.New(),
}
worktree := &Worktree{
Filesystem: memfs.New(),
r: repo,
}
submodule := &Submodule{
initialized: true,
c: nil,
w: worktree,
}

submodule.c = &config.Submodule{
URL: "git@github.com:username/submodule_repo",
}

_, err := submodule.Repository()
c.Assert(err, IsNil)
}

0 comments on commit 4211278

Please sign in to comment.