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  }