aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/config.go23
-rw-r--r--config/config_test.go6
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"},