Add machine readable output to pkglist

This commit is contained in:
Ettore Di Giacinto
2020-04-19 11:24:41 +02:00
parent a3f0d848c9
commit 937609a9f4

View File

@@ -21,6 +21,8 @@ import (
"sort" "sort"
//. "github.com/mudler/luet/pkg/config" //. "github.com/mudler/luet/pkg/config"
"github.com/ghodss/yaml"
. "github.com/mudler/luet/pkg/config"
helpers "github.com/mudler/luet/pkg/helpers" helpers "github.com/mudler/luet/pkg/helpers"
. "github.com/mudler/luet/pkg/logger" . "github.com/mudler/luet/pkg/logger"
pkg "github.com/mudler/luet/pkg/package" pkg "github.com/mudler/luet/pkg/package"
@@ -29,6 +31,16 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
type PackageResult struct {
Name string `json:"name"`
Category string `json:"category"`
Version string `json:"version"`
}
type Results struct {
Packages []PackageResult `json:"packages"`
}
func pkgDetail(pkg pkg.Package) string { func pkgDetail(pkg pkg.Package) string {
ans := fmt.Sprintf(` ans := fmt.Sprintf(`
@@ Package: %s/%s-%s @@ Package: %s/%s-%s
@@ -63,11 +75,16 @@ func NewTreePkglistCommand() *cobra.Command {
} }
}, },
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
var results Results
treePath, _ := cmd.Flags().GetString("tree") treePath, _ := cmd.Flags().GetString("tree")
verbose, _ := cmd.Flags().GetBool("verbose") verbose, _ := cmd.Flags().GetBool("verbose")
buildtime, _ := cmd.Flags().GetBool("buildtime") buildtime, _ := cmd.Flags().GetBool("buildtime")
full, _ := cmd.Flags().GetBool("full") full, _ := cmd.Flags().GetBool("full")
out, _ := cmd.Flags().GetString("output")
if out != "terminal" {
LuetCfg.GetLogging().SetLogLevel("error")
}
var reciper tree.Builder var reciper tree.Builder
if buildtime { if buildtime {
@@ -126,17 +143,41 @@ func NewTreePkglistCommand() *cobra.Command {
if addPkg { if addPkg {
plist = append(plist, pkgstr) plist = append(plist, pkgstr)
results.Packages = append(results.Packages, PackageResult{
Name: p.GetName(),
Version: p.GetVersion(),
Category: p.GetCategory(),
})
} }
} }
y, err := yaml.Marshal(results)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
switch out {
case "yaml":
fmt.Println(string(y))
case "json":
j2, err := yaml.YAMLToJSON(y)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Println(string(j2))
default:
sort.Strings(plist) sort.Strings(plist)
for _, p := range plist { for _, p := range plist {
fmt.Println(p) fmt.Println(p)
} }
}
}, },
} }
ans.Flags().BoolP("buildtime", "b", false, "Build time match") ans.Flags().BoolP("buildtime", "b", false, "Build time match")
ans.Flags().StringP("output", "o", "terminal", "Output format ( Defaults: terminal, available: json,yaml )")
ans.Flags().BoolP("verbose", "v", false, "Add package version") ans.Flags().BoolP("verbose", "v", false, "Add package version")
ans.Flags().BoolP("full", "f", false, "Show package detail") ans.Flags().BoolP("full", "f", false, "Show package detail")