github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/cmd/plan.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/beauknowssoftware/makehcl/internal/plan" 8 "github.com/jessevdk/go-flags" 9 "github.com/olekukonko/tablewriter" 10 ) 11 12 type PlanCommand struct { 13 Filename flags.Filename `short:"f" long:"filename"` 14 All bool `short:"a" long:"all"` 15 Reason bool `short:"r" long:"reason"` 16 Goal Goal `positional-args:"yes"` 17 } 18 19 func reasonDescription(r plan.Reason) string { 20 switch r.ReasonType { 21 case plan.DoesNotExist: 22 return fmt.Sprintf("%v does not exist", r.Target) 23 case plan.DependencyPlanned: 24 return fmt.Sprintf("dependency %v is planned", r.Target) 25 case plan.OlderThanDependency: 26 return fmt.Sprintf("dependency %v has changed", r.Target) 27 default: 28 return fmt.Sprintf("unknown (%v)", r.Target) 29 } 30 } 31 32 func (c *PlanCommand) Execute(_ []string) error { 33 var o plan.DoOptions 34 o.Filename = string(c.Filename) 35 o.IgnoreLastModified = c.All 36 o.Goal = c.Goal.strings() 37 38 p, err := plan.Do(o) 39 if err != nil { 40 return err 41 } 42 43 if c.Reason && !c.All && len(p) > 0 { 44 printReasonTable(p) 45 } else { 46 for _, e := range p { 47 fmt.Println(e.Target) 48 } 49 } 50 51 return nil 52 } 53 54 func printReasonTable(p plan.Plan) { 55 table := tablewriter.NewWriter(os.Stdout) 56 table.SetHeader([]string{"Target", "Reason"}) 57 /* 58 table.SetAutoWrapText(false) 59 table.SetAutoFormatHeaders(true) 60 table.SetHeaderAlignment(tablewriter.ALIGN_LEFT) 61 table.SetAlignment(tablewriter.ALIGN_LEFT) 62 table.SetCenterSeparator("") 63 table.SetColumnSeparator("") 64 table.SetRowSeparator("") 65 table.SetHeaderLine(false) 66 table.SetBorder(false) 67 table.SetTablePadding("\t") // pad with tabs 68 table.SetNoWhiteSpace(true) 69 */ 70 table.SetRowLine(true) 71 72 for _, e := range p { 73 for _, r := range e.Reasons { 74 table.Append([]string{e.Target, reasonDescription(r)}) 75 } 76 } 77 78 table.Render() 79 }