diff options
author | Thomas Lazar <tlazar@signicast.com> | 2020-09-30 17:06:17 -0500 |
---|---|---|
committer | Thomas Lazar <tlazar@signicast.com> | 2020-09-30 17:06:17 -0500 |
commit | ec9b50d84022215ba78983155a3c44b51ccd4f52 (patch) | |
tree | b2feb4cb4b6c72960f8ba89bfee5a587d2a72549 | |
parent | 63d92533b538cb380667deee5dc6d32f0946c737 (diff) | |
download | go-git-ec9b50d84022215ba78983155a3c44b51ccd4f52.tar.gz |
Add init.defaultBranch to the config
-rw-r--r-- | config/config.go | 23 | ||||
-rw-r--r-- | config/config_test.go | 6 |
2 files changed, 29 insertions, 0 deletions
diff --git a/config/config.go b/config/config.go index 7d6ab58..8a99e8d 100644 --- a/config/config.go +++ b/config/config.go @@ -89,6 +89,13 @@ type Config struct { Window uint } + Init struct { + // DefaultBranch Allows overriding the default branch name + // e.g. when initializing a new repository or when cloning + // an empty repository. + DefaultBranch string + } + // Remotes list of repository remotes, the key of the map is the name // of the remote, should equal to RemoteConfig.Name. Remotes map[string]*RemoteConfig @@ -223,6 +230,7 @@ const ( userSection = "user" authorSection = "author" committerSection = "committer" + initSection = "init" fetchKey = "fetch" urlKey = "url" bareKey = "bare" @@ -233,6 +241,7 @@ const ( rebaseKey = "rebase" nameKey = "name" emailKey = "email" + defaultBranchKey = "defaultBranch" // DefaultPackWindow holds the number of previous objects used to // generate deltas. The value 10 is the same used by git command. @@ -251,6 +260,7 @@ func (c *Config) Unmarshal(b []byte) error { c.unmarshalCore() c.unmarshalUser() + c.unmarshalInit() if err := c.unmarshalPack(); err != nil { return err } @@ -344,6 +354,11 @@ func (c *Config) unmarshalBranches() error { return nil } +func (c *Config) unmarshalInit() { + s := c.Raw.Section(initSection) + c.Init.DefaultBranch = s.Options.Get(defaultBranchKey) +} + // Marshal returns Config encoded as a git-config file. func (c *Config) Marshal() ([]byte, error) { c.marshalCore() @@ -352,6 +367,7 @@ func (c *Config) Marshal() ([]byte, error) { c.marshalRemotes() c.marshalSubmodules() c.marshalBranches() + c.marshalInit() buf := bytes.NewBuffer(nil) if err := format.NewEncoder(buf).Encode(c.Raw); err != nil { @@ -475,6 +491,13 @@ func (c *Config) marshalBranches() { s.Subsections = newSubsections } +func (c *Config) marshalInit() { + s := c.Raw.Section(initSection) + if c.Init.DefaultBranch != "" { + s.SetOption(defaultBranchKey, c.Init.DefaultBranch) + } +} + // RemoteConfig contains the configuration for a given remote repository. type RemoteConfig struct { // Name of the remote diff --git a/config/config_test.go b/config/config_test.go index 5a88c19..21fa1ee 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -46,6 +46,8 @@ func (s *ConfigSuite) TestUnmarshal(c *C) { [branch "master"] remote = origin merge = refs/heads/master +[init] + defaultBranch = main `) cfg := NewConfig() @@ -77,6 +79,7 @@ func (s *ConfigSuite) TestUnmarshal(c *C) { c.Assert(cfg.Submodules["qux"].Branch, Equals, "bar") c.Assert(cfg.Branches["master"].Remote, Equals, "origin") c.Assert(cfg.Branches["master"].Merge, Equals, plumbing.ReferenceName("refs/heads/master")) + c.Assert(cfg.Init.DefaultBranch, Equals, "main") } func (s *ConfigSuite) TestMarshal(c *C) { @@ -99,12 +102,15 @@ func (s *ConfigSuite) TestMarshal(c *C) { [branch "master"] remote = origin merge = refs/heads/master +[init] + defaultBranch = main `) cfg := NewConfig() cfg.Core.IsBare = true cfg.Core.Worktree = "bar" cfg.Pack.Window = 20 + cfg.Init.DefaultBranch = "main" cfg.Remotes["origin"] = &RemoteConfig{ Name: "origin", URLs: []string{"git@github.com:mcuadros/go-git.git"}, |