| package transactional |
| |
| import ( |
| "gopkg.in/src-d/go-git.v4/plumbing" |
| "gopkg.in/src-d/go-git.v4/plumbing/storer" |
| ) |
| |
| // ShallowStorage implements the storer.ShallowStorer for the transactional package. |
| type ShallowStorage struct { |
| storer.ShallowStorer |
| temporal storer.ShallowStorer |
| } |
| |
| // NewShallowStorage returns a new ShallowStorage based on a base storer and |
| // a temporal storer. |
| func NewShallowStorage(base, temporal storer.ShallowStorer) *ShallowStorage { |
| return &ShallowStorage{ |
| ShallowStorer: base, |
| temporal: temporal, |
| } |
| } |
| |
| // SetShallow honors the storer.ShallowStorer interface. |
| func (s *ShallowStorage) SetShallow(commits []plumbing.Hash) error { |
| return s.temporal.SetShallow(commits) |
| } |
| |
| // Shallow honors the storer.ShallowStorer interface. |
| func (s *ShallowStorage) Shallow() ([]plumbing.Hash, error) { |
| shallow, err := s.temporal.Shallow() |
| if err != nil { |
| return nil, err |
| } |
| |
| if len(shallow) != 0 { |
| return shallow, nil |
| } |
| |
| return s.ShallowStorer.Shallow() |
| } |
| |
| // Commit it copies the shallow information of the temporal storage into the |
| // base storage. |
| func (s *ShallowStorage) Commit() error { |
| commits, err := s.temporal.Shallow() |
| if err != nil || len(commits) == 0 { |
| return err |
| } |
| |
| return s.ShallowStorer.SetShallow(commits) |
| } |