diff options
Diffstat (limited to 'config/config.go')
-rw-r--r-- | config/config.go | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/config/config.go b/config/config.go index f94d4c9..b7482ea 100644 --- a/config/config.go +++ b/config/config.go @@ -7,22 +7,51 @@ import ( ) const ( + // DefaultRefSpec is the default refspec used, when none is given DefaultRefSpec = "+refs/heads/*:refs/remotes/%s/*" ) +// ConfigStorer interface to persist Config objects +type ConfigStorer interface { + Config() (*Config, error) + SetConfig(*Config) error +} + var ( + ErrInvalid = errors.New("config invalid remote") ErrRemoteConfigNotFound = errors.New("remote config not found") ErrRemoteConfigEmptyURL = errors.New("remote config: empty URL") ErrRemoteConfigEmptyName = errors.New("remote config: empty name") ) -type ConfigStorage interface { - Remote(name string) (*RemoteConfig, error) - Remotes() ([]*RemoteConfig, error) - SetRemote(*RemoteConfig) error - DeleteRemote(name string) error +// Config contains the repository configuration +type Config struct { + Remotes map[string]*RemoteConfig +} + +// NewConfig returns a new empty Config +func NewConfig() *Config { + return &Config{ + Remotes: make(map[string]*RemoteConfig, 0), + } +} + +// Validate validate the fields and set the default values +func (c *Config) Validate() error { + for name, r := range c.Remotes { + if r.Name != name { + return ErrInvalid + } + + if err := r.Validate(); err != nil { + return err + } + } + + return nil } +// RemoteConfig contains the configuration for a given repository type RemoteConfig struct { Name string URL string |