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)
// 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 = ""

View File

@@ -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":

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
}