github.com/kilpkonn/gtm-enhanced@v1.3.5/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/git-time-metric/gtm/project" 12 "github.com/git-time-metric/gtm/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 -days=0 Delete starting from n days in the past 38 ` 39 return strings.TrimSpace(helpText) 40 } 41 42 // Run executes clean command with args 43 func (c CleanCmd) Run(args []string) int { 44 var yes, terminalOnly bool 45 var days int 46 cmdFlags := flag.NewFlagSet("clean", flag.ContinueOnError) 47 cmdFlags.BoolVar(&yes, "yes", false, "") 48 cmdFlags.BoolVar(&terminalOnly, "terminal-only", false, "") 49 cmdFlags.IntVar(&days, "days", 0, "") 50 cmdFlags.Usage = func() { c.UI.Output(c.Help()) } 51 if err := cmdFlags.Parse(args); err != nil { 52 return 1 53 } 54 55 confirm := yes 56 if !confirm { 57 response, err := c.UI.Ask("Delete pending time data (y/n)?") 58 if err != nil { 59 return 0 60 } 61 confirm = strings.TrimSpace(strings.ToLower(response)) == "y" 62 } 63 64 if confirm { 65 if err := project.Clean(util.AfterNow(days), terminalOnly); err != nil { 66 c.UI.Error(err.Error()) 67 return 1 68 } 69 } 70 return 0 71 } 72 73 // Synopsis return help for clean command 74 func (c CleanCmd) Synopsis() string { 75 return "Delete pending time data" 76 }