| package filesystem |
| |
| import ( |
| "bufio" |
| "fmt" |
| |
| "gopkg.in/src-d/go-git.v4/plumbing" |
| "gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit" |
| "gopkg.in/src-d/go-git.v4/utils/ioutil" |
| ) |
| |
| // ShallowStorage where the shallow commits are stored, an internal to |
| // manipulate the shallow file |
| type ShallowStorage struct { |
| dir *dotgit.DotGit |
| } |
| |
| // SetShallow save the shallows in the shallow file in the .git folder as one |
| // commit per line represented by 40-byte hexadecimal object terminated by a |
| // newline. |
| func (s *ShallowStorage) SetShallow(commits []plumbing.Hash) error { |
| f, err := s.dir.ShallowWriter() |
| if err != nil { |
| return err |
| } |
| |
| defer ioutil.CheckClose(f, &err) |
| for _, h := range commits { |
| if _, err := fmt.Fprintf(f, "%s\n", h); err != nil { |
| return err |
| } |
| } |
| |
| return err |
| } |
| |
| // Shallow return the shallow commits reading from shallo file from .git |
| func (s *ShallowStorage) Shallow() ([]plumbing.Hash, error) { |
| f, err := s.dir.Shallow() |
| if f == nil || err != nil { |
| return nil, err |
| } |
| |
| defer ioutil.CheckClose(f, &err) |
| |
| var hash []plumbing.Hash |
| |
| scn := bufio.NewScanner(f) |
| for scn.Scan() { |
| hash = append(hash, plumbing.NewHash(scn.Text())) |
| } |
| |
| return hash, scn.Err() |
| } |