diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-07-13 11:34:00 +0200 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2017-07-13 11:34:00 +0200 |
commit | 1354c5f243ceb35a8b06475b6e64c686cc4afa83 (patch) | |
tree | 8e20c9c10b6bc0bb4d667ef2a2c3b6d8b795d46b | |
parent | b54325f0da2baeb800ac10b0f4993bab0aa88882 (diff) | |
download | go-git-1354c5f243ceb35a8b06475b6e64c686cc4afa83.tar.gz |
worktree: test improvemnts on empty worktree
-rw-r--r-- | common_test.go | 55 | ||||
-rw-r--r-- | worktree_test.go | 42 |
2 files changed, 61 insertions, 36 deletions
diff --git a/common_test.go b/common_test.go index 3f5364c..21b4481 100644 --- a/common_test.go +++ b/common_test.go @@ -3,6 +3,7 @@ package git import ( "testing" + billy "gopkg.in/src-d/go-billy.v3" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/plumbing/format/packfile" "gopkg.in/src-d/go-git.v4/plumbing/transport" @@ -12,7 +13,7 @@ import ( "github.com/src-d/go-git-fixtures" . "gopkg.in/check.v1" "gopkg.in/src-d/go-billy.v3/memfs" - "gopkg.in/src-d/go-billy.v3/osfs" + "gopkg.in/src-d/go-billy.v3/util" ) func Test(t *testing.T) { TestingT(t) } @@ -41,19 +42,65 @@ func (s *BaseSuite) buildBasicRepository(c *C) { s.Repository = s.NewRepository(f) } +// NewRepository returns a new repository using the .git folder, if the fixture +// is tagged as worktree the filesystem from fixture is used, otherwise a new +// memfs filesystem is used as worktree. func (s *BaseSuite) NewRepository(f *fixtures.Fixture) *Repository { - fs := osfs.New(f.DotGit().Root()) - st, err := filesystem.NewStorage(fs) + var worktree, dotgit billy.Filesystem + if f.Is("worktree") { + r, err := PlainOpen(f.Worktree().Root()) + if err != nil { + panic(err) + } + + return r + } + + dotgit = f.DotGit() + worktree = memfs.New() + + st, err := filesystem.NewStorage(dotgit) + if err != nil { + panic(err) + } + + r, err := Open(st, worktree) + if err != nil { + panic(err) + } + + return r +} + +// NewRepositoryWithEmptyWorktree returns a new repository using the .git folder +// from the fixture but without a empty memfs worktree, the index and the +// modules are deleted from the .git folder. +func (s *BaseSuite) NewRepositoryWithEmptyWorktree(f *fixtures.Fixture) *Repository { + dotgit := f.DotGit() + err := dotgit.Remove("index") if err != nil { panic(err) } - r, err := Open(st, fs) + err = util.RemoveAll(dotgit, "modules") + if err != nil { + panic(err) + } + + worktree := memfs.New() + + st, err := filesystem.NewStorage(dotgit) + if err != nil { + panic(err) + } + + r, err := Open(st, worktree) if err != nil { panic(err) } return r + } func (s *BaseSuite) NewRepositoryFromPackfile(f *fixtures.Fixture) *Repository { diff --git a/worktree_test.go b/worktree_test.go index 875f8d5..864e19e 100644 --- a/worktree_test.go +++ b/worktree_test.go @@ -25,9 +25,8 @@ type WorktreeSuite struct { var _ = Suite(&WorktreeSuite{}) func (s *WorktreeSuite) SetUpTest(c *C) { - s.buildBasicRepository(c) - // the index is removed if not the Repository will be not clean - c.Assert(s.Repository.Storer.SetIndex(&index.Index{Version: 2}), IsNil) + f := fixtures.Basic().One() + s.Repository = s.NewRepositoryWithEmptyWorktree(f) } func (s *WorktreeSuite) TestCheckout(c *C) { @@ -87,13 +86,9 @@ func (s *WorktreeSuite) TestCheckoutSymlink(c *C) { func (s *WorktreeSuite) TestCheckoutSubmodule(c *C) { url := "https://github.com/git-fixtures/submodule.git" - w := &Worktree{ - r: s.NewRepository(fixtures.ByURL(url).One()), - fs: memfs.New(), - } + r := s.NewRepositoryWithEmptyWorktree(fixtures.ByURL(url).One()) - // we delete the index, since the fixture comes with a real index - err := w.r.Storer.SetIndex(&index.Index{Version: 2}) + w, err := r.Worktree() c.Assert(err, IsNil) err = w.Checkout(&CheckoutOptions{}) @@ -106,16 +101,11 @@ func (s *WorktreeSuite) TestCheckoutSubmodule(c *C) { func (s *WorktreeSuite) TestCheckoutSubmoduleInitialized(c *C) { url := "https://github.com/git-fixtures/submodule.git" - w := &Worktree{ - r: s.NewRepository(fixtures.ByURL(url).One()), - fs: memfs.New(), - } + r := s.NewRepository(fixtures.ByURL(url).One()) - err := w.r.Storer.SetIndex(&index.Index{Version: 2}) + w, err := r.Worktree() c.Assert(err, IsNil) - err = w.Checkout(&CheckoutOptions{}) - c.Assert(err, IsNil) sub, err := w.Submodules() c.Assert(err, IsNil) @@ -228,15 +218,8 @@ func (s *WorktreeSuite) TestCheckoutChange(c *C) { func (s *WorktreeSuite) TestCheckoutTag(c *C) { f := fixtures.ByTag("tags").One() - - fs := memfs.New() - w := &Worktree{ - r: s.NewRepository(f), - fs: fs, - } - - // we delete the index, since the fixture comes with a real index - err := w.r.Storer.SetIndex(&index.Index{Version: 2}) + r := s.NewRepositoryWithEmptyWorktree(f) + w, err := r.Worktree() c.Assert(err, IsNil) err = w.Checkout(&CheckoutOptions{}) @@ -282,14 +265,9 @@ func (s *WorktreeSuite) TestCheckoutBisectSubmodules(c *C) { // checking every commit over the previous commit func (s *WorktreeSuite) testCheckoutBisect(c *C, url string) { f := fixtures.ByURL(url).One() + r := s.NewRepositoryWithEmptyWorktree(f) - w := &Worktree{ - r: s.NewRepository(f), - fs: memfs.New(), - } - - // we delete the index, since the fixture comes with a real index - err := w.r.Storer.SetIndex(&index.Index{Version: 2}) + w, err := r.Worktree() c.Assert(err, IsNil) iter, err := w.r.Log(&LogOptions{}) |