diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-05-22 13:47:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-22 13:47:42 +0200 |
commit | 2ff77a8d93529cefdca922dbed89d4b1cd0ee8e5 (patch) | |
tree | aa27da9eb77c76b9d9912bb94d92c59823446692 /storage/filesystem/internal/dotgit | |
parent | d98ebb5e42cd07007010f6d10db11a792c58206e (diff) | |
parent | 8fbb9914931704257581f5a7474ee3f2abc3780f (diff) | |
download | go-git-2ff77a8d93529cefdca922dbed89d4b1cd0ee8e5.tar.gz |
Merge pull request #398 from mcuadros/init-fix
storage: filesystem, initialize the default folder scaffolding
Diffstat (limited to 'storage/filesystem/internal/dotgit')
-rw-r--r-- | storage/filesystem/internal/dotgit/dotgit.go | 27 | ||||
-rw-r--r-- | storage/filesystem/internal/dotgit/dotgit_test.go | 25 |
2 files changed, 52 insertions, 0 deletions
diff --git a/storage/filesystem/internal/dotgit/dotgit.go b/storage/filesystem/internal/dotgit/dotgit.go index fdfcea7..f9f4d79 100644 --- a/storage/filesystem/internal/dotgit/dotgit.go +++ b/storage/filesystem/internal/dotgit/dotgit.go @@ -66,6 +66,33 @@ func New(fs billy.Filesystem) *DotGit { return &DotGit{fs: fs} } +// Initialize creates all the folder scaffolding. +func (d *DotGit) Initialize() error { + mustExists := []string{ + d.fs.Join("objects", "info"), + d.fs.Join("objects", "pack"), + d.fs.Join("refs", "heads"), + d.fs.Join("refs", "tags"), + } + + for _, path := range mustExists { + _, err := d.fs.Stat(path) + if err == nil { + continue + } + + if !os.IsNotExist(err) { + return err + } + + if err := d.fs.MkdirAll(path, os.ModeDir|os.ModePerm); err != nil { + return err + } + } + + return nil +} + // ConfigWriter returns a file pointer for write to the config file func (d *DotGit) ConfigWriter() (billy.File, error) { return d.fs.Create(configPath) diff --git a/storage/filesystem/internal/dotgit/dotgit_test.go b/storage/filesystem/internal/dotgit/dotgit_test.go index 4bfae1d..f06f908 100644 --- a/storage/filesystem/internal/dotgit/dotgit_test.go +++ b/storage/filesystem/internal/dotgit/dotgit_test.go @@ -23,6 +23,30 @@ type SuiteDotGit struct { var _ = Suite(&SuiteDotGit{}) +func (s *SuiteDotGit) TestInitialize(c *C) { + tmp, err := ioutil.TempDir("", "dot-git") + c.Assert(err, IsNil) + defer os.RemoveAll(tmp) + + fs := osfs.New(tmp) + dir := New(fs) + + err = dir.Initialize() + c.Assert(err, IsNil) + + _, err = fs.Stat(fs.Join("objects", "info")) + c.Assert(err, IsNil) + + _, err = fs.Stat(fs.Join("objects", "pack")) + c.Assert(err, IsNil) + + _, err = fs.Stat(fs.Join("refs", "heads")) + c.Assert(err, IsNil) + + _, err = fs.Stat(fs.Join("refs", "tags")) + c.Assert(err, IsNil) +} + func (s *SuiteDotGit) TestSetRefs(c *C) { tmp, err := ioutil.TempDir("", "dot-git") c.Assert(err, IsNil) @@ -95,6 +119,7 @@ func (s *SuiteDotGit) TestRefsFromPackedRefs(c *C) { c.Assert(ref.Hash().String(), Equals, "e8d3ffab552895c19b9fcf7aa264d277cde33881") } + func (s *SuiteDotGit) TestRefsFromReferenceFile(c *C) { fs := fixtures.Basic().ByTag(".git").One().DotGit() dir := New(fs) |