diff options
Diffstat (limited to 'plumbing/format')
-rw-r--r-- | plumbing/format/index/index.go | 12 | ||||
-rw-r--r-- | plumbing/format/index/index_test.go | 17 |
2 files changed, 29 insertions, 0 deletions
diff --git a/plumbing/format/index/index.go b/plumbing/format/index/index.go index 782e3d1..9de4230 100644 --- a/plumbing/format/index/index.go +++ b/plumbing/format/index/index.go @@ -62,6 +62,18 @@ func (i *Index) Entry(path string) (*Entry, error) { return nil, ErrEntryNotFound } +// Remove remove the entry that match the give path and returns deleted entry. +func (i *Index) Remove(path string) (*Entry, error) { + for index, e := range i.Entries { + if e.Name == path { + i.Entries = append(i.Entries[:index], i.Entries[index+1:]...) + return e, nil + } + } + + return nil, ErrEntryNotFound +} + // String is equivalent to `git ls-files --stage --debug` func (i *Index) String() string { buf := bytes.NewBuffer(nil) diff --git a/plumbing/format/index/index_test.go b/plumbing/format/index/index_test.go index 67286b3..cad5f9c 100644 --- a/plumbing/format/index/index_test.go +++ b/plumbing/format/index/index_test.go @@ -20,3 +20,20 @@ func (s *IndexSuite) TestIndexEntry(c *C) { c.Assert(e, IsNil) c.Assert(err, Equals, ErrEntryNotFound) } + +func (s *IndexSuite) TestIndexRemove(c *C) { + idx := &Index{ + Entries: []*Entry{ + {Name: "foo", Size: 42}, + {Name: "bar", Size: 82}, + }, + } + + e, err := idx.Remove("foo") + c.Assert(err, IsNil) + c.Assert(e.Name, Equals, "foo") + + e, err = idx.Remove("foo") + c.Assert(e, IsNil) + c.Assert(err, Equals, ErrEntryNotFound) +} |