--- a/vendor/gopkg.in/ini.v1/file.go Tue Aug 23 22:33:28 2022 +0200
+++ b/vendor/gopkg.in/ini.v1/file.go Tue Aug 23 22:39:43 2022 +0200
@@ -142,6 +142,12 @@
return secs[0], err
}
+// HasSection returns true if the file contains a section with given name.
+func (f *File) HasSection(name string) bool {
+ section, _ := f.GetSection(name)
+ return section != nil
+}
+
// SectionsByName returns all sections with given name.
func (f *File) SectionsByName(name string) ([]*Section, error) {
if len(name) == 0 {
@@ -168,8 +174,9 @@
func (f *File) Section(name string) *Section {
sec, err := f.GetSection(name)
if err != nil {
- // Note: It's OK here because the only possible error is empty section name,
- // but if it's empty, this piece of code won't be executed.
+ if name == "" {
+ name = DefaultSection
+ }
sec, _ = f.NewSection(name)
return sec
}
@@ -335,6 +342,7 @@
// Use buffer to make sure target is safe until finish encoding.
buf := bytes.NewBuffer(nil)
+ lastSectionIdx := len(f.sectionList) - 1
for i, sname := range f.sectionList {
sec := f.SectionWithIndex(sname, f.sectionIndexes[i])
if len(sec.Comment) > 0 {
@@ -364,12 +372,13 @@
}
}
+ isLastSection := i == lastSectionIdx
if sec.isRawSection {
if _, err := buf.WriteString(sec.rawBody); err != nil {
return nil, err
}
- if PrettySection {
+ if PrettySection && !isLastSection {
// Put a line between sections
if _, err := buf.WriteString(LineBreak); err != nil {
return nil, err
@@ -435,16 +444,14 @@
kname = `"""` + kname + `"""`
}
- for _, val := range key.ValueWithShadows() {
+ writeKeyValue := func(val string) (bool, error) {
if _, err := buf.WriteString(kname); err != nil {
- return nil, err
+ return false, err
}
if key.isBooleanType {
- if kname != sec.keyList[len(sec.keyList)-1] {
- buf.WriteString(LineBreak)
- }
- continue KeyList
+ buf.WriteString(LineBreak)
+ return true, nil
}
// Write out alignment spaces before "=" sign
@@ -461,10 +468,27 @@
val = `"` + val + `"`
}
if _, err := buf.WriteString(equalSign + val + LineBreak); err != nil {
+ return false, err
+ }
+ return false, nil
+ }
+
+ shadows := key.ValueWithShadows()
+ if len(shadows) == 0 {
+ if _, err := writeKeyValue(""); err != nil {
return nil, err
}
}
+ for _, val := range shadows {
+ exitLoop, err := writeKeyValue(val)
+ if err != nil {
+ return nil, err
+ } else if exitLoop {
+ continue KeyList
+ }
+ }
+
for _, val := range key.nestedValues {
if _, err := buf.WriteString(indent + " " + val + LineBreak); err != nil {
return nil, err
@@ -472,7 +496,7 @@
}
}
- if PrettySection {
+ if PrettySection && !isLastSection {
// Put a line between sections
if _, err := buf.WriteString(LineBreak); err != nil {
return nil, err