aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--worktree_commit_test.go36
-rw-r--r--worktree_status.go3
-rw-r--r--worktree_test.go4
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)