| package transactional |
| |
| import "gopkg.in/src-d/go-git.v4/config" |
| |
| // ConfigStorage implements the storer.ConfigStorage for the transactional package. |
| type ConfigStorage struct { |
| config.ConfigStorer |
| temporal config.ConfigStorer |
| |
| set bool |
| } |
| |
| // NewConfigStorage returns a new ConfigStorer based on a base storer and a |
| // temporal storer. |
| func NewConfigStorage(s, temporal config.ConfigStorer) *ConfigStorage { |
| return &ConfigStorage{ConfigStorer: s, temporal: temporal} |
| } |
| |
| // SetConfig honors the storer.ConfigStorer interface. |
| func (c *ConfigStorage) SetConfig(cfg *config.Config) error { |
| if err := c.temporal.SetConfig(cfg); err != nil { |
| return err |
| } |
| |
| c.set = true |
| return nil |
| } |
| |
| // Config honors the storer.ConfigStorer interface. |
| func (c *ConfigStorage) Config() (*config.Config, error) { |
| if !c.set { |
| return c.ConfigStorer.Config() |
| } |
| |
| return c.temporal.Config() |
| } |
| |
| // Commit it copies the config from the temporal storage into the base storage. |
| func (c *ConfigStorage) Commit() error { |
| if !c.set { |
| return nil |
| } |
| |
| cfg, err := c.temporal.Config() |
| if err != nil { |
| return err |
| } |
| |
| return c.ConfigStorer.SetConfig(cfg) |
| } |