1
0
mirror of https://github.com/minio/mc.git synced 2025-11-12 01:02:26 +03:00

Change mc config host list format to record style (#2659)

This commit is contained in:
poornas
2019-01-28 16:52:50 -08:00
committed by kannappanr
parent 30965763d6
commit 75a36b4831
3 changed files with 93 additions and 26 deletions

View File

@@ -72,12 +72,11 @@ func mainConfigHostList(ctx *cli.Context) error {
checkConfigHostListSyntax(ctx) checkConfigHostListSyntax(ctx)
// Additional command speific theme customization. // Additional command speific theme customization.
console.SetColor("HostMessage", color.New(color.FgGreen))
console.SetColor("Alias", color.New(color.FgCyan, color.Bold)) console.SetColor("Alias", color.New(color.FgCyan, color.Bold))
console.SetColor("URL", color.New(color.FgCyan)) console.SetColor("URL", color.New(color.FgYellow))
console.SetColor("AccessKey", color.New(color.FgBlue)) console.SetColor("AccessKey", color.New(color.FgCyan))
console.SetColor("SecretKey", color.New(color.FgBlue)) console.SetColor("SecretKey", color.New(color.FgCyan))
console.SetColor("API", color.New(color.FgYellow)) console.SetColor("API", color.New(color.FgBlue))
console.SetColor("Lookup", color.New(color.FgCyan)) console.SetColor("Lookup", color.New(color.FgCyan))
args := ctx.Args() args := ctx.Args()
@@ -96,7 +95,7 @@ func printHosts(hosts ...hostMessage) {
for _, host := range hosts { for _, host := range hosts {
if !globalJSON { if !globalJSON {
// Format properly for alignment based on alias length only in non json mode. // 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 == "" { if host.AccessKey == "" || host.SecretKey == "" {
host.AccessKey = "" host.AccessKey = ""

View File

@@ -64,28 +64,16 @@ type hostMessage struct {
func (h hostMessage) String() string { func (h hostMessage) String() string {
switch h.op { switch h.op {
case "list": 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 // Create a new pretty table with cols configuration
t := newPrettyTable(" ", t := newPrettyRecord(2,
Field{"Alias", -1}, Row{"Alias", "Alias"},
Field{"URL", urlFieldMaxLen}, Row{"URL", "URL"},
Field{"AccessKey", accessFieldMaxLen}, Row{"AccessKey", "AccessKey"},
Field{"SecretKey", secretFieldMaxLen}, Row{"SecretKey", "SecretKey"},
Field{"API", apiFieldMaxLen}, Row{"API", "API"},
Field{"Lookup", lookupFieldMaxLen}, 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": case "remove":
return console.Colorize("HostMessage", "Removed `"+h.Alias+"` successfully.") return console.Colorize("HostMessage", "Removed `"+h.Alias+"` successfully.")
case "add": case "add":

80
cmd/pretty-record.go Normal file
View File

@@ -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
}