mirror of
https://github.com/golang/go
synced 2024-11-05 16:06:10 -07:00
fe54fb3517
Modify the Report representation to be a list of Change values, instead of two string slices. This will enable adding more information to each change, like source location. Change-Id: Ia7389d7bc552479ea5e06efd7fdefe004058e66f Reviewed-on: https://go-review.googlesource.com/c/tools/+/172777 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package apidiff
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
// Report describes the changes detected by Changes.
|
|
type Report struct {
|
|
Changes []Change
|
|
}
|
|
|
|
// A Change describes a single API change.
|
|
type Change struct {
|
|
Message string
|
|
Compatible bool
|
|
}
|
|
|
|
func (r Report) messages(compatible bool) []string {
|
|
var msgs []string
|
|
for _, c := range r.Changes {
|
|
if c.Compatible == compatible {
|
|
msgs = append(msgs, c.Message)
|
|
}
|
|
}
|
|
return msgs
|
|
}
|
|
|
|
func (r Report) String() string {
|
|
var buf bytes.Buffer
|
|
if err := r.Text(&buf); err != nil {
|
|
return fmt.Sprintf("!!%v", err)
|
|
}
|
|
return buf.String()
|
|
}
|
|
|
|
func (r Report) Text(w io.Writer) error {
|
|
if err := r.TextIncompatible(w, true); err != nil {
|
|
return err
|
|
}
|
|
return r.TextCompatible(w)
|
|
}
|
|
|
|
func (r Report) TextIncompatible(w io.Writer, withHeader bool) error {
|
|
if withHeader {
|
|
return r.writeMessages(w, "Incompatible changes:", r.messages(false))
|
|
}
|
|
return r.writeMessages(w, "", r.messages(false))
|
|
}
|
|
|
|
func (r Report) TextCompatible(w io.Writer) error {
|
|
return r.writeMessages(w, "Compatible changes:", r.messages(true))
|
|
}
|
|
|
|
func (r Report) writeMessages(w io.Writer, header string, msgs []string) error {
|
|
if len(msgs) == 0 {
|
|
return nil
|
|
}
|
|
if header != "" {
|
|
if _, err := fmt.Fprintf(w, "%s\n", header); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
for _, m := range msgs {
|
|
if _, err := fmt.Fprintf(w, "- %s\n", m); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|