aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormerlin <clamores.pro@gmail.com>2021-11-07 20:39:51 +0300
committermerlin <clamores.pro@gmail.com>2021-11-08 00:17:11 +0300
commitb939cf8471d8c1aac1960a833c7275e5b79ed013 (patch)
tree4aa92d59c4665555343f272c914238070bbaeb6b
parent3211a7a12a0ec2922d257fb14f09c6ecfb0b7c77 (diff)
downloadgo-git-b939cf8471d8c1aac1960a833c7275e5b79ed013.tar.gz
config: add support for branch description
-rw-r--r--config/branch.go23
-rw-r--r--config/config.go1
2 files changed, 24 insertions, 0 deletions
diff --git a/config/branch.go b/config/branch.go
index fe86cf5..a8fe0b5 100644
--- a/config/branch.go
+++ b/config/branch.go
@@ -2,6 +2,7 @@ package config
import (
"errors"
+ "strings"
"github.com/go-git/go-git/v5/plumbing"
format "github.com/go-git/go-git/v5/plumbing/format/config"
@@ -26,6 +27,12 @@ type Branch struct {
// "true" and "interactive". "false" is undocumented and
// typically represented by the non-existence of this field
Rebase string
+ // Description explains what the branch is for.
+ // Multi-line explanations may be used.
+ //
+ // Original git command to edit:
+ // git branch --edit-description
+ Description string
raw *format.Subsection
}
@@ -75,9 +82,20 @@ func (b *Branch) marshal() *format.Subsection {
b.raw.SetOption(rebaseKey, b.Rebase)
}
+ if b.Description == "" {
+ b.raw.RemoveOption(descriptionKey)
+ } else {
+ desc := quoteDescription(b.Description)
+ b.raw.SetOption(descriptionKey, desc)
+ }
+
return b.raw
}
+func quoteDescription(desc string) string {
+ return strings.ReplaceAll(desc, "\n", `\n`)
+}
+
func (b *Branch) unmarshal(s *format.Subsection) error {
b.raw = s
@@ -85,6 +103,11 @@ func (b *Branch) unmarshal(s *format.Subsection) error {
b.Remote = b.raw.Options.Get(remoteSection)
b.Merge = plumbing.ReferenceName(b.raw.Options.Get(mergeKey))
b.Rebase = b.raw.Options.Get(rebaseKey)
+ b.Description = unquoteDescription(b.raw.Options.Get(descriptionKey))
return b.Validate()
}
+
+func unquoteDescription(desc string) string {
+ return strings.ReplaceAll(desc, `\n`, "\n")
+}
diff --git a/config/config.go b/config/config.go
index 1aee25a..a16a5e5 100644
--- a/config/config.go
+++ b/config/config.go
@@ -247,6 +247,7 @@ const (
rebaseKey = "rebase"
nameKey = "name"
emailKey = "email"
+ descriptionKey = "description"
defaultBranchKey = "defaultBranch"
// DefaultPackWindow holds the number of previous objects used to