mirror of
https://github.com/Slug-Boi/cocommit.git
synced 2026-05-13 12:45:47 +00:00
feat: added commitizen support (due to cmd execution styles this will not be in the test suite)
Due to the way that the interactive cli call has to be made there is no good way to automate the tests for it without spending a long time trying to understand go pipes. since this is more of an extra feature anyways I am fine with leaving this somewhat untested especially since it is small isolated code
This commit is contained in:
@@ -32,15 +32,13 @@ func teardown() {
|
|||||||
os.Setenv("author_file", envVar)
|
os.Setenv("author_file", envVar)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Skip cobra cmd tests on CI causes problems apparenly idk why
|
// Skip cobra cmd tests on CI causes problems apparenly idk why
|
||||||
// test will be run locally before releasing a new version
|
// test will be run locally before releasing a new version
|
||||||
func skipCI(t *testing.T) {
|
func skipCI(t *testing.T) {
|
||||||
if os.Getenv("CI") != "" {
|
if os.Getenv("CI") != "" {
|
||||||
t.Skip("Skipping testing in CI environment")
|
t.Skip("Skipping testing in CI environment")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func StdoutReader() (chan string, *os.File, *os.File, *os.File) {
|
func StdoutReader() (chan string, *os.File, *os.File, *os.File) {
|
||||||
old := os.Stdout
|
old := os.Stdout
|
||||||
@@ -111,7 +109,7 @@ func Test_CommitCmd(t *testing.T) {
|
|||||||
outC <- buf.String()
|
outC <- buf.String()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
cmd := rootCmD
|
cmd := rootCmd
|
||||||
cmd.SetArgs([]string{"-t", "Test commit message"})
|
cmd.SetArgs([]string{"-t", "Test commit message"})
|
||||||
cmd.Execute()
|
cmd.Execute()
|
||||||
|
|
||||||
@@ -142,7 +140,7 @@ func Test_CommitCmdWithM(t *testing.T) {
|
|||||||
outC <- buf.String()
|
outC <- buf.String()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
cmd := rootCmD
|
cmd := rootCmd
|
||||||
cmd.SetArgs([]string{"-m", "-t", "Test commit message"})
|
cmd.SetArgs([]string{"-m", "-t", "Test commit message"})
|
||||||
cmd.Execute()
|
cmd.Execute()
|
||||||
|
|
||||||
@@ -157,6 +155,6 @@ func Test_CommitCmdWithM(t *testing.T) {
|
|||||||
t.Errorf("Expected to find 'Test commit message' in output but got %s", outStr)
|
t.Errorf("Expected to find 'Test commit message' in output but got %s", outStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// root CMD TEST END
|
// root CMD TEST END
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/Slug-Boi/cocommit/src_code/go_src/cmd/tui"
|
||||||
|
"github.com/Slug-Boi/cocommit/src_code/go_src/cmd/utils"
|
||||||
|
"github.com/inancgumus/screen"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
// czCmd represents the cz command
|
||||||
|
var czCmd = &cobra.Command{
|
||||||
|
Use: "cz",
|
||||||
|
Short: "Allows for commitizen commit messages",
|
||||||
|
Long: `This command will allow the user to use commitizen to craft the commit message
|
||||||
|
after which the user will be able to add co-authors to the commit message. This will require
|
||||||
|
the user to have commitizen installed on their system.`,
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
var message string
|
||||||
|
var authors []string
|
||||||
|
|
||||||
|
// check if the print flag is set
|
||||||
|
pflag, _ := cmd.Flags().GetBool("print")
|
||||||
|
cflag, _ := cmd.Flags().GetBool("cli")
|
||||||
|
|
||||||
|
// run execute commands again as root run will not call this part
|
||||||
|
message = utils.Cz_Call()
|
||||||
|
|
||||||
|
if cflag {
|
||||||
|
// call the cli style syntax
|
||||||
|
authors = args
|
||||||
|
goto skip_tui
|
||||||
|
}
|
||||||
|
|
||||||
|
// for good measure clear the screen
|
||||||
|
screen.Clear()
|
||||||
|
screen.MoveTopLeft()
|
||||||
|
|
||||||
|
// call tui
|
||||||
|
authors = tui.Entry()
|
||||||
|
|
||||||
|
skip_tui:
|
||||||
|
// build the commit message
|
||||||
|
message = utils.Commit(message, authors)
|
||||||
|
|
||||||
|
// commit the message
|
||||||
|
utils.GitWrapper(message)
|
||||||
|
|
||||||
|
if pflag {
|
||||||
|
fmt.Println(message)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
rootCmd.AddCommand(czCmd)
|
||||||
|
czCmd.Flags().BoolP("print", "p", false, "Print the commit message")
|
||||||
|
czCmd.Flags().BoolP("cli", "c", false, "Use the cli style syntax to add co-authors")
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
// rootCmd represents the base command when called without any subcommands
|
// rootCmd represents the base command when called without any subcommands
|
||||||
// func RootCmd() *cobra.Command {
|
// func RootCmd() *cobra.Command {
|
||||||
var rootCmD = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
Use: `cocommit <commit message> <co-author1> [co-author2] ... ||
|
Use: `cocommit <commit message> <co-author1> [co-author2] ... ||
|
||||||
cocommit <commit message> <co-author1:email> [co-author2:email] ... ||
|
cocommit <commit message> <co-author1:email> [co-author2:email] ... ||
|
||||||
cocommit <commit message> all ||
|
cocommit <commit message> all ||
|
||||||
@@ -91,7 +91,7 @@ func Execute() {
|
|||||||
// define users
|
// define users
|
||||||
utils.Define_users(author_file)
|
utils.Define_users(author_file)
|
||||||
|
|
||||||
err := rootCmD.Execute()
|
err := rootCmd.Execute()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
@@ -99,8 +99,8 @@ func Execute() {
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
//rootCmD := RootCmd()
|
//rootCmD := RootCmd()
|
||||||
rootCmD.Flags().BoolP("print", "p", false, "Prints the commit message to the console")
|
rootCmd.Flags().BoolP("print", "p", false, "Prints the commit message to the console")
|
||||||
rootCmD.Flags().BoolP("test_print", "t", false, "Prints the commit message to the console without running the git commit command")
|
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("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().BoolP("authors", "a", false, "Runs the author list TUI")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Slug-Boi/cocommit/src_code/go_src/cmd/tui"
|
|
||||||
"github.com/Slug-Boi/cocommit/src_code/go_src/cmd/utils"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"slices"
|
"slices"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/Slug-Boi/cocommit/src_code/go_src/cmd/tui"
|
||||||
|
"github.com/Slug-Boi/cocommit/src_code/go_src/cmd/utils"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -17,43 +18,43 @@ var authorfile = utils.Find_authorfile()
|
|||||||
// usersCmd represents the users command
|
// usersCmd represents the users command
|
||||||
func UsersCmd() *cobra.Command {
|
func UsersCmd() *cobra.Command {
|
||||||
return &cobra.Command{
|
return &cobra.Command{
|
||||||
Use: "users",
|
Use: "users",
|
||||||
Short: "Displays all users from the author file located at: " + authorfile,
|
Short: "Displays all users from the author file located at: " + authorfile,
|
||||||
Long: `Displays all users from the author file located at: ` + authorfile,
|
Long: `Displays all users from the author file located at: ` + authorfile,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
//TODO: make this print a bit prettier (sort it and maybe use a table)
|
//TODO: make this print a bit prettier (sort it and maybe use a table)
|
||||||
// check if the no pretty print flag is set
|
// check if the no pretty print flag is set
|
||||||
np, _ := cmd.Flags().GetBool("np")
|
np, _ := cmd.Flags().GetBool("np")
|
||||||
if np {
|
if np {
|
||||||
println("List of users:\nFormat: <shortname>/<name> -> Username: <username> Email: <email>")
|
println("List of users:\nFormat: <shortname>/<name> -> Username: <username> Email: <email>")
|
||||||
seen_users := []utils.User{}
|
seen_users := []utils.User{}
|
||||||
user_sb := []string{}
|
user_sb := []string{}
|
||||||
for name, usr := range utils.Users {
|
for name, usr := range utils.Users {
|
||||||
if !slices.Contains(seen_users, usr) {
|
if !slices.Contains(seen_users, usr) {
|
||||||
user_sb = append(user_sb, utils.Users[name].Names+" ->"+" Username: "+usr.Username+" Email: "+usr.Email+"\n")
|
user_sb = append(user_sb, utils.Users[name].Names+" ->"+" Username: "+usr.Username+" Email: "+usr.Email+"\n")
|
||||||
seen_users = append(seen_users, usr)
|
seen_users = append(seen_users, usr)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
sort.Strings(user_sb)
|
||||||
|
println(strings.Join(user_sb, ""))
|
||||||
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
sort.Strings(user_sb)
|
bat_check := exec.Command("which", "bat")
|
||||||
println(strings.Join(user_sb, ""))
|
out, _ := bat_check.CombinedOutput()
|
||||||
os.Exit(0)
|
if string(out) == "" {
|
||||||
}
|
tui.Entry_US(authorfile)
|
||||||
bat_check := exec.Command("which", "bat")
|
os.Exit(0)
|
||||||
out, _ := bat_check.CombinedOutput()
|
}
|
||||||
if string(out) == "" {
|
bat := exec.Command("bat", authorfile)
|
||||||
tui.Entry_US(authorfile)
|
bat.Stdout = os.Stdout
|
||||||
os.Exit(0)
|
bat.Stderr = os.Stderr
|
||||||
}
|
bat.Run()
|
||||||
bat := exec.Command("bat", authorfile)
|
},
|
||||||
bat.Stdout = os.Stdout
|
}
|
||||||
bat.Stderr = os.Stderr
|
|
||||||
bat.Run()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
usersCmd := UsersCmd()
|
usersCmd := UsersCmd()
|
||||||
rootCmD.AddCommand(usersCmd)
|
rootCmd.AddCommand(usersCmd)
|
||||||
usersCmd.Flags().BoolP("np", "n", false, "No pretty print of the users")
|
usersCmd.Flags().BoolP("np", "n", false, "No pretty print of the users")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Cz_Call() string {
|
||||||
|
|
||||||
|
// create commitizen command
|
||||||
|
cmd := exec.Command("cz", "commit", "--dry-run", "--write-message-to-file", "msg")
|
||||||
|
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprint(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.OpenFile("msg", os.O_RDONLY, 0644)
|
||||||
|
defer os.Remove("msg")
|
||||||
|
defer file.Close()
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprint(err))
|
||||||
|
}
|
||||||
|
msg, err := io.ReadAll(file)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprint(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(msg)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user