Skip to content

Commit 0377d06

Browse files
authored
Merge pull request #821 from daolis/bug/resetfix
git: worktree, reset ignored files that are part of the worktree: Fixes #819
2 parents cd3a21c + 753b0d5 commit 0377d06

File tree

3 files changed

+58
-7
lines changed

3 files changed

+58
-7
lines changed

worktree.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ func (w *Worktree) resetIndex(t *object.Tree, dirs []string) error {
368368
}
369369

370370
func (w *Worktree) resetWorktree(t *object.Tree) error {
371-
changes, err := w.diffStagingWithWorktree(true)
371+
changes, err := w.diffStagingWithWorktree(true, false)
372372
if err != nil {
373373
return err
374374
}
@@ -420,7 +420,7 @@ func (w *Worktree) checkoutChange(ch merkletrie.Change, t *object.Tree, idx *ind
420420
}
421421

422422
func (w *Worktree) containsUnstagedChanges() (bool, error) {
423-
ch, err := w.diffStagingWithWorktree(false)
423+
ch, err := w.diffStagingWithWorktree(false, true)
424424
if err != nil {
425425
return false, err
426426
}

worktree_status.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (w *Worktree) status(commit plumbing.Hash) (Status, error) {
7474
}
7575
}
7676

77-
right, err := w.diffStagingWithWorktree(false)
77+
right, err := w.diffStagingWithWorktree(false, true)
7878
if err != nil {
7979
return nil, err
8080
}
@@ -113,7 +113,7 @@ func nameFromAction(ch *merkletrie.Change) string {
113113
return name
114114
}
115115

116-
func (w *Worktree) diffStagingWithWorktree(reverse bool) (merkletrie.Changes, error) {
116+
func (w *Worktree) diffStagingWithWorktree(reverse, excludeIgnoredChanges bool) (merkletrie.Changes, error) {
117117
idx, err := w.r.Storer.Index()
118118
if err != nil {
119119
return nil, err
@@ -138,7 +138,10 @@ func (w *Worktree) diffStagingWithWorktree(reverse bool) (merkletrie.Changes, er
138138
return nil, err
139139
}
140140

141-
return w.excludeIgnoredChanges(c), nil
141+
if excludeIgnoredChanges {
142+
return w.excludeIgnoredChanges(c), nil
143+
}
144+
return c, nil
142145
}
143146

144147
func (w *Worktree) excludeIgnoredChanges(changes merkletrie.Changes) merkletrie.Changes {

worktree_test.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ import (
2929
. "gopkg.in/check.v1"
3030
)
3131

32+
var (
33+
defaultTestCommitOptions = &CommitOptions{Author: &object.Signature{Name: "testuser", Email: "testemail"}}
34+
)
35+
3236
type WorktreeSuite struct {
3337
BaseSuite
3438
}
@@ -884,14 +888,15 @@ func (s *WorktreeSuite) TestStatusCheckedInBeforeIgnored(c *C) {
884888
c.Assert(err, IsNil)
885889
_, err = w.Add("fileToIgnore")
886890
c.Assert(err, IsNil)
887-
_, err = w.Commit("Added file that will be ignored later", &CommitOptions{})
891+
892+
_, err = w.Commit("Added file that will be ignored later", defaultTestCommitOptions)
888893
c.Assert(err, IsNil)
889894

890895
err = util.WriteFile(fs, ".gitignore", []byte("fileToIgnore\nsecondIgnoredFile"), 0755)
891896
c.Assert(err, IsNil)
892897
_, err = w.Add(".gitignore")
893898
c.Assert(err, IsNil)
894-
_, err = w.Commit("Added .gitignore", &CommitOptions{})
899+
_, err = w.Commit("Added .gitignore", defaultTestCommitOptions)
895900
c.Assert(err, IsNil)
896901
status, err := w.Status()
897902
c.Assert(err, IsNil)
@@ -1097,6 +1102,49 @@ func (s *WorktreeSuite) TestResetHard(c *C) {
10971102
c.Assert(branch.Hash(), Equals, commit)
10981103
}
10991104

1105+
func (s *WorktreeSuite) TestResetHardWithGitIgnore(c *C) {
1106+
fs := memfs.New()
1107+
w := &Worktree{
1108+
r: s.Repository,
1109+
Filesystem: fs,
1110+
}
1111+
1112+
err := w.Checkout(&CheckoutOptions{})
1113+
c.Assert(err, IsNil)
1114+
1115+
tf, err := fs.Create("newTestFile.txt")
1116+
c.Assert(err, IsNil)
1117+
_, err = tf.Write([]byte("testfile content"))
1118+
c.Assert(err, IsNil)
1119+
err = tf.Close()
1120+
c.Assert(err, IsNil)
1121+
_, err = w.Add("newTestFile.txt")
1122+
c.Assert(err, IsNil)
1123+
_, err = w.Commit("testcommit", &CommitOptions{Author: &object.Signature{Name: "name", Email: "email"}})
1124+
c.Assert(err, IsNil)
1125+
1126+
err = fs.Remove("newTestFile.txt")
1127+
c.Assert(err, IsNil)
1128+
f, err := fs.Create(".gitignore")
1129+
c.Assert(err, IsNil)
1130+
_, err = f.Write([]byte("foo\n"))
1131+
_, err = f.Write([]byte("newTestFile.txt\n"))
1132+
c.Assert(err, IsNil)
1133+
err = f.Close()
1134+
c.Assert(err, IsNil)
1135+
1136+
status, err := w.Status()
1137+
c.Assert(err, IsNil)
1138+
c.Assert(status.IsClean(), Equals, false)
1139+
1140+
err = w.Reset(&ResetOptions{Mode: HardReset})
1141+
c.Assert(err, IsNil)
1142+
1143+
status, err = w.Status()
1144+
c.Assert(err, IsNil)
1145+
c.Assert(status.IsClean(), Equals, true)
1146+
}
1147+
11001148
func (s *WorktreeSuite) TestStatusAfterCheckout(c *C) {
11011149
fs := memfs.New()
11021150
w := &Worktree{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy