diff options
author | Joshua Sjoding <joshua.sjoding@scjalliance.com> | 2016-02-24 22:40:30 -0800 |
---|---|---|
committer | Joshua Sjoding <joshua.sjoding@scjalliance.com> | 2016-02-25 00:38:51 -0800 |
commit | 0d999e1db6cd8736ab697de8ce848fa3a5274b9f (patch) | |
tree | 6107f49405bb605793f1bcd7ef4961ceadcb11e9 /file.go | |
parent | 07ca1ac7f3058ea6d3274a01973541fb84782f5e (diff) | |
download | go-git-0d999e1db6cd8736ab697de8ce848fa3a5274b9f.tar.gz |
Refactor to use core.ObjectReader and core.ObjectWriter
* New function signatures provide the necessary interface to stream data from disk when using filesystem-based storage in the future
* New function signatures provide proper error handling
* ObjectReader and ObjectWriter interfaces added to avoid future refactoring, currently are type aliases for io.ReadCloser and io.WriteCloser respectively
* Object.Reader now returns (ObjectReader, error)
* Object.Writer now returns (ObjectWriter, error)
* File.Contents now returns (string, error)
* File.Lines now returns ([]string, error)
* Blob.Reader now returns (core.ObjectReader, error)
* Added internal close helper function for deferred calls to Close that need to check the return value
Diffstat (limited to 'file.go')
-rw-r--r-- | file.go | 25 |
1 files changed, 18 insertions, 7 deletions
@@ -18,24 +18,35 @@ func newFile(name string, b *Blob) *File { } // Contents returns the contents of a file as a string. -func (f *File) Contents() string { +func (f *File) Contents() (content string, err error) { + reader, err := f.Reader() + if err != nil { + return "", err + } + defer close(reader, &err) + buf := new(bytes.Buffer) - buf.ReadFrom(f.Reader()) + buf.ReadFrom(reader) - return buf.String() + return buf.String(), nil } // Lines returns a slice of lines from the contents of a file, stripping // all end of line characters. If the last line is empty (does not end // in an end of line), it is also stripped. -func (f *File) Lines() []string { - splits := strings.Split(f.Contents(), "\n") +func (f *File) Lines() ([]string, error) { + content, err := f.Contents() + if err != nil { + return nil, err + } + + splits := strings.Split(content, "\n") // remove the last line if it is empty if splits[len(splits)-1] == "" { - return splits[:len(splits)-1] + return splits[:len(splits)-1], nil } - return splits + return splits, nil } type FileIter struct { |