diff --git a/cli/hook.go b/cli/hook.go index d38a0af..9747a45 100644 --- a/cli/hook.go +++ b/cli/hook.go @@ -3,6 +3,7 @@ package cli import ( "fmt" "io/ioutil" + "os" "path/filepath" "github.com/fatih/color" @@ -28,6 +29,26 @@ gmoji --hook $1 return nil } +// RemoveHook removes the commit hook. +func (c CLI) RemoveHook() error { + p, err := c.hookPath() + if err != nil { + return err + } + + if _, err := os.Stat(p); os.IsNotExist(err) { + return fmt.Errorf("%s does not exist", p) + } + + if err := os.Remove(p); err != nil { + return err + } + + fmt.Printf("%s\n", color.GreenString("gmoji commit hook removed successfully")) + + return nil +} + func (c CLI) hookPath() (string, error) { gitRoot, err := c.GitRoot() if err != nil { diff --git a/cmd/gmoji/cmd/cmd_hook.go b/cmd/gmoji/cmd/cmd_hook.go index 065e4ae..6ba077f 100644 --- a/cmd/gmoji/cmd/cmd_hook.go +++ b/cmd/gmoji/cmd/cmd_hook.go @@ -5,12 +5,28 @@ import ( "github.com/spf13/cobra" ) +// HookOptions represents the options for hook command. +type HookOptions struct { + Remove bool +} + +var ( + hookOptions HookOptions +) + func runHook(cmd *cobra.Command, args []string) error { c, err := cli.NewCLI() if err != nil { return err } + if hookOptions.Remove { + if err := c.RemoveHook(); err != nil { + return err + } + return nil + } + if err := c.Hook(); err != nil { return err } @@ -26,5 +42,7 @@ var hookCmd = &cobra.Command{ } func init() { + hookCmd.Flags().BoolVarP(&hookOptions.Remove, "remove", "r", false, "remove the commit hook") + rootCmd.AddCommand(hookCmd) }