From 75a36b4831c35ebf7cb15ca9e617f057c7729b6f Mon Sep 17 00:00:00 2001 From: poornas Date: Mon, 28 Jan 2019 16:52:50 -0800 Subject: [PATCH] Change mc config host list format to record style (#2659) --- cmd/config-host-list.go | 11 +++--- cmd/config-host.go | 28 +++++---------- cmd/pretty-record.go | 80 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 26 deletions(-) create mode 100644 cmd/pretty-record.go diff --git a/cmd/config-host-list.go b/cmd/config-host-list.go index a9dc1dc3..4aa52cf5 100644 --- a/cmd/config-host-list.go +++ b/cmd/config-host-list.go @@ -72,12 +72,11 @@ func mainConfigHostList(ctx *cli.Context) error { checkConfigHostListSyntax(ctx) // Additional command speific theme customization. - console.SetColor("HostMessage", color.New(color.FgGreen)) console.SetColor("Alias", color.New(color.FgCyan, color.Bold)) - console.SetColor("URL", color.New(color.FgCyan)) - console.SetColor("AccessKey", color.New(color.FgBlue)) - console.SetColor("SecretKey", color.New(color.FgBlue)) - console.SetColor("API", color.New(color.FgYellow)) + console.SetColor("URL", color.New(color.FgYellow)) + console.SetColor("AccessKey", color.New(color.FgCyan)) + console.SetColor("SecretKey", color.New(color.FgCyan)) + console.SetColor("API", color.New(color.FgBlue)) console.SetColor("Lookup", color.New(color.FgCyan)) args := ctx.Args() @@ -96,7 +95,7 @@ func printHosts(hosts ...hostMessage) { for _, host := range hosts { if !globalJSON { // Format properly for alignment based on alias length only in non json mode. - host.Alias = fmt.Sprintf("%-*.*s:", maxAlias, maxAlias, host.Alias) + host.Alias = fmt.Sprintf("%-*.*s", maxAlias, maxAlias, host.Alias) } if host.AccessKey == "" || host.SecretKey == "" { host.AccessKey = "" diff --git a/cmd/config-host.go b/cmd/config-host.go index 4fce3821..f52387ff 100644 --- a/cmd/config-host.go +++ b/cmd/config-host.go @@ -64,28 +64,16 @@ type hostMessage struct { func (h hostMessage) String() string { switch h.op { case "list": - urlFieldMaxLen, apiFieldMaxLen := -1, -1 - accessFieldMaxLen, secretFieldMaxLen := -1, -1 - lookupFieldMaxLen := -1 - // Set cols width if prettyPrint flag is enabled - if h.prettyPrint { - urlFieldMaxLen = 30 - accessFieldMaxLen = 20 - secretFieldMaxLen = 40 - apiFieldMaxLen = 5 - lookupFieldMaxLen = 5 - } - // Create a new pretty table with cols configuration - t := newPrettyTable(" ", - Field{"Alias", -1}, - Field{"URL", urlFieldMaxLen}, - Field{"AccessKey", accessFieldMaxLen}, - Field{"SecretKey", secretFieldMaxLen}, - Field{"API", apiFieldMaxLen}, - Field{"Lookup", lookupFieldMaxLen}, + t := newPrettyRecord(2, + Row{"Alias", "Alias"}, + Row{"URL", "URL"}, + Row{"AccessKey", "AccessKey"}, + Row{"SecretKey", "SecretKey"}, + Row{"API", "API"}, + Row{"Lookup", "Lookup"}, ) - return t.buildRow(h.Alias, h.URL, h.AccessKey, h.SecretKey, h.API, h.Lookup) + return t.buildRecord(h.Alias, h.URL, h.AccessKey, h.SecretKey, h.API, h.Lookup) case "remove": return console.Colorize("HostMessage", "Removed `"+h.Alias+"` successfully.") case "add": diff --git a/cmd/pretty-record.go b/cmd/pretty-record.go new file mode 100644 index 00000000..a65bdb5c --- /dev/null +++ b/cmd/pretty-record.go @@ -0,0 +1,80 @@ +/* + * Minio Client (C) 2019 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cmd + +import ( + "fmt" + + "github.com/minio/mc/pkg/console" +) + +// Row specifies row description and theme +type Row struct { + desc string + descTheme string +} + +// PrettyRecord - an easy struct to format a set of key-value +// pairs into a record +type PrettyRecord struct { + rows []Row + indent int + maxLen int +} + +// newPrettyRecord - creates a new pretty record +func newPrettyRecord(indent int, rows ...Row) PrettyRecord { + maxDescLen := 0 + for _, r := range rows { + if len(r.desc) > maxDescLen { + maxDescLen = len(r.desc) + } + } + return PrettyRecord{ + rows: rows, + indent: indent, + maxLen: maxDescLen, + } +} + +// buildRecord - creates a string which represents a record table given +// some fields contents. +func (t PrettyRecord) buildRecord(contents ...string) (line string) { + + // totalRows is the minimum of the number of fields config + // and the number of contents elements. + totalRows := len(contents) + if len(t.rows) < totalRows { + totalRows = len(t.rows) + } + var format, separator string + // Format fields and construct message + for i := 0; i < totalRows; i++ { + // default heading + indent := 0 + format = "%s\n" + // optionally indented rows with key value pairs + if i > 0 { + indent = t.indent + format = fmt.Sprintf("%%%ds%%-%ds : %%s\n", indent, t.maxLen) + line += console.Colorize(t.rows[i].descTheme, fmt.Sprintf(format, separator, t.rows[i].desc, contents[i])) + } else { + line += console.Colorize(t.rows[i].descTheme, fmt.Sprintf(format, contents[i])) + } + } + return +}