From c4671efd9cefcc9ec1336f09c75a473e0f6d4290 Mon Sep 17 00:00:00 2001 From: Slug-Boi Date: Thu, 28 Nov 2024 10:49:12 +0100 Subject: [PATCH] feat: add ability to pass flags to git commit --- src/cmd/cmd_test.go | 31 +++++++++++++++++++++++++++++++ src/cmd/cz.go | 11 +++++++++-- src/cmd/root.go | 20 +++++++++++++++++--- src/cmd/utils/commit.go | 10 ++++++++-- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/cmd/cmd_test.go b/src/cmd/cmd_test.go index 205fd2c..d3678ea 100644 --- a/src/cmd/cmd_test.go +++ b/src/cmd/cmd_test.go @@ -157,4 +157,35 @@ func Test_CommitCmdWithM(t *testing.T) { } +// output doesnt match the expected terminal behavior very confusing... +// func Test_CommitWithGitFlags(t *testing.T) { +// skipCI(t) +// setup() +// defer teardown() +// +// //stdout reader +// outC, r, w, old := StdoutReader() +// +// go func() { +// var buf bytes.Buffer +// io.Copy(&buf, r) +// outC <- buf.String() +// }() +// +// cmd := rootCmd +// cmd.SetArgs([]string{"-g", "\"-a --dry-run\"", "Test commit message"}) +// cmd.Execute() +// +// w.Close() +// os.Stdout = old +// outStr := <-outC +// if outStr == "" { +// t.Errorf("Expected output but got nothing") +// } +// +// if !strings.Contains(outStr, "Changes to be commited:\n") { +// t.Errorf("Expected to find 'Test commit message' in output but got %s", outStr) +// } +// } + // root CMD TEST END diff --git a/src/cmd/cz.go b/src/cmd/cz.go index a2e52e2..05a9560 100644 --- a/src/cmd/cz.go +++ b/src/cmd/cz.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "strings" "github.com/Slug-Boi/cocommit/src/cmd/tui" "github.com/Slug-Boi/cocommit/src/cmd/utils" @@ -24,6 +25,7 @@ This will require the user to have commitizen installed on their system.`, // check if the print flag is set pflag, _ := cmd.Flags().GetBool("print") cflag, _ := cmd.Flags().GetBool("cli") + gflag, _ := cmd.Flags().GetString("git") // run execute commands again as root run will not call this part message = utils.Cz_Call() @@ -41,12 +43,16 @@ This will require the user to have commitizen installed on their system.`, // call tui authors = tui.Entry() - skip_tui: + skip_tui: // build the commit message message = utils.Commit(message, authors) // commit the message - utils.GitWrapper(message) + var git_flags []string + if gflag != "" { + git_flags = strings.Split(gflag, " ") + } + utils.GitWrapper(message, git_flags) if pflag { fmt.Println(message) @@ -56,6 +62,7 @@ This will require the user to have commitizen installed on their system.`, func init() { rootCmd.AddCommand(czCmd) + czCmd.Flags().StringP("git", "g", "", "Passes the flags specified to the git command") czCmd.Flags().BoolP("print", "p", false, "Print the commit message") czCmd.Flags().BoolP("cli", "c", false, "[co-author1] [co-author2] ...") } diff --git a/src/cmd/root.go b/src/cmd/root.go index a22f18a..83952ef 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "os" + "strings" "github.com/Slug-Boi/cocommit/src/cmd/tui" "github.com/Slug-Boi/cocommit/src/cmd/utils" @@ -33,6 +34,13 @@ var rootCmd = &cobra.Command{ pflag, _ := cmd.Flags().GetBool("print") tflag, _ := cmd.Flags().GetBool("test_print") aflag, _ := cmd.Flags().GetBool("authors") + gflag, _ := cmd.Flags().GetString("git") + + var git_flags []string + // runs the git commit command + if gflag != "" { + git_flags = strings.Split(gflag, " ") + } if aflag { tui.Entry() @@ -61,7 +69,7 @@ var rootCmd = &cobra.Command{ return } - utils.GitWrapper(args[0]) + utils.GitWrapper(args[0], git_flags) if pflag { fmt.Println(args[0]) } @@ -79,12 +87,17 @@ var rootCmd = &cobra.Command{ message = utils.Commit(args[0], args[1:]) tui: + if tflag { + fmt.Println(message) + return + } + // prints the commit message to the console if the print flag is set if pflag { fmt.Println(message) } - // runs the git commit command - utils.GitWrapper(message) + + utils.GitWrapper(message, git_flags) }, } @@ -108,4 +121,5 @@ func init() { rootCmd.Flags().BoolP("test_print", "t", false, "Prints the commit message to the console without running the git commit command") rootCmd.Flags().BoolP("message", "m", false, "Does nothing but allows for -m to be used in the command") rootCmd.Flags().BoolP("authors", "a", false, "Runs the author list TUI") + rootCmd.Flags().StringP("git", "g", "", "Adds the given flags to the git command") } diff --git a/src/cmd/utils/commit.go b/src/cmd/utils/commit.go index 008497f..db46d5d 100644 --- a/src/cmd/utils/commit.go +++ b/src/cmd/utils/commit.go @@ -61,9 +61,15 @@ skip_loop: return sb.String() } -func GitWrapper(commit string) { +func GitWrapper(commit string, flags []string) { // commit shell command - cmd := exec.Command("git", "commit", "-m", commit) + // specify git command + input := []string{"commit"} + // append the message to the flags + flags = append(flags, "-m", commit) + // concat the git command and the flags + message + input = append(input, flags...) + cmd := exec.Command("git", input...) // https://stackoverflow.com/questions/18159704/how-to-debug-exit-status-1-error-when-running-exec-command-in-golang