diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-06-18 12:15:40 +0200 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2017-06-18 12:15:40 +0200 |
commit | abb9ec0f3efea571b7f19b7391eb7c152c899f45 (patch) | |
tree | 703bcd8caf958007e90d6694e5225084b3ddfdb5 | |
parent | bf3a92052f715c507ace0cb9f2b7fb358f623abc (diff) | |
download | go-git-abb9ec0f3efea571b7f19b7391eb7c152c899f45.tar.gz |
*: upgrade to go-billy.v3, merge
31 files changed, 148 insertions, 134 deletions
diff --git a/appveyor.yml b/appveyor.yml index f36ebe7..160616b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,10 +11,9 @@ environment: GOPATH: c:\gopath install: - - set PATH=%GOPATH%\bin;c:\go\bin;%PATH% + - set PATH=%GOPATH%\bin;c:\go\bin;"C:\Program Files\Git\mingw64\bin";%PATH% - go version - go get -v -t ./... - - git config --global user.email "travis@example.com" - git config --global user.name "Travis CI diff --git a/common_test.go b/common_test.go index e1a2a0f..3f5364c 100644 --- a/common_test.go +++ b/common_test.go @@ -11,8 +11,8 @@ import ( "github.com/src-d/go-git-fixtures" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/memfs" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/memfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) func Test(t *testing.T) { TestingT(t) } @@ -42,7 +42,7 @@ func (s *BaseSuite) buildBasicRepository(c *C) { } func (s *BaseSuite) NewRepository(f *fixtures.Fixture) *Repository { - fs := osfs.New(f.DotGit().Base()) + fs := osfs.New(f.DotGit().Root()) st, err := filesystem.NewStorage(fs) if err != nil { panic(err) @@ -94,7 +94,7 @@ func (s *BaseSuite) GetBasicLocalRepositoryURL() string { } func (s *BaseSuite) GetLocalRepositoryURL(f *fixtures.Fixture) string { - return f.DotGit().Base() + return f.DotGit().Root() } type SuiteCommon struct{} diff --git a/example_test.go b/example_test.go index abcbec7..585b38a 100644 --- a/example_test.go +++ b/example_test.go @@ -13,7 +13,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/storage/memory" - "gopkg.in/src-d/go-billy.v2/memfs" + "gopkg.in/src-d/go-billy.v3/memfs" ) func ExampleClone() { diff --git a/plumbing/format/packfile/decoder_test.go b/plumbing/format/packfile/decoder_test.go index f081fd7..f1e2ed7 100644 --- a/plumbing/format/packfile/decoder_test.go +++ b/plumbing/format/packfile/decoder_test.go @@ -3,7 +3,7 @@ package packfile_test import ( "io" - "gopkg.in/src-d/go-billy.v2/memfs" + "gopkg.in/src-d/go-billy.v3/memfs" "github.com/src-d/go-git-fixtures" "gopkg.in/src-d/go-git.v4/plumbing" diff --git a/plumbing/transport/file/receive_pack_test.go b/plumbing/transport/file/receive_pack_test.go index 5bbad44..ab21aea 100644 --- a/plumbing/transport/file/receive_pack_test.go +++ b/plumbing/transport/file/receive_pack_test.go @@ -23,11 +23,11 @@ func (s *ReceivePackSuite) SetUpSuite(c *C) { func (s *ReceivePackSuite) SetUpTest(c *C) { fixture := fixtures.Basic().One() - path := fixture.DotGit().Base() + path := fixture.DotGit().Root() s.Endpoint = prepareRepo(c, path) fixture = fixtures.ByTag("empty").One() - path = fixture.DotGit().Base() + path = fixture.DotGit().Root() s.EmptyEndpoint = prepareRepo(c, path) s.NonExistentEndpoint = prepareRepo(c, "/non-existent") diff --git a/plumbing/transport/file/server_test.go b/plumbing/transport/file/server_test.go index 176d6ee..ee72282 100644 --- a/plumbing/transport/file/server_test.go +++ b/plumbing/transport/file/server_test.go @@ -24,10 +24,10 @@ func (s *ServerSuite) SetUpSuite(c *C) { s.RemoteName = "test" fixture := fixtures.Basic().One() - s.SrcPath = fixture.DotGit().Base() + s.SrcPath = fixture.DotGit().Root() fixture = fixtures.ByTag("empty").One() - s.DstPath = fixture.DotGit().Base() + s.DstPath = fixture.DotGit().Root() cmd := exec.Command("git", "remote", "add", s.RemoteName, s.DstPath) cmd.Dir = s.SrcPath diff --git a/plumbing/transport/file/upload_pack_test.go b/plumbing/transport/file/upload_pack_test.go index f013683..f894935 100644 --- a/plumbing/transport/file/upload_pack_test.go +++ b/plumbing/transport/file/upload_pack_test.go @@ -24,13 +24,13 @@ func (s *UploadPackSuite) SetUpSuite(c *C) { s.UploadPackSuite.Client = DefaultClient fixture := fixtures.Basic().One() - path := fixture.DotGit().Base() + path := fixture.DotGit().Root() ep, err := transport.NewEndpoint(path) c.Assert(err, IsNil) s.Endpoint = ep fixture = fixtures.ByTag("empty").One() - path = fixture.DotGit().Base() + path = fixture.DotGit().Root() ep, err = transport.NewEndpoint(path) c.Assert(err, IsNil) s.EmptyEndpoint = ep @@ -74,6 +74,7 @@ func (s *UploadPackSuite) TestNonExistentCommand(c *C) { cmd := "/non-existent-git" client := NewClient(cmd, cmd) session, err := client.NewUploadPackSession(s.Endpoint, s.EmptyAuth) - c.Assert(err, ErrorMatches, ".*no such file or directory.*") + // Error message is OS-dependant, so do a broad check + c.Assert(err, ErrorMatches, ".*file.*") c.Assert(session, IsNil) } diff --git a/plumbing/transport/git/receive_pack_test.go b/plumbing/transport/git/receive_pack_test.go index d73966e..326ef1b 100644 --- a/plumbing/transport/git/receive_pack_test.go +++ b/plumbing/transport/git/receive_pack_test.go @@ -43,7 +43,7 @@ func (s *ReceivePackSuite) SetUpTest(c *C) { err = os.MkdirAll(interpolatedBase, 0755) c.Assert(err, IsNil) - dotgit := fixtures.Basic().One().DotGit().Base() + dotgit := fixtures.Basic().One().DotGit().Root() prepareRepo(c, dotgit) err = os.Rename(dotgit, filepath.Join(interpolatedBase, "basic.git")) c.Assert(err, IsNil) @@ -52,7 +52,7 @@ func (s *ReceivePackSuite) SetUpTest(c *C) { c.Assert(err, IsNil) s.ReceivePackSuite.Endpoint = ep - dotgit = fixtures.ByTag("empty").One().DotGit().Base() + dotgit = fixtures.ByTag("empty").One().DotGit().Root() prepareRepo(c, dotgit) err = os.Rename(dotgit, filepath.Join(interpolatedBase, "empty.git")) c.Assert(err, IsNil) diff --git a/plumbing/transport/server/loader.go b/plumbing/transport/server/loader.go index 386c2f0..d4eccd4 100644 --- a/plumbing/transport/server/loader.go +++ b/plumbing/transport/server/loader.go @@ -5,8 +5,8 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing/transport" "gopkg.in/src-d/go-git.v4/storage/filesystem" - "gopkg.in/src-d/go-billy.v2" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3" + "gopkg.in/src-d/go-billy.v3/osfs" ) // DefaultLoader is a filesystem loader ignoring host and resolving paths to /. @@ -34,7 +34,11 @@ func NewFilesystemLoader(base billy.Filesystem) Loader { // storer for it. Returns transport.ErrRepositoryNotFound if a repository does // not exist in the given path. func (l *fsLoader) Load(ep transport.Endpoint) (storer.Storer, error) { - fs := l.base.Dir(ep.Path()) + fs, err := l.base.Chroot(ep.Path()) + if err != nil { + return nil, err + } + if _, err := fs.Stat("config"); err != nil { return nil, transport.ErrRepositoryNotFound } diff --git a/plumbing/transport/server/server_test.go b/plumbing/transport/server/server_test.go index 6a64674..0f7201c 100644 --- a/plumbing/transport/server/server_test.go +++ b/plumbing/transport/server/server_test.go @@ -1,7 +1,6 @@ package server_test import ( - "fmt" "testing" "github.com/src-d/go-git-fixtures" @@ -16,8 +15,6 @@ import ( func Test(t *testing.T) { TestingT(t) } -const inprocScheme = "inproc" - type BaseSuite struct { fixtures.Suite loader server.MapLoader @@ -29,15 +26,15 @@ func (s *BaseSuite) SetUpSuite(c *C) { s.Suite.SetUpSuite(c) s.loader = server.MapLoader{} s.client = server.NewServer(s.loader) - s.clientBackup = client.Protocols[inprocScheme] - client.Protocols[inprocScheme] = s.client + s.clientBackup = client.Protocols["file"] + client.Protocols["file"] = s.client } func (s *BaseSuite) TearDownSuite(c *C) { if s.clientBackup == nil { - delete(client.Protocols, inprocScheme) + delete(client.Protocols, "file") } else { - client.Protocols[inprocScheme] = s.clientBackup + client.Protocols["file"] = s.clientBackup } } @@ -46,9 +43,8 @@ func (s *BaseSuite) prepareRepositories(c *C, basic *transport.Endpoint, f := fixtures.Basic().One() fs := f.DotGit() - path := fs.Base() - url := fmt.Sprintf("%s://%s", inprocScheme, path) - ep, err := transport.NewEndpoint(url) + path := fs.Root() + ep, err := transport.NewEndpoint(path) c.Assert(err, IsNil) *basic = ep sto, err := filesystem.NewStorage(fs) @@ -56,15 +52,13 @@ func (s *BaseSuite) prepareRepositories(c *C, basic *transport.Endpoint, s.loader[ep.String()] = sto path = "/empty.git" - url = fmt.Sprintf("%s://%s", inprocScheme, path) - ep, err = transport.NewEndpoint(url) + ep, err = transport.NewEndpoint(path) c.Assert(err, IsNil) *empty = ep s.loader[ep.String()] = memory.NewStorage() path = "/non-existent.git" - url = fmt.Sprintf("%s://%s", inprocScheme, path) - ep, err = transport.NewEndpoint(url) + ep, err = transport.NewEndpoint(path) c.Assert(err, IsNil) *nonExistent = ep } diff --git a/references_test.go b/references_test.go index 050f169..3697949 100644 --- a/references_test.go +++ b/references_test.go @@ -292,7 +292,7 @@ func (s *ReferencesSuite) TestObjectNotFoundError(c *C) { h1 := plumbing.NewHash("af2d6a6954d532f8ffb47615169c8fdf9d383a1a") hParent := plumbing.NewHash("1669dce138d9b841a518c64b10914d88f5e488ea") - url := fixtures.ByURL("https://github.com/git-fixtures/basic.git").One().DotGit().Base() + url := fixtures.ByURL("https://github.com/git-fixtures/basic.git").One().DotGit().Root() storer := memory.NewStorage() r, err := Clone(storer, nil, &CloneOptions{ URL: url, diff --git a/remote_test.go b/remote_test.go index 8b2f71c..78339d4 100644 --- a/remote_test.go +++ b/remote_test.go @@ -15,7 +15,7 @@ import ( "gopkg.in/src-d/go-git.v4/storage/memory" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) type RemoteSuite struct { @@ -214,7 +214,7 @@ func (s *RemoteSuite) TestPushToEmptyRepository(c *C) { c.Assert(err, IsNil) dstFs := fixtures.ByTag("empty").One().DotGit() - url := dstFs.Base() + url := dstFs.Root() r := newRemote(sto, &config.RemoteConfig{ Name: DefaultRemoteName, @@ -254,7 +254,7 @@ func (s *RemoteSuite) TestPushTags(c *C) { c.Assert(err, IsNil) dstFs := fixtures.ByTag("empty").One().DotGit() - url := dstFs.Base() + url := dstFs.Root() r := newRemote(sto, &config.RemoteConfig{ Name: DefaultRemoteName, @@ -297,7 +297,7 @@ func (s *RemoteSuite) TestPushNoErrAlreadyUpToDate(c *C) { f := fixtures.Basic().One() sto, err := filesystem.NewStorage(f.DotGit()) c.Assert(err, IsNil) - url := f.DotGit().Base() + url := f.DotGit().Root() r := newRemote(sto, &config.RemoteConfig{ Name: DefaultRemoteName, URL: url, @@ -319,7 +319,7 @@ func (s *RemoteSuite) TestPushRejectNonFastForward(c *C) { dstSto, err := filesystem.NewStorage(dstFs) c.Assert(err, IsNil) - url := dstFs.Base() + url := dstFs.Root() r := newRemote(sto, &config.RemoteConfig{ Name: DefaultRemoteName, URL: url, @@ -348,7 +348,7 @@ func (s *RemoteSuite) TestPushForce(c *C) { dstSto, err := filesystem.NewStorage(dstFs) c.Assert(err, IsNil) - url := dstFs.Base() + url := dstFs.Root() r := newRemote(sto, &config.RemoteConfig{ Name: DefaultRemoteName, URL: url, @@ -377,7 +377,7 @@ func (s *RemoteSuite) TestPushNewReference(c *C) { dstSto, err := filesystem.NewStorage(dstFs) c.Assert(err, IsNil) - url := dstFs.Base() + url := dstFs.Root() r := newRemote(sto, &config.RemoteConfig{ Name: DefaultRemoteName, URL: url, diff --git a/repository.go b/repository.go index a3e441b..a60f3ef 100644 --- a/repository.go +++ b/repository.go @@ -17,8 +17,8 @@ import ( "gopkg.in/src-d/go-git.v4/storage/filesystem" "gopkg.in/src-d/go-git.v4/utils/ioutil" - "gopkg.in/src-d/go-billy.v2" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3" + "gopkg.in/src-d/go-billy.v3/osfs" ) var ( @@ -92,11 +92,6 @@ func setWorktreeAndStoragePaths(r *Repository, worktree billy.Filesystem) error return nil } - _, isOS := fs.Filesystem().(*osfs.OS) - if !isOS { - return nil - } - if err := createDotGitFile(worktree, fs.Filesystem()); err != nil { return err } @@ -105,9 +100,9 @@ func setWorktreeAndStoragePaths(r *Repository, worktree billy.Filesystem) error } func createDotGitFile(worktree, storage billy.Filesystem) error { - path, err := filepath.Rel(worktree.Base(), storage.Base()) + path, err := filepath.Rel(worktree.Root(), storage.Root()) if err != nil { - path = storage.Base() + path = storage.Root() } if path == ".git" { @@ -126,9 +121,9 @@ func createDotGitFile(worktree, storage billy.Filesystem) error { } func setConfigWorktree(r *Repository, worktree, storage billy.Filesystem) error { - path, err := filepath.Rel(storage.Base(), worktree.Base()) + path, err := filepath.Rel(storage.Root(), worktree.Root()) if err != nil { - path = worktree.Base() + path = worktree.Root() } if path == ".." { @@ -194,7 +189,7 @@ func PlainInit(path string, isBare bool) (*Repository, error) { dot = osfs.New(path) } else { wt = osfs.New(path) - dot = wt.Dir(".git") + dot, _ = wt.Chroot(".git") } s, err := filesystem.NewStorage(dot) @@ -209,7 +204,7 @@ func PlainInit(path string, isBare bool) (*Repository, error) { // repository is bare or a normal one. If the path doesn't contain a valid // repository ErrRepositoryNotExists is returned func PlainOpen(path string) (*Repository, error) { - dot, wt, err := dotGitToFilesystems(path) + dot, wt, err := dotGitToOSFilesystems(path) if err != nil { return nil, err } @@ -230,7 +225,7 @@ func PlainOpen(path string) (*Repository, error) { return Open(s, wt) } -func dotGitToFilesystems(path string) (dot, wt billy.Filesystem, err error) { +func dotGitToOSFilesystems(path string) (dot, wt billy.Filesystem, err error) { fs := osfs.New(path) fi, err := fs.Stat(".git") if err != nil { @@ -242,10 +237,11 @@ func dotGitToFilesystems(path string) (dot, wt billy.Filesystem, err error) { } if fi.IsDir() { - return fs.Dir(".git"), fs, nil + dot, err = fs.Chroot(".git") + return dot, fs, err } - dot, err = dotGitFileToFilesystem(fs) + dot, err = dotGitFileToOSFilesystem(path, fs) if err != nil { return nil, nil, err } @@ -253,7 +249,7 @@ func dotGitToFilesystems(path string) (dot, wt billy.Filesystem, err error) { return dot, fs, nil } -func dotGitFileToFilesystem(fs billy.Filesystem) (billy.Filesystem, error) { +func dotGitFileToOSFilesystem(path string, fs billy.Filesystem) (billy.Filesystem, error) { var err error f, err := fs.Open(".git") @@ -279,7 +275,7 @@ func dotGitFileToFilesystem(fs billy.Filesystem) (billy.Filesystem, error) { return osfs.New(gitdir), nil } - return fs.Dir(gitdir), err + return osfs.New(fs.Join(path, gitdir)), nil } // PlainClone a repository into the path with the given options, isBare defines diff --git a/repository_test.go b/repository_test.go index deb3f58..f622007 100644 --- a/repository_test.go +++ b/repository_test.go @@ -18,8 +18,8 @@ import ( "gopkg.in/src-d/go-git.v4/storage/memory" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/memfs" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/memfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) type RepositorySuite struct { @@ -44,23 +44,25 @@ func (s *RepositorySuite) TestInitNonStandardDotGit(c *C) { c.Assert(os.RemoveAll(dir), IsNil) fs := osfs.New(dir) - storage, err := filesystem.NewStorage(fs.Dir("storage")) + dot, _ := fs.Chroot("storage") + storage, err := filesystem.NewStorage(dot) c.Assert(err, IsNil) - r, err := Init(storage, fs.Dir("worktree")) + wt, _ := fs.Chroot("worktree") + r, err := Init(storage, wt) c.Assert(err, IsNil) c.Assert(r, NotNil) - f, err := fs.Open("worktree/.git") + f, err := fs.Open(fs.Join("worktree", ".git")) c.Assert(err, IsNil) all, err := ioutil.ReadAll(f) c.Assert(err, IsNil) - c.Assert(string(all), Equals, "gitdir: ../storage\n") + c.Assert(string(all), Equals, fmt.Sprintf("gitdir: %s\n", filepath.Join("..", "storage"))) cfg, err := r.Config() c.Assert(err, IsNil) - c.Assert(cfg.Core.Worktree, Equals, "../worktree") + c.Assert(cfg.Core.Worktree, Equals, filepath.Join("..", "worktree")) } func (s *RepositorySuite) TestInitStandardDotGit(c *C) { @@ -69,7 +71,8 @@ func (s *RepositorySuite) TestInitStandardDotGit(c *C) { c.Assert(os.RemoveAll(dir), IsNil) fs := osfs.New(dir) - storage, err := filesystem.NewStorage(fs.Dir(".git")) + dot, _ := fs.Chroot(".git") + storage, err := filesystem.NewStorage(dot) c.Assert(err, IsNil) r, err := Init(storage, fs) @@ -386,7 +389,7 @@ func (s *RepositorySuite) TestPlainCloneWithRecurseSubmodules(c *C) { c.Assert(err, IsNil) defer os.RemoveAll(dir) - path := fixtures.ByTag("submodule").One().Worktree().Base() + path := fixtures.ByTag("submodule").One().Worktree().Root() r, err := PlainClone(dir, false, &CloneOptions{ URL: path, RecurseSubmodules: DefaultSubmoduleRecursionDepth, @@ -669,7 +672,7 @@ func (s *RepositorySuite) TestPullProgress(c *C) { } func (s *RepositorySuite) TestPullProgressWithRecursion(c *C) { - path := fixtures.ByTag("submodule").One().Worktree().Base() + path := fixtures.ByTag("submodule").One().Worktree().Root() dir, err := ioutil.TempDir("", "plain-clone-submodule") c.Assert(err, IsNil) @@ -691,7 +694,7 @@ func (s *RepositorySuite) TestPullProgressWithRecursion(c *C) { } func (s *RepositorySuite) TestPullAdd(c *C) { - path := fixtures.Basic().ByTag("worktree").One().Worktree().Base() + path := fixtures.Basic().ByTag("worktree").One().Worktree().Root() r, err := Clone(memory.NewStorage(), nil, &CloneOptions{ URL: filepath.Join(path, ".git"), @@ -729,7 +732,7 @@ func (s *RepositorySuite) TestPushToEmptyRepository(c *C) { c.Assert(err, IsNil) dstFs := fixtures.ByTag("empty").One().DotGit() - url := dstFs.Base() + url := dstFs.Root() r, err := Open(sto, srcFs) c.Assert(err, IsNil) diff --git a/storage/filesystem/config_test.go b/storage/filesystem/config_test.go index b2879b3..1b812e6 100644 --- a/storage/filesystem/config_test.go +++ b/storage/filesystem/config_test.go @@ -8,7 +8,7 @@ import ( "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) type ConfigSuite struct { diff --git a/storage/filesystem/internal/dotgit/dotgit.go b/storage/filesystem/internal/dotgit/dotgit.go index 1af64ab..c48f24c 100644 --- a/storage/filesystem/internal/dotgit/dotgit.go +++ b/storage/filesystem/internal/dotgit/dotgit.go @@ -12,7 +12,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/utils/ioutil" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" ) const ( @@ -357,7 +357,7 @@ func (d *DotGit) rewritePackedRefsWithoutRef(name plumbing.ReferenceName) (err e return err } - tmpPath := tmp.Filename() + tmpPath := tmp.Name() defer ioutil.CheckClose(tmp, &err) defer d.fs.Remove(tmpPath) @@ -413,11 +413,11 @@ func (d *DotGit) processLine(line string) (*plumbing.Reference, error) { } func (d *DotGit) addRefsFromRefDir(refs *[]*plumbing.Reference) error { - return d.walkReferencesTree(refs, refsPath) + return d.walkReferencesTree(refs, []string{refsPath}) } -func (d *DotGit) walkReferencesTree(refs *[]*plumbing.Reference, relPath string) error { - files, err := d.fs.ReadDir(relPath) +func (d *DotGit) walkReferencesTree(refs *[]*plumbing.Reference, relPath []string) error { + files, err := d.fs.ReadDir(d.fs.Join(relPath...)) if err != nil { if os.IsNotExist(err) { return nil @@ -427,7 +427,7 @@ func (d *DotGit) walkReferencesTree(refs *[]*plumbing.Reference, relPath string) } for _, f := range files { - newRelPath := d.fs.Join(relPath, f.Name()) + newRelPath := append(append([]string(nil), relPath...), f.Name()) if f.IsDir() { if err = d.walkReferencesTree(refs, newRelPath); err != nil { return err @@ -436,7 +436,7 @@ func (d *DotGit) walkReferencesTree(refs *[]*plumbing.Reference, relPath string) continue } - ref, err := d.readReferenceFile(".", newRelPath) + ref, err := d.readReferenceFile(".", strings.Join(newRelPath, "/")) if err != nil { return err } @@ -463,9 +463,8 @@ func (d *DotGit) addRefFromHEAD(refs *[]*plumbing.Reference) error { return nil } -func (d *DotGit) readReferenceFile(refsPath, refFile string) (ref *plumbing.Reference, err error) { - path := d.fs.Join(refsPath, refFile) - +func (d *DotGit) readReferenceFile(path, name string) (ref *plumbing.Reference, err error) { + path = d.fs.Join(path, d.fs.Join(strings.Split(name, "/")...)) f, err := d.fs.Open(path) if err != nil { return nil, err @@ -478,12 +477,12 @@ func (d *DotGit) readReferenceFile(refsPath, refFile string) (ref *plumbing.Refe } line := strings.TrimSpace(string(b)) - return plumbing.NewReferenceFromStrings(refFile, line), nil + return plumbing.NewReferenceFromStrings(name, line), nil } // Module return a billy.Filesystem poiting to the module folder -func (d *DotGit) Module(name string) billy.Filesystem { - return d.fs.Dir(d.fs.Join(modulePath, name)) +func (d *DotGit) Module(name string) (billy.Filesystem, error) { + return d.fs.Chroot(d.fs.Join(modulePath, name)) } func isHex(s string) bool { diff --git a/storage/filesystem/internal/dotgit/dotgit_test.go b/storage/filesystem/internal/dotgit/dotgit_test.go index f06f908..6151c8f 100644 --- a/storage/filesystem/internal/dotgit/dotgit_test.go +++ b/storage/filesystem/internal/dotgit/dotgit_test.go @@ -12,7 +12,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) func Test(t *testing.T) { TestingT(t) } @@ -157,7 +157,7 @@ func (s *SuiteDotGit) TestRemoveRefFromPackedRefs(c *C) { err := dir.RemoveRef(name) c.Assert(err, IsNil) - b, err := ioutil.ReadFile(filepath.Join(fs.Base(), packedRefsPath)) + b, err := ioutil.ReadFile(filepath.Join(fs.Root(), packedRefsPath)) c.Assert(err, IsNil) c.Assert(string(b), Equals, ""+ @@ -170,7 +170,7 @@ func (s *SuiteDotGit) TestRemoveRefNonExistent(c *C) { fs := fixtures.Basic().ByTag(".git").One().DotGit() dir := New(fs) - packedRefs := filepath.Join(fs.Base(), packedRefsPath) + packedRefs := filepath.Join(fs.Root(), packedRefsPath) before, err := ioutil.ReadFile(packedRefs) c.Assert(err, IsNil) @@ -188,7 +188,7 @@ func (s *SuiteDotGit) TestRemoveRefInvalidPackedRefs(c *C) { fs := fixtures.Basic().ByTag(".git").One().DotGit() dir := New(fs) - packedRefs := filepath.Join(fs.Base(), packedRefsPath) + packedRefs := filepath.Join(fs.Root(), packedRefsPath) brokenContent := "BROKEN STUFF REALLY BROKEN" err := ioutil.WriteFile(packedRefs, []byte(brokenContent), os.FileMode(0755)) @@ -198,7 +198,7 @@ func (s *SuiteDotGit) TestRemoveRefInvalidPackedRefs(c *C) { err = dir.RemoveRef(name) c.Assert(err, NotNil) - after, err := ioutil.ReadFile(filepath.Join(fs.Base(), packedRefsPath)) + after, err := ioutil.ReadFile(filepath.Join(fs.Root(), packedRefsPath)) c.Assert(err, IsNil) c.Assert(brokenContent, Equals, string(after)) @@ -208,7 +208,7 @@ func (s *SuiteDotGit) TestRemoveRefInvalidPackedRefs2(c *C) { fs := fixtures.Basic().ByTag(".git").One().DotGit() dir := New(fs) - packedRefs := filepath.Join(fs.Base(), packedRefsPath) + packedRefs := filepath.Join(fs.Root(), packedRefsPath) brokenContent := strings.Repeat("a", bufio.MaxScanTokenSize*2) err := ioutil.WriteFile(packedRefs, []byte(brokenContent), os.FileMode(0755)) @@ -218,7 +218,7 @@ func (s *SuiteDotGit) TestRemoveRefInvalidPackedRefs2(c *C) { err = dir.RemoveRef(name) c.Assert(err, NotNil) - after, err := ioutil.ReadFile(filepath.Join(fs.Base(), packedRefsPath)) + after, err := ioutil.ReadFile(filepath.Join(fs.Root(), packedRefsPath)) c.Assert(err, IsNil) c.Assert(brokenContent, Equals, string(after)) @@ -243,7 +243,7 @@ func (s *SuiteDotGit) TestConfig(c *C) { file, err := dir.Config() c.Assert(err, IsNil) - c.Assert(filepath.Base(file.Filename()), Equals, "config") + c.Assert(filepath.Base(file.Name()), Equals, "config") } func (s *SuiteDotGit) TestConfigWriteAndConfig(c *C) { @@ -362,7 +362,7 @@ func (s *SuiteDotGit) TestObjectPack(c *C) { pack, err := dir.ObjectPack(f.PackfileHash) c.Assert(err, IsNil) - c.Assert(filepath.Ext(pack.Filename()), Equals, ".pack") + c.Assert(filepath.Ext(pack.Name()), Equals, ".pack") } func (s *SuiteDotGit) TestObjectPackIdx(c *C) { @@ -372,7 +372,7 @@ func (s *SuiteDotGit) TestObjectPackIdx(c *C) { idx, err := dir.ObjectPackIdx(f.PackfileHash) c.Assert(err, IsNil) - c.Assert(filepath.Ext(idx.Filename()), Equals, ".idx") + c.Assert(filepath.Ext(idx.Name()), Equals, ".idx") } func (s *SuiteDotGit) TestObjectPackNotFound(c *C) { @@ -445,7 +445,7 @@ func (s *SuiteDotGit) TestObject(c *C) { file, err := dir.Object(hash) c.Assert(err, IsNil) c.Assert(strings.HasSuffix( - file.Filename(), "objects/03/db8e1fbe133a480f2867aac478fd866686d69e"), + file.Name(), fs.Join("objects", "03", "db8e1fbe133a480f2867aac478fd866686d69e")), Equals, true, ) } @@ -464,6 +464,7 @@ func (s *SuiteDotGit) TestSubmodules(c *C) { fs := fixtures.ByTag("submodule").One().DotGit() dir := New(fs) - m := dir.Module("basic") - c.Assert(strings.HasSuffix(m.Base(), ".git/module/basic"), Equals, true) + m, err := dir.Module("basic") + c.Assert(err, IsNil) + c.Assert(strings.HasSuffix(m.Root(), m.Join(".git", "module", "basic")), Equals, true) } diff --git a/storage/filesystem/internal/dotgit/writers.go b/storage/filesystem/internal/dotgit/writers.go index 0d2747f..2407c58 100644 --- a/storage/filesystem/internal/dotgit/writers.go +++ b/storage/filesystem/internal/dotgit/writers.go @@ -10,7 +10,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing/format/objfile" "gopkg.in/src-d/go-git.v4/plumbing/format/packfile" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" ) // PackWriter is a io.Writer that generates the packfile index simultaneously, @@ -36,7 +36,7 @@ func newPackWrite(fs billy.Filesystem) (*PackWriter, error) { return nil, err } - fr, err := fs.Open(fw.Filename()) + fr, err := fs.Open(fw.Name()) if err != nil { return nil, err } @@ -130,7 +130,7 @@ func (w *PackWriter) Close() error { } func (w *PackWriter) clean() error { - return w.fs.Remove(w.fw.Filename()) + return w.fs.Remove(w.fw.Name()) } func (w *PackWriter) save() error { @@ -148,7 +148,7 @@ func (w *PackWriter) save() error { return err } - return w.fs.Rename(w.fw.Filename(), fmt.Sprintf("%s.pack", base)) + return w.fs.Rename(w.fw.Name(), fmt.Sprintf("%s.pack", base)) } func (w *PackWriter) encodeIdx(writer io.Writer) error { @@ -282,5 +282,5 @@ func (w *ObjectWriter) save() error { hash := w.Hash().String() file := w.fs.Join(objectsPath, hash[0:2], hash[2:40]) - return w.fs.Rename(w.f.Filename(), file) + return w.fs.Rename(w.f.Name(), file) } diff --git a/storage/filesystem/internal/dotgit/writers_test.go b/storage/filesystem/internal/dotgit/writers_test.go index e7d7ef9..d2c7b6f 100644 --- a/storage/filesystem/internal/dotgit/writers_test.go +++ b/storage/filesystem/internal/dotgit/writers_test.go @@ -11,7 +11,7 @@ import ( "github.com/src-d/go-git-fixtures" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) func (s *SuiteDotGit) TestNewObjectPack(c *C) { diff --git a/storage/filesystem/module.go b/storage/filesystem/module.go index 2e469d3..6f3de3f 100644 --- a/storage/filesystem/module.go +++ b/storage/filesystem/module.go @@ -10,5 +10,10 @@ type ModuleStorage struct { } func (s *ModuleStorage) Module(name string) (storage.Storer, error) { - return NewStorage(s.dir.Module(name)) + fs, err := s.dir.Module(name) + if err != nil { + return nil, err + } + + return NewStorage(fs) } diff --git a/storage/filesystem/object.go b/storage/filesystem/object.go index 782b99b..dc88108 100644 --- a/storage/filesystem/object.go +++ b/storage/filesystem/object.go @@ -12,7 +12,7 @@ import ( "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" "gopkg.in/src-d/go-git.v4/storage/memory" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" ) type ObjectStorage struct { diff --git a/storage/filesystem/storage.go b/storage/filesystem/storage.go index 768238e..2c7c107 100644 --- a/storage/filesystem/storage.go +++ b/storage/filesystem/storage.go @@ -4,7 +4,7 @@ package filesystem import ( "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" ) // Storage is an implementation of git.Storer that stores data on disk in the diff --git a/storage/filesystem/storage_test.go b/storage/filesystem/storage_test.go index 03d2e86..2ced9dd 100644 --- a/storage/filesystem/storage_test.go +++ b/storage/filesystem/storage_test.go @@ -7,8 +7,8 @@ import ( "gopkg.in/src-d/go-git.v4/storage/test" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2/memfs" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/memfs" + "gopkg.in/src-d/go-billy.v3/osfs" ) func Test(t *testing.T) { TestingT(t) } diff --git a/submodule.go b/submodule.go index fd23b9d..572e6f7 100644 --- a/submodule.go +++ b/submodule.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" + billy "gopkg.in/src-d/go-billy.v3" "gopkg.in/src-d/go-git.v4/config" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/plumbing/format/index" @@ -107,8 +108,17 @@ func (s *Submodule) Repository() (*Repository, error) { return nil, err } - worktree := s.w.fs.Dir(s.c.Path) + var exists bool if err == nil { + exists = true + } + + var worktree billy.Filesystem + if worktree, err = s.w.fs.Chroot(s.c.Path); err != nil { + return nil, err + } + + if exists { return Open(storer, worktree) } diff --git a/submodule_test.go b/submodule_test.go index fdbe4a8..b398664 100644 --- a/submodule_test.go +++ b/submodule_test.go @@ -20,7 +20,7 @@ type SubmoduleSuite struct { var _ = Suite(&SubmoduleSuite{}) func (s *SubmoduleSuite) SetUpTest(c *C) { - path := fixtures.ByTag("submodule").One().Worktree().Base() + path := fixtures.ByTag("submodule").One().Worktree().Root() dir, err := ioutil.TempDir("", "submodule") c.Assert(err, IsNil) @@ -127,7 +127,8 @@ func (s *SubmoduleSuite) TestUpdateWithRecursion(c *C) { c.Assert(err, IsNil) - _, err = s.Worktree.fs.Stat("itself/basic/LICENSE") + fs := s.Worktree.fs + _, err = fs.Stat(fs.Join("itself", "basic", "LICENSE")) c.Assert(err, IsNil) } diff --git a/utils/merkletrie/filesystem/node.go b/utils/merkletrie/filesystem/node.go index fc8f191..5461bd3 100644 --- a/utils/merkletrie/filesystem/node.go +++ b/utils/merkletrie/filesystem/node.go @@ -5,7 +5,7 @@ import ( "os" "path/filepath" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/plumbing/filemode" "gopkg.in/src-d/go-git.v4/utils/merkletrie/noder" @@ -106,7 +106,7 @@ func (n *node) calculateChildren() error { return nil } -func (n *node) newChildNode(file billy.FileInfo) (*node, error) { +func (n *node) newChildNode(file os.FileInfo) (*node, error) { path := filepath.Join(n.path, file.Name()) hash, err := n.calculateHash(path, file) @@ -131,7 +131,7 @@ func (n *node) newChildNode(file billy.FileInfo) (*node, error) { return node, nil } -func (n *node) calculateHash(path string, file billy.FileInfo) ([]byte, error) { +func (n *node) calculateHash(path string, file os.FileInfo) ([]byte, error) { if file.IsDir() { return make([]byte, 24), nil } diff --git a/utils/merkletrie/filesystem/node_test.go b/utils/merkletrie/filesystem/node_test.go index f783c15..a383716 100644 --- a/utils/merkletrie/filesystem/node_test.go +++ b/utils/merkletrie/filesystem/node_test.go @@ -7,8 +7,8 @@ import ( "testing" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2" - "gopkg.in/src-d/go-billy.v2/memfs" + "gopkg.in/src-d/go-billy.v3" + "gopkg.in/src-d/go-billy.v3/memfs" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/utils/merkletrie" "gopkg.in/src-d/go-git.v4/utils/merkletrie/noder" diff --git a/worktree.go b/worktree.go index ad6e0f7..aa30b83 100644 --- a/worktree.go +++ b/worktree.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" + "gopkg.in/src-d/go-billy.v3/util" "gopkg.in/src-d/go-git.v4/config" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/plumbing/filemode" @@ -15,7 +16,7 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing/object" "gopkg.in/src-d/go-git.v4/utils/merkletrie" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" ) var ( @@ -486,7 +487,7 @@ func (w *Worktree) readGitmodulesFile() (*config.Modules, error) { } func rmFileAndDirIfEmpty(fs billy.Filesystem, name string) error { - if err := billy.RemoveAll(fs, name); err != nil { + if err := util.RemoveAll(fs, name); err != nil { return err } diff --git a/worktree_commit.go b/worktree_commit.go index bec75b2..5307b41 100644 --- a/worktree_commit.go +++ b/worktree_commit.go @@ -12,7 +12,7 @@ import ( "gopkg.in/src-d/go-git.v4/storage" "gopkg.in/src-d/go-git.v4/utils/ioutil" - "gopkg.in/src-d/go-billy.v2" + "gopkg.in/src-d/go-billy.v3" ) // Commit stores the current contents of the index in a new commit along with diff --git a/worktree_commit_test.go b/worktree_commit_test.go index 7e1b93c..8f3b7b0 100644 --- a/worktree_commit_test.go +++ b/worktree_commit_test.go @@ -9,8 +9,8 @@ import ( "gopkg.in/src-d/go-git.v4/storage/memory" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2" - "gopkg.in/src-d/go-billy.v2/memfs" + "gopkg.in/src-d/go-billy.v3/memfs" + "gopkg.in/src-d/go-billy.v3/util" ) func (s *WorktreeSuite) TestCommitInvalidOptions(c *C) { @@ -37,7 +37,7 @@ func (s *WorktreeSuite) TestCommitInitial(c *C) { w, err := r.Worktree() c.Assert(err, IsNil) - billy.WriteFile(fs, "foo", []byte("foo"), 0644) + util.WriteFile(fs, "foo", []byte("foo"), 0644) _, err = w.Add("foo") c.Assert(err, IsNil) @@ -61,7 +61,7 @@ func (s *WorktreeSuite) TestCommitParent(c *C) { err := w.Checkout(&CheckoutOptions{}) c.Assert(err, IsNil) - billy.WriteFile(fs, "foo", []byte("foo"), 0644) + util.WriteFile(fs, "foo", []byte("foo"), 0644) _, err = w.Add("foo") c.Assert(err, IsNil) @@ -85,8 +85,8 @@ func (s *WorktreeSuite) TestCommitAll(c *C) { err := w.Checkout(&CheckoutOptions{}) c.Assert(err, IsNil) - billy.WriteFile(fs, "LICENSE", []byte("foo"), 0644) - billy.WriteFile(fs, "foo", []byte("foo"), 0644) + util.WriteFile(fs, "LICENSE", []byte("foo"), 0644) + util.WriteFile(fs, "foo", []byte("foo"), 0644) hash, err := w.Commit("foo\n", &CommitOptions{ All: true, diff --git a/worktree_test.go b/worktree_test.go index 6ca2ed0..4f15005 100644 --- a/worktree_test.go +++ b/worktree_test.go @@ -13,9 +13,9 @@ import ( "github.com/src-d/go-git-fixtures" . "gopkg.in/check.v1" - "gopkg.in/src-d/go-billy.v2" - "gopkg.in/src-d/go-billy.v2/memfs" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3/memfs" + "gopkg.in/src-d/go-billy.v3/osfs" + "gopkg.in/src-d/go-billy.v3/util" ) type WorktreeSuite struct { @@ -471,7 +471,7 @@ func (s *WorktreeSuite) TestStatusDeleted(c *C) { } func (s *WorktreeSuite) TestSubmodule(c *C) { - path := fixtures.ByTag("submodule").One().Worktree().Base() + path := fixtures.ByTag("submodule").One().Worktree().Root() r, err := PlainOpen(path) c.Assert(err, IsNil) @@ -485,7 +485,7 @@ func (s *WorktreeSuite) TestSubmodule(c *C) { } func (s *WorktreeSuite) TestSubmodules(c *C) { - path := fixtures.ByTag("submodule").One().Worktree().Base() + path := fixtures.ByTag("submodule").One().Worktree().Root() r, err := PlainOpen(path) c.Assert(err, IsNil) @@ -512,7 +512,7 @@ func (s *WorktreeSuite) TestAddUntracked(c *C) { c.Assert(err, IsNil) c.Assert(idx.Entries, HasLen, 9) - err = billy.WriteFile(w.fs, "foo", []byte("FOO"), 0755) + err = util.WriteFile(w.fs, "foo", []byte("FOO"), 0755) c.Assert(err, IsNil) hash, err := w.Add("foo") @@ -551,7 +551,7 @@ func (s *WorktreeSuite) TestAddModified(c *C) { c.Assert(err, IsNil) c.Assert(idx.Entries, HasLen, 9) - err = billy.WriteFile(w.fs, "LICENSE", []byte("FOO"), 0644) + err = util.WriteFile(w.fs, "LICENSE", []byte("FOO"), 0644) c.Assert(err, IsNil) hash, err := w.Add("LICENSE") |