123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package formatter
- import (
- "github.com/docker/docker/api/types/container"
- "github.com/docker/docker/pkg/archive"
- )
- const (
- defaultDiffTableFormat = "table {{.Type}}\t{{.Path}}"
- changeTypeHeader = "CHANGE TYPE"
- pathHeader = "PATH"
- )
- // NewDiffFormat returns a format for use with a diff Context
- func NewDiffFormat(source string) Format {
- switch source {
- case TableFormatKey:
- return defaultDiffTableFormat
- }
- return Format(source)
- }
- // DiffWrite writes formatted diff using the Context
- func DiffWrite(ctx Context, changes []container.ContainerChangeResponseItem) error {
- render := func(format func(subContext subContext) error) error {
- for _, change := range changes {
- if err := format(&diffContext{c: change}); err != nil {
- return err
- }
- }
- return nil
- }
- return ctx.Write(newDiffContext(), render)
- }
- type diffContext struct {
- HeaderContext
- c container.ContainerChangeResponseItem
- }
- func newDiffContext() *diffContext {
- diffCtx := diffContext{}
- diffCtx.header = map[string]string{
- "Type": changeTypeHeader,
- "Path": pathHeader,
- }
- return &diffCtx
- }
- func (d *diffContext) MarshalJSON() ([]byte, error) {
- return marshalJSON(d)
- }
- func (d *diffContext) Type() string {
- var kind string
- switch d.c.Kind {
- case archive.ChangeModify:
- kind = "C"
- case archive.ChangeAdd:
- kind = "A"
- case archive.ChangeDelete:
- kind = "D"
- }
- return kind
- }
- func (d *diffContext) Path() string {
- return d.c.Path
- }
|