aboutsummaryrefslogtreecommitdiffstats
path: root/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/config.go')
-rw-r--r--config/config.go39
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