package cmd import ( "axolotl/models" "axolotl/output" "axolotl/service" "fmt" "os" "github.com/spf13/cobra" ) var ( uTitle, uContent, uDue string uClearDue bool uStatus, uPrio, uType string uNamespace, uAssignee string uAddTags, uRmTags, uAddRels, uRmRels []string ) var updateCmd = &cobra.Command{ Use: "update ", Short: "Update a node", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { svc, err := service.GetNodeService(cfg) if err != nil { fmt.Fprintln(os.Stderr, err) return } input := service.UpdateInput{ AddTags: append([]string{}, uAddTags...), RemoveTags: uRmTags, } if cmd.Flags().Changed("title") { input.Title = &uTitle } if cmd.Flags().Changed("content") { input.Content = &uContent } if cmd.Flags().Changed("due") { input.DueDate = &uDue } if uClearDue { empty := "" input.DueDate = &empty } // Shorthand flags expand to tags or rels. if cmd.Flags().Changed("type") { input.AddTags = append(input.AddTags, "_type::"+uType) } if cmd.Flags().Changed("status") { input.AddTags = append(input.AddTags, "_status::"+uStatus) } if cmd.Flags().Changed("prio") { input.AddTags = append(input.AddTags, "_prio::"+uPrio) } if cmd.Flags().Changed("namespace") { input.AddRels = append(input.AddRels, service.RelInput{Type: models.RelInNamespace, Target: uNamespace}) } if cmd.Flags().Changed("assignee") { input.AddRels = append(input.AddRels, service.RelInput{Type: models.RelAssignee, Target: uAssignee}) } for _, r := range uAddRels { ri, err := parseRelInput(r) if err != nil { fmt.Fprintln(os.Stderr, err) return } input.AddRels = append(input.AddRels, ri) } for _, r := range uRmRels { ri, err := parseRelInput(r) if err != nil { fmt.Fprintln(os.Stderr, err) return } input.RemoveRels = append(input.RemoveRels, ri) } n, err := svc.Update(args[0], input) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } output.PrintNode(cmd.OutOrStdout(), svc, n, jsonFlag) }, } func init() { rootCmd.AddCommand(updateCmd) f := updateCmd.Flags() f.StringVar(&uTitle, "title", "", "new title") f.StringVar(&uContent, "content", "", "new content") f.StringVar(&uDue, "due", "", "due date") f.BoolVar(&uClearDue, "clear-due", false, "clear due date") f.StringVar(&uStatus, "status", "", "status (open, done)") f.StringVar(&uPrio, "prio", "", "priority (high, medium, low)") f.StringVar(&uType, "type", "", "node type") f.StringVar(&uNamespace, "namespace", "", "namespace name or ID") f.StringVar(&uAssignee, "assignee", "", "assignee username or ID") f.StringArrayVar(&uAddTags, "tag", nil, "add tags") f.StringArrayVar(&uRmTags, "tag-remove", nil, "remove tags") f.StringArrayVar(&uAddRels, "rel", nil, "add relations (type:target)") f.StringArrayVar(&uRmRels, "rel-remove", nil, "remove relations (type:target)") }