diff options
author | Axel Christ <axel.christ@inovex.de> | 2020-10-28 16:52:52 +0100 |
---|---|---|
committer | Axel Christ <axel.christ@inovex.de> | 2020-10-28 17:05:05 +0100 |
commit | 81d429bc0f13d05770fa5a824202e07f6f80c001 (patch) | |
tree | 93e5f22e678d9d417f89d8fe0d9b4d15a699a298 /worktree_test.go | |
parent | 15aedd2ff43c25e0d54d6b488114725a266c79d0 (diff) | |
download | go-git-81d429bc0f13d05770fa5a824202e07f6f80c001.tar.gz |
Fix relative submodule resolution
With the current behavior, the config will always hold the resolved,
absolute URL, leavin the user of go-git no choice to determine whether
the original URL is relative or not.
This changes to employ relative URL resolution only when resolving
a submodule to a repository to keep the correct configuration
'unresolved' and intact.
Change relative resolution using `filepath.Dir` to `path.Join` while
parsing both the 'root' and the relative URL with `net/url.URL`.
Adapt test to verify the new behavior.
Re-fixes #184 (see comments).
Diffstat (limited to 'worktree_test.go')
-rw-r--r-- | worktree_test.go | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/worktree_test.go b/worktree_test.go index 93a4a9a..8a7586a 100644 --- a/worktree_test.go +++ b/worktree_test.go @@ -520,7 +520,6 @@ func (s *WorktreeSuite) TestCheckoutSubmoduleInitialized(c *C) { c.Assert(status.IsClean(), Equals, true) } - func (s *WorktreeSuite) TestCheckoutRelativePathSubmoduleInitialized(c *C) { url := "https://github.com/git-fixtures/submodule.git" r := s.NewRepository(fixtures.ByURL(url).One()) @@ -547,13 +546,29 @@ func (s *WorktreeSuite) TestCheckoutRelativePathSubmoduleInitialized(c *C) { // test submodule path modules, err := w.readGitmodulesFile() - c.Assert(modules.Submodules["basic"].URL, Equals, "git@github.com:git-fixtures/basic.git") - c.Assert(modules.Submodules["itself"].URL, Equals, "git@github.com:git-fixtures/submodule.git") + c.Assert(modules.Submodules["basic"].URL, Equals, "../basic.git") + c.Assert(modules.Submodules["itself"].URL, Equals, "../submodule.git") + + basicSubmodule, err := w.Submodule("basic") + c.Assert(err, IsNil) + basicRepo, err := basicSubmodule.Repository() + c.Assert(err, IsNil) + basicRemotes, err := basicRepo.Remotes() + c.Assert(err, IsNil) + c.Assert(basicRemotes[0].Config().URLs[0], Equals, "https://github.com/git-fixtures/basic.git") + + itselfSubmodule, err := w.Submodule("itself") + c.Assert(err, IsNil) + itselfRepo, err := itselfSubmodule.Repository() + c.Assert(err, IsNil) + itselfRemotes, err := itselfRepo.Remotes() + c.Assert(err, IsNil) + c.Assert(itselfRemotes[0].Config().URLs[0], Equals, "https://github.com/git-fixtures/submodule.git") sub, err := w.Submodules() c.Assert(err, IsNil) - err = sub.Update(&SubmoduleUpdateOptions{Init: true, RecurseSubmodules:DefaultSubmoduleRecursionDepth}) + err = sub.Update(&SubmoduleUpdateOptions{Init: true, RecurseSubmodules: DefaultSubmoduleRecursionDepth}) c.Assert(err, IsNil) status, err := w.Status() |