aboutsummaryrefslogtreecommitdiffstats
path: root/storage/filesystem/config.go
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2016-12-12 15:57:34 +0100
committerGitHub <noreply@github.com>2016-12-12 15:57:34 +0100
commit2dac5c1d1b6cb7d9a303a7346c3c7a3120d4ad40 (patch)
treef5f87cd723a0343e9744f2324ad1a8f1ff55bf90 /storage/filesystem/config.go
parentdf9748cfb51db9c406e3df063badbd8c78ee819d (diff)
downloadgo-git-2dac5c1d1b6cb7d9a303a7346c3c7a3120d4ad40.tar.gz
config: Config, bare flag (#177)
* config.Config: bare flag * changes * changes
Diffstat (limited to 'storage/filesystem/config.go')
-rw-r--r--storage/filesystem/config.go56
1 files changed, 40 insertions, 16 deletions
diff --git a/storage/filesystem/config.go b/storage/filesystem/config.go
index 510f51c..07e0433 100644
--- a/storage/filesystem/config.go
+++ b/storage/filesystem/config.go
@@ -1,6 +1,7 @@
package filesystem
import (
+ "fmt"
"os"
"gopkg.in/src-d/go-git.v4/config"
@@ -10,8 +11,10 @@ import (
const (
remoteSection = "remote"
+ coreSection = "core"
fetchKey = "fetch"
urlKey = "url"
+ bareKey = "bare"
)
type ConfigStorage struct {
@@ -26,11 +29,8 @@ func (c *ConfigStorage) Config() (*config.Config, error) {
return nil, err
}
- sect := ini.Section(remoteSection)
- for _, s := range sect.Subsections {
- r := c.unmarshalRemote(s)
- cfg.Remotes[r.Name] = r
- }
+ c.unmarshalCore(cfg, ini)
+ c.unmarshalRemotes(cfg, ini)
return cfg, nil
}
@@ -57,6 +57,21 @@ func (c *ConfigStorage) unmarshal() (*gitconfig.Config, error) {
return cfg, nil
}
+func (c *ConfigStorage) unmarshalCore(cfg *config.Config, ini *gitconfig.Config) {
+ s := ini.Section(coreSection)
+ if s.Options.Get(bareKey) == "true" {
+ cfg.Core.IsBare = true
+ }
+}
+
+func (c *ConfigStorage) unmarshalRemotes(cfg *config.Config, ini *gitconfig.Config) {
+ s := ini.Section(remoteSection)
+ for _, sub := range s.Subsections {
+ r := c.unmarshalRemote(sub)
+ cfg.Remotes[r.Name] = r
+ }
+}
+
func (c *ConfigStorage) unmarshalRemote(s *gitconfig.Subsection) *config.RemoteConfig {
fetch := []config.RefSpec{}
for _, f := range s.Options.GetAll(fetchKey) {
@@ -83,6 +98,17 @@ func (c *ConfigStorage) SetConfig(cfg *config.Config) error {
return err
}
+ c.marshalCore(cfg, ini)
+ c.marshalRemotes(cfg, ini)
+ return c.marshal(ini)
+}
+
+func (c *ConfigStorage) marshalCore(cfg *config.Config, ini *gitconfig.Config) {
+ s := ini.Section(coreSection)
+ s.AddOption(bareKey, fmt.Sprintf("%t", cfg.Core.IsBare))
+}
+
+func (c *ConfigStorage) marshalRemotes(cfg *config.Config, ini *gitconfig.Config) {
s := ini.Section(remoteSection)
s.Subsections = make(gitconfig.Subsections, len(cfg.Remotes))
@@ -91,8 +117,16 @@ func (c *ConfigStorage) SetConfig(cfg *config.Config) error {
s.Subsections[i] = c.marshalRemote(r)
i++
}
+}
- return c.marshal(ini)
+func (c *ConfigStorage) marshalRemote(r *config.RemoteConfig) *gitconfig.Subsection {
+ s := &gitconfig.Subsection{Name: r.Name}
+ s.AddOption(urlKey, r.URL)
+ for _, rs := range r.Fetch {
+ s.AddOption(fetchKey, rs.String())
+ }
+
+ return s
}
func (c *ConfigStorage) marshal(ini *gitconfig.Config) error {
@@ -106,13 +140,3 @@ func (c *ConfigStorage) marshal(ini *gitconfig.Config) error {
e := gitconfig.NewEncoder(f)
return e.Encode(ini)
}
-
-func (c *ConfigStorage) marshalRemote(r *config.RemoteConfig) *gitconfig.Subsection {
- s := &gitconfig.Subsection{Name: r.Name}
- s.AddOption(urlKey, r.URL)
- for _, rs := range r.Fetch {
- s.AddOption(fetchKey, rs.String())
- }
-
- return s
-}