github.com/developest/gtm-enhanced@v1.0.4-0.20220111132249-cc80a3372c3f/command/clean.go (about) 1 // Copyright 2016 Michael Schenk. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package command 6 7 import ( 8 "flag" 9 "strings" 10 11 "github.com/DEVELOPEST/gtm-core/project" 12 "github.com/DEVELOPEST/gtm-core/util" 13 "github.com/mitchellh/cli" 14 ) 15 16 // CleanCmd contains method for clean method 17 type CleanCmd struct { 18 UI cli.Ui 19 } 20 21 // NewClean returns a new CleanCmd struct 22 func NewClean() (cli.Command, error) { 23 return CleanCmd{}, nil 24 } 25 26 // Help returns help for the clean command 27 func (c CleanCmd) Help() string { 28 helpText := ` 29 Usage: gtm clean [options] 30 31 Deletes pending time data for the current git repository. 32 33 Options: 34 35 -yes Delete time data without asking for confirmation. 36 -terminal-only Only delete terminal time data 37 -app-only Only delete apps time data 38 -days=0 Delete starting from n days in the past 39 ` 40 return strings.TrimSpace(helpText) 41 } 42 43 // Run executes clean command with args 44 func (c CleanCmd) Run(args []string) int { 45 var yes, terminalOnly, appOnly bool 46 var days int 47 cmdFlags := flag.NewFlagSet("clean", flag.ContinueOnError) 48 cmdFlags.BoolVar(&yes, "yes", false, "") 49 cmdFlags.BoolVar(&terminalOnly, "terminal-only", false, "") 50 cmdFlags.BoolVar(&appOnly, "app-only", false, "") 51 cmdFlags.IntVar(&days, "days", 0, "") 52 cmdFlags.Usage = func() { c.UI.Output(c.Help()) } 53 if err := cmdFlags.Parse(args); err != nil { 54 return 1 55 } 56 57 confirm := yes 58 if !confirm { 59 response, err := c.UI.Ask("Delete pending time data (y/n)?") 60 if err != nil { 61 return 0 62 } 63 confirm = strings.TrimSpace(strings.ToLower(response)) == "y" 64 } 65 66 if confirm { 67 if err := project.Clean(util.AfterNow(days), terminalOnly, appOnly); err != nil { 68 c.UI.Error(err.Error()) 69 return 1 70 } 71 } 72 return 0 73 } 74 75 // Synopsis return help for clean command 76 func (c CleanCmd) Synopsis() string { 77 return "Delete pending time data" 78 }