aboutsummaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorSantiago M. Mola <santi@mola.io>2016-10-24 15:14:22 +0200
committerGitHub <noreply@github.com>2016-10-24 15:14:22 +0200
commitd45eb0402b2f3dace2ed1f91ee53e2c591a7ba3c (patch)
tree7e52ed37c12ec51c6efa3c33c0f38d135bd2c122 /utils
parent8cd772a53e8ecd2687b739eea110fa9b179f1e0f (diff)
downloadgo-git-d45eb0402b2f3dace2ed1f91ee53e2c591a7ba3c.tar.gz
utils/fs: move 'os' and 'test' to separate packages. (#93)
* create utils/fs/test package to expose generic test suite to 3rd party fs implementations. * move 'os' to its own package to avoid cyclic dependency (test -> fs -> test, becomes test -> fs, os -> test, os -> fs). * remove TestCreateAndWrite: some of our implementations cannot read a file that was just created, written and not closed yet.
Diffstat (limited to 'utils')
-rw-r--r--utils/fs/fs.go19
-rw-r--r--utils/fs/os/os.go (renamed from utils/fs/os.go)56
-rw-r--r--utils/fs/os/os_test.go29
-rw-r--r--utils/fs/os_test.go24
-rw-r--r--utils/fs/test/fs_suite.go (renamed from utils/fs/fs_test.go)74
5 files changed, 97 insertions, 105 deletions
diff --git a/utils/fs/fs.go b/utils/fs/fs.go
index 9be0f88..4eaad15 100644
--- a/utils/fs/fs.go
+++ b/utils/fs/fs.go
@@ -8,13 +8,15 @@ import (
)
var (
- ErrClosed = errors.New("File: Writing on closed file.")
+ ErrClosed = errors.New("file: Writing on closed file.")
ErrReadOnly = errors.New("this is a read-only filesystem")
ErrNotSupported = errors.New("feature not supported")
)
type Filesystem interface {
+ //Create opens a file in write-only mode.
Create(filename string) (File, error)
+ //Open opens a file in read-only mode.
Open(filename string) (File, error)
Stat(filename string) (FileInfo, error)
ReadDir(path string) ([]FileInfo, error)
@@ -35,18 +37,3 @@ type File interface {
}
type FileInfo os.FileInfo
-
-type BaseFile struct {
- filename string
- closed bool
-}
-
-//Filename returns the filename from the File
-func (f *BaseFile) Filename() string {
- return f.filename
-}
-
-//IsClosed returns if te file is closed
-func (f *BaseFile) IsClosed() bool {
- return f.closed
-}
diff --git a/utils/fs/os.go b/utils/fs/os/os.go
index db45a1a..0b0173f 100644
--- a/utils/fs/os.go
+++ b/utils/fs/os/os.go
@@ -1,10 +1,12 @@
-package fs
+package os
import (
"io/ioutil"
"os"
"path"
"path/filepath"
+
+ . "gopkg.in/src-d/go-git.v4/utils/fs"
)
// OS a filesystem base on the os filesystem
@@ -37,10 +39,7 @@ func (fs *OS) Create(filename string) (File, error) {
return nil, err
}
- return &OSFile{
- BaseFile: BaseFile{filename: filename},
- file: f,
- }, nil
+ return newOSFile(filename, f), nil
}
func (fs *OS) createDir(fullpath string) error {
@@ -92,10 +91,7 @@ func (fs *OS) Open(filename string) (File, error) {
return nil, err
}
- return &OSFile{
- BaseFile: BaseFile{filename: filename},
- file: f,
- }, nil
+ return newOSFile(filename, f), nil
}
// Stat returns the FileInfo structure describing file.
@@ -125,10 +121,7 @@ func (fs *OS) TempFile(dir, prefix string) (File, error) {
return nil, err
}
- return &OSFile{
- BaseFile: BaseFile{filename: filename},
- file: f,
- }, nil
+ return newOSFile(filename, f), nil
}
// Join joins the specified elements using the filesystem separator.
@@ -147,30 +140,49 @@ func (fs *OS) Base() string {
return fs.base
}
-// OSFile represents a file in the os filesystem
-type OSFile struct {
- file *os.File
- BaseFile
+// osFile represents a file in the os filesystem
+type osFile struct {
+ filename string
+ closed bool
+ file *os.File
+}
+
+func newOSFile(filename string, file *os.File) File {
+ return &osFile{
+ filename: filename,
+ closed: false,
+ file: file,
+ }
}
-func (f *OSFile) Read(p []byte) (int, error) {
+func (f *osFile) Read(p []byte) (int, error) {
return f.file.Read(p)
}
-func (f *OSFile) Seek(offset int64, whence int) (int64, error) {
+func (f *osFile) Seek(offset int64, whence int) (int64, error) {
return f.file.Seek(offset, whence)
}
-func (f *OSFile) Write(p []byte) (int, error) {
+func (f *osFile) Write(p []byte) (int, error) {
return f.file.Write(p)
}
-func (f *OSFile) Close() error {
+func (f *osFile) Close() error {
f.closed = true
return f.file.Close()
}
-func (f *OSFile) ReadAt(p []byte, off int64) (int, error) {
+func (f *osFile) ReadAt(p []byte, off int64) (n int, err error) {
return f.file.ReadAt(p, off)
}
+
+//Filename returns the filename from the File
+func (f *osFile) Filename() string {
+ return f.filename
+}
+
+//IsClosed returns if te file is closed
+func (f *osFile) IsClosed() bool {
+ return f.closed
+}
diff --git a/utils/fs/os/os_test.go b/utils/fs/os/os_test.go
new file mode 100644
index 0000000..02a0a6c
--- /dev/null
+++ b/utils/fs/os/os_test.go
@@ -0,0 +1,29 @@
+package os_test
+
+import (
+ "io/ioutil"
+ stdos "os"
+ "testing"
+
+ . "gopkg.in/check.v1"
+ "gopkg.in/src-d/go-git.v4/utils/fs/os"
+ "gopkg.in/src-d/go-git.v4/utils/fs/test"
+)
+
+func Test(t *testing.T) { TestingT(t) }
+
+type OSSuite struct {
+ test.FilesystemSuite
+ path string
+}
+
+var _ = Suite(&OSSuite{})
+
+func (s *OSSuite) SetUpTest(c *C) {
+ s.path, _ = ioutil.TempDir(stdos.TempDir(), "go-git-os-fs-test")
+ s.FilesystemSuite.Fs = os.NewOS(s.path)
+}
+func (s *OSSuite) TearDownTest(c *C) {
+ err := stdos.RemoveAll(s.path)
+ c.Assert(err, IsNil)
+}
diff --git a/utils/fs/os_test.go b/utils/fs/os_test.go
deleted file mode 100644
index e70c19b..0000000
--- a/utils/fs/os_test.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package fs
-
-import (
- "io/ioutil"
- "os"
-
- . "gopkg.in/check.v1"
-)
-
-type OSSuite struct {
- FilesystemSuite
- path string
-}
-
-var _ = Suite(&OSSuite{})
-
-func (s *OSSuite) SetUpTest(c *C) {
- s.path, _ = ioutil.TempDir(os.TempDir(), "go-git-os-fs-test")
- s.FilesystemSuite.fs = NewOS(s.path)
-}
-func (s *OSSuite) TearDownTest(c *C) {
- err := os.RemoveAll(s.path)
- c.Assert(err, IsNil)
-}
diff --git a/utils/fs/fs_test.go b/utils/fs/test/fs_suite.go
index 428c26c..109311f 100644
--- a/utils/fs/fs_test.go
+++ b/utils/fs/test/fs_suite.go
@@ -1,54 +1,42 @@
-package fs
+package test
import (
- "io"
+ "fmt"
"io/ioutil"
"strings"
"testing"
. "gopkg.in/check.v1"
+ . "gopkg.in/src-d/go-git.v4/utils/fs"
)
func Test(t *testing.T) { TestingT(t) }
type FilesystemSuite struct {
- fs Filesystem
+ Fs Filesystem
}
func (s *FilesystemSuite) TestCreate(c *C) {
- f, err := s.fs.Create("foo")
+ f, err := s.Fs.Create("foo")
c.Assert(err, IsNil)
c.Assert(f.Filename(), Equals, "foo")
}
func (s *FilesystemSuite) TestCreateDepth(c *C) {
- f, err := s.fs.Create("bar/foo")
+ f, err := s.Fs.Create("bar/foo")
c.Assert(err, IsNil)
c.Assert(f.Filename(), Equals, "bar/foo")
}
func (s *FilesystemSuite) TestCreateDepthAbsolute(c *C) {
- f, err := s.fs.Create("/bar/foo")
+ f, err := s.Fs.Create("/bar/foo")
c.Assert(err, IsNil)
c.Assert(f.Filename(), Equals, "bar/foo")
}
-func (s *FilesystemSuite) TestCreateAndWrite(c *C) {
- f, err := s.fs.Create("foo")
- c.Assert(err, IsNil)
- l, err := f.Write([]byte("foo"))
- c.Assert(err, IsNil)
- c.Assert(l, Equals, 3)
-
- f.Seek(0, io.SeekStart)
- wrote, err := ioutil.ReadAll(f)
- c.Assert(err, IsNil)
- c.Assert(wrote, DeepEquals, []byte("foo"))
-}
-
func (s *FilesystemSuite) TestCreateOverwrite(c *C) {
for i := 0; i < 2; i++ {
- f, err := s.fs.Create("foo")
+ f, err := s.Fs.Create("foo")
c.Assert(err, IsNil)
l, err := f.Write([]byte("foo"))
@@ -59,7 +47,7 @@ func (s *FilesystemSuite) TestCreateOverwrite(c *C) {
c.Assert(err, IsNil)
}
- f, err := s.fs.Open("foo")
+ f, err := s.Fs.Open("foo")
c.Assert(err, IsNil)
wrote, err := ioutil.ReadAll(f)
@@ -68,14 +56,14 @@ func (s *FilesystemSuite) TestCreateOverwrite(c *C) {
}
func (s *FilesystemSuite) TestCreateClose(c *C) {
- f, err := s.fs.Create("foo")
+ f, err := s.Fs.Create("foo")
c.Assert(err, IsNil)
c.Assert(f.IsClosed(), Equals, false)
f.Write([]byte("foo"))
c.Assert(f.Close(), IsNil)
- file, err := s.fs.Open(f.Filename())
+ file, err := s.Fs.Open(f.Filename())
c.Assert(err, IsNil)
wrote, err := ioutil.ReadAll(file)
@@ -88,83 +76,83 @@ func (s *FilesystemSuite) TestCreateClose(c *C) {
func (s *FilesystemSuite) TestReadDirAndDir(c *C) {
files := []string{"foo", "bar", "qux/baz", "qux/qux"}
for _, name := range files {
- f, err := s.fs.Create(name)
+ f, err := s.Fs.Create(name)
c.Assert(err, IsNil)
c.Assert(f.Close(), IsNil)
}
- info, err := s.fs.ReadDir("/")
+ info, err := s.Fs.ReadDir("/")
c.Assert(err, IsNil)
c.Assert(info, HasLen, 3)
- info, err = s.fs.ReadDir("/qux")
+ info, err = s.Fs.ReadDir("/qux")
c.Assert(err, IsNil)
c.Assert(info, HasLen, 2)
- qux := s.fs.Dir("/qux")
+ qux := s.Fs.Dir("/qux")
info, err = qux.ReadDir("/")
c.Assert(err, IsNil)
c.Assert(info, HasLen, 2)
}
func (s *FilesystemSuite) TestRename(c *C) {
- f, err := s.fs.Create("foo")
+ f, err := s.Fs.Create("foo")
c.Assert(err, IsNil)
c.Assert(f.Close(), IsNil)
- err = s.fs.Rename("foo", "bar")
+ err = s.Fs.Rename("foo", "bar")
c.Assert(err, IsNil)
- foo, err := s.fs.Stat("foo")
+ foo, err := s.Fs.Stat("foo")
c.Assert(foo, IsNil)
c.Assert(err, NotNil)
- bar, err := s.fs.Stat("bar")
+ bar, err := s.Fs.Stat("bar")
c.Assert(bar, NotNil)
c.Assert(err, IsNil)
}
func (s *FilesystemSuite) TestTempFile(c *C) {
- f, err := s.fs.TempFile("", "bar")
+ f, err := s.Fs.TempFile("", "bar")
c.Assert(err, IsNil)
c.Assert(strings.HasPrefix(f.Filename(), "bar"), Equals, true)
}
func (s *FilesystemSuite) TestTempFileWithPath(c *C) {
- f, err := s.fs.TempFile("foo", "bar")
+ f, err := s.Fs.TempFile("foo", "bar")
c.Assert(err, IsNil)
-
- c.Assert(strings.HasPrefix(f.Filename(), s.fs.Join("foo", "bar")), Equals, true)
+ fmt.Printf("f: %s\n", f.Filename())
+ c.Assert(strings.HasPrefix(f.Filename(), s.Fs.Join("foo", "bar")), Equals, true)
}
func (s *FilesystemSuite) TestTempFileFullWithPath(c *C) {
- f, err := s.fs.TempFile("/foo", "bar")
+ f, err := s.Fs.TempFile("/foo", "bar")
c.Assert(err, IsNil)
-
- c.Assert(strings.HasPrefix(f.Filename(), s.fs.Join("foo", "bar")), Equals, true)
+ fmt.Printf("f: %s\n", f.Filename())
+ c.Assert(strings.HasPrefix(f.Filename(), s.Fs.Join("foo", "bar")), Equals, true)
}
func (s *FilesystemSuite) TestOpenAndStat(c *C) {
- f, err := s.fs.Create("foo")
+ f, err := s.Fs.Create("foo")
c.Assert(err, IsNil)
c.Assert(f.Close(), IsNil)
- foo, err := s.fs.Open("foo")
+ foo, err := s.Fs.Open("foo")
c.Assert(foo, NotNil)
c.Assert(foo.Filename(), Equals, "foo")
c.Assert(err, IsNil)
- stat, err := s.fs.Stat("foo")
+ stat, err := s.Fs.Stat("foo")
c.Assert(stat, NotNil)
c.Assert(err, IsNil)
c.Assert(stat.Name(), Equals, "foo")
}
func (s *FilesystemSuite) TestJoin(c *C) {
- c.Assert(s.fs.Join("foo", "bar"), Equals, "foo/bar")
+ c.Assert(s.Fs.Join("foo", "bar"), Equals, "foo/bar")
}
func (s *FilesystemSuite) TestBase(c *C) {
- c.Assert(s.fs.Base(), Not(Equals), "")
+ c.Assert(s.Fs.Base(), Not(Equals), "")
}