66 lines
1.6 KiB
Go
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
|
|
}
|