diff options
author | grunenwflorian <florian.grunenwald1@gmail.com> | 2017-09-05 11:28:36 +0200 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2017-09-05 11:28:36 +0200 |
commit | a33a60d244f94a07adeb70cfe938c97651c0ddc9 (patch) | |
tree | d8d1f4f009951bc84162c646d9a86084e01eb5ed | |
parent | f9879dd043f84936a1f8acb8a53b74332a7ae135 (diff) | |
download | go-git-a33a60d244f94a07adeb70cfe938c97651c0ddc9.tar.gz |
Worktree.Add: Support Add deleted files, fixes #571 (#577)
-rw-r--r-- | worktree_commit_test.go | 36 | ||||
-rw-r--r-- | worktree_status.go | 3 | ||||
-rw-r--r-- | worktree_test.go | 4 |
3 files changed, 43 insertions, 0 deletions
diff --git a/worktree_commit_test.go b/worktree_commit_test.go index f6744bc..09360af 100644 --- a/worktree_commit_test.go +++ b/worktree_commit_test.go @@ -99,6 +99,42 @@ func (s *WorktreeSuite) TestCommitAll(c *C) { assertStorageStatus(c, s.Repository, 13, 11, 10, expected) } +func (s *WorktreeSuite) TestRemoveAndCommitAll(c *C) { + expected := plumbing.NewHash("907cd576c6ced2ecd3dab34a72bf9cf65944b9a9") + + fs := memfs.New() + w := &Worktree{ + r: s.Repository, + Filesystem: fs, + } + + err := w.Checkout(&CheckoutOptions{}) + c.Assert(err, IsNil) + + util.WriteFile(fs, "foo", []byte("foo"), 0644) + _, err = w.Add("foo") + c.Assert(err, IsNil) + + _, errFirst := w.Commit("Add in Repo\n", &CommitOptions{ + Author: defaultSignature(), + }) + c.Assert(errFirst, IsNil) + + errRemove := fs.Remove("foo") + c.Assert(errRemove, IsNil) + + hash, errSecond := w.Commit("Remove foo\n", &CommitOptions{ + All: true, + Author: defaultSignature(), + }) + c.Assert(errSecond, IsNil) + + c.Assert(hash, Equals, expected) + c.Assert(err, IsNil) + + assertStorageStatus(c, s.Repository, 13, 11, 11, expected) +} + func assertStorageStatus( c *C, r *Repository, treesCount, blobCount, commitCount int, head plumbing.Hash, diff --git a/worktree_status.go b/worktree_status.go index 24d0534..b2848f9 100644 --- a/worktree_status.go +++ b/worktree_status.go @@ -252,6 +252,9 @@ func (w *Worktree) Add(path string) (plumbing.Hash, error) { h, err := w.copyFileToStorage(path) if err != nil { + if os.IsNotExist(err) { + h, err = w.deleteFromIndex(path) + } return h, err } diff --git a/worktree_test.go b/worktree_test.go index 1eb305d..7d9c617 100644 --- a/worktree_test.go +++ b/worktree_test.go @@ -372,7 +372,11 @@ func (s *WorktreeSuite) TestFilenameNormalization(c *C) { modFilename := norm.Form(norm.NFKD).String(filename) util.WriteFile(w.Filesystem, modFilename, []byte("foo"), 0755) + _, err = w.Add(filename) + c.Assert(err, IsNil) + _, err = w.Add(modFilename) + c.Assert(err, IsNil) status, err = w.Status() c.Assert(err, IsNil) |