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  }