Files

66 lines
1.6 KiB
Go

package cli
import (
"encoding/json"
"fmt"
"text/tabwriter"
"github.com/spf13/cobra"
)
func newResolveCmd(opts *options) *cobra.Command {
var asJSON bool
cmd := &cobra.Command{
Use: "resolve",
Short: "List the extensions the config resolves to, in merge order",
Long: `Resolve fetches each extension in the config and its dependencies, and prints
them in the order their patches are applied. Dependencies come first. Nothing
is generated.`,
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, _ []string) error {
cfg, g, err := opts.setup(cmd)
if err != nil {
return err
}
exts, err := g.Resolve(cfg.Extensions)
if err != nil {
return err
}
if asJSON {
type row struct {
Name string `json:"name"`
URL string `json:"url"`
Declared bool `json:"declared"`
Dependencies []string `json:"dependencies,omitempty"`
}
rows := make([]row, len(exts))
for i, e := range exts {
rows[i] = row{e.Name, e.URL, e.Declared, e.Dependencies}
}
enc := json.NewEncoder(cmd.OutOrStdout())
enc.SetIndent("", " ")
if err := enc.Encode(rows); err != nil {
return err
}
} else {
w := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 0, 2, ' ', 0)
fmt.Fprintln(w, "#\tNAME\tSOURCE\tURL")
for i, e := range exts {
src := "dependency"
if e.Declared {
src = "declared"
}
fmt.Fprintf(w, "%d\t%s\t%s\t%s\n", i+1, e.Name, src, e.URL)
}
if err := w.Flush(); err != nil {
return err
}
}
return opts.finish(g)
},
}
cmd.Flags().BoolVar(&asJSON, "json", false, "print as JSON")
return cmd
}