Skip to content

Commit 32eb1e8

Browse files
committed
feat: add TSV format support and default delimiters for list vendor
1 parent 359802a commit 32eb1e8

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

cmd/list_vendor.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ var listVendorCmd = &cobra.Command{
1919
Long: "List vendor configurations in a tabular way, including component and vendor manifests",
2020
Example: "atmos list vendor\n" +
2121
"atmos list vendor --format json\n" +
22-
"atmos list vendor --format csv --delimiter ','",
22+
"atmos list vendor --format csv # Uses comma (,) as delimiter\n" +
23+
"atmos list vendor --format tsv # Uses tab (\\t) as delimiter\n" +
24+
"atmos list vendor --format csv --delimiter ';' # Custom delimiter",
2325
Run: func(cmd *cobra.Command, args []string) {
2426
flags := cmd.Flags()
2527

@@ -35,6 +37,11 @@ var listVendorCmd = &cobra.Command{
3537
return
3638
}
3739

40+
// Set appropriate default delimiter based on format
41+
if formatFlag == l.FormatCSV && delimiterFlag == l.DefaultTSVDelimiter {
42+
delimiterFlag = l.DefaultCSVDelimiter
43+
}
44+
3845
configAndStacksInfo := schema.ConfigAndStacksInfo{}
3946
atmosConfig, err := config.InitCliConfig(configAndStacksInfo, true)
4047
if err != nil {
@@ -53,7 +60,7 @@ var listVendorCmd = &cobra.Command{
5360
}
5461

5562
func init() {
56-
listVendorCmd.PersistentFlags().String("format", "", "Output format (table, json, csv)")
57-
listVendorCmd.PersistentFlags().String("delimiter", "\t", "Delimiter for csv output")
63+
listVendorCmd.PersistentFlags().String("format", "", "Output format (table, json, csv, tsv)")
64+
listVendorCmd.PersistentFlags().String("delimiter", "\t", "Delimiter for csv/tsv output (default: tab for tsv, comma for csv)")
5865
listCmd.AddCommand(listVendorCmd)
5966
}

pkg/list/list_vendor.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ import (
1818
"gopkg.in/yaml.v3"
1919
)
2020

21+
const (
22+
DefaultCSVDelimiter = ","
23+
DefaultTSVDelimiter = "\t"
24+
)
25+
2126
// VendorInfo represents a vendor configuration entry
2227
type VendorInfo struct {
2328
Component string `json:"component"`
@@ -65,6 +70,11 @@ func FilterAndListVendors(listConfig schema.ListConfig, format string, delimiter
6570
return "", err
6671
}
6772

73+
// Set default delimiters based on format
74+
if format == FormatCSV && delimiter == DefaultTSVDelimiter {
75+
delimiter = DefaultCSVDelimiter
76+
}
77+
6878
if format == "" && listConfig.Format != "" {
6979
if err := ValidateFormat(listConfig.Format); err != nil {
7080
return "", err
@@ -152,14 +162,14 @@ func FilterAndListVendors(listConfig schema.ListConfig, format string, delimiter
152162

153163
// Handle different output formats
154164
switch format {
155-
case "json":
165+
case FormatJSON:
156166
jsonBytes, err := json.MarshalIndent(allVendors, "", " ")
157167
if err != nil {
158168
return "", fmt.Errorf("error formatting JSON output: %w", err)
159169
}
160170
return string(jsonBytes), nil
161171

162-
case "csv":
172+
case FormatCSV, FormatTSV:
163173
var output strings.Builder
164174
output.WriteString(strings.Join(header, delimiter) + utils.GetLineEnding())
165175
for _, row := range rows {

pkg/list/list_workflows.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ const (
2323
FormatTable = "table"
2424
FormatJSON = "json"
2525
FormatCSV = "csv"
26+
FormatTSV = "tsv"
2627
)
2728

2829
// ValidateFormat checks if the given format is supported
2930
func ValidateFormat(format string) error {
3031
if format == "" {
3132
return nil
3233
}
33-
validFormats := []string{FormatTable, FormatJSON, FormatCSV}
34+
validFormats := []string{FormatTable, FormatJSON, FormatCSV, FormatTSV}
3435
for _, f := range validFormats {
3536
if format == f {
3637
return nil

0 commit comments

Comments
 (0)