diff --git a/README.md b/README.md index 03bbfa4..69489ef 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ cominnek auth test - **[Stash](#stash)**: Stash changes from one branch to another one. - **[PR](#pr)**: Create a Pull Request as a draft to develop in GitHub. - **[Merge](#merge)**: Merge the branch into the received branch. +- **[Reset](#reset)**: Reset the branch to the selected commit. - **[Update](#update)**: Update the cominnek version. - **[Config](#config)**: Configure the cominnek. - **[PR](#pr-1)**: Configure the pull request template. @@ -147,8 +148,8 @@ the commit will be: `feat(home):{Ticket} do some modifications` | flag | type | description | | ------------------ | ------------- | ---------------------------------------| -| `-m --message` |string[] | Receives the commit messange & body message | -| `-a --all` |bolean | Add all files to the commit | +| `-m --message` |string[] | Receives the commit message & body message | +| `-a --all` |boolean | Add all files to the commit | | `-F --feat` |string | make the commit with the prefix feat() | | `-f --fix` |string | make the commit with the prefix fix() | | `-d --docs` |string | make the commit with the prefix docs() | @@ -228,6 +229,25 @@ cominnek merge "" *\* required* +## Reset +Reset the current branch to the selected commit. By default, it will reset to the last commit. + +```bash +cominnek reset +``` +This the equivalent of: `git reset --soft HEAD~1` + +| flag | type | description | +| ------------------ | ------------- | ---------------------------------------| +| `-c --commit` |string | commit hash | +| `-y --confirm` |boolean | confirm the reset | +| ` --hard` |boolean | Reset HEAD, index and working tree | +| ` --soft` |boolean | Reset only HEAD | +| ` --mixed` |boolean | Reset HEAD and index | +| ` --keep` |boolean | Reset HEAD, index and working tree | +| ` --merge` |boolean | Reset HEAD, index and working tree | +| `-n -number` |number | number of commits to reset | + ## Update Update the Cominnek version. diff --git a/cmd/reset.go b/cmd/reset.go index 7a35e22..6a6e2b4 100644 --- a/cmd/reset.go +++ b/cmd/reset.go @@ -40,7 +40,6 @@ func init() { resetCmd.Flags().BoolVar(&keepReset, "keep", false, "Reset HEAD, index and working tree") resetCmd.Flags().StringVarP(&config.AppData.Reset.Number, "number", "n", "", "The number of commits to reset.") resetCmd.Flags().StringVarP(&config.AppData.Reset.Commit, "commit", "c", "", "The commit hash to reset to.") - resetCmd.Flags().StringVarP(&config.AppData.Reset.Target, "target", "r", "", "The target to reset to.") resetCmd.Flags().BoolVarP(&config.AppData.Reset.Confirm, "confirm", "y", false, "Confirm the reset.") rootCmd.AddCommand(resetCmd) } diff --git a/pkg/cli/actions/reset.go b/pkg/cli/actions/reset.go index c2dd063..c071c54 100644 --- a/pkg/cli/actions/reset.go +++ b/pkg/cli/actions/reset.go @@ -8,6 +8,7 @@ import ( "github.com/AlecAivazis/survey/v2" "github.com/Minnek-Digital-Studio/cominnek/config" "github.com/Minnek-Digital-Studio/cominnek/pkg/ask" + "github.com/Minnek-Digital-Studio/cominnek/pkg/emitters" "github.com/Minnek-Digital-Studio/cominnek/pkg/git" ) @@ -15,6 +16,8 @@ var haveNumber = func() bool { return config.AppData.Reset.Number != "" } var haveType = func() bool { return config.AppData.Reset.Type != "" } var haveCommit = func() bool { return config.AppData.Reset.Commit != "" } +var resetEmitter = new(emitters.Reset) + func showConfirmation() { if config.AppData.Reset.Confirm { return @@ -72,6 +75,7 @@ func resetQuestions() { }, &config.AppData.Reset.Number, survey.WithValidator(survey.Required), survey.WithValidator(func(val interface{}) error { if _, err := strconv.Atoi(val.(string)); err != nil { + resetEmitter.Failed("please enter a number") return errors.New("please enter a number") } return nil @@ -93,6 +97,7 @@ func resetQuestions() { func Reset() { resetQuestions() + resetEmitter.Init("Reset type: " + config.AppData.Reset.Type) if config.AppData.Reset.Confirm { r_type := config.AppData.Reset.Type @@ -101,6 +106,8 @@ func Reset() { git.Reset(r_type, r_number, r_commit) since := time.Since(config.AppData.Start).String() + + resetEmitter.Success("Reset successful (" + since + ")") println("Reset successful (" + since + ")") } } diff --git a/pkg/emitters/reset.go b/pkg/emitters/reset.go new file mode 100644 index 0000000..c3d4622 --- /dev/null +++ b/pkg/emitters/reset.go @@ -0,0 +1,23 @@ +package emitters + +import ( + "github.com/Minnek-Digital-Studio/cominnek/pkg/events" + eventNames "github.com/Minnek-Digital-Studio/cominnek/pkg/events/names" +) + +var resetNames = new(eventNames.Reset) + +type Reset struct { +} + +func (c *Reset) Init(data string) { + events.App.Emit(resetNames.Init(), data) +} + +func (c *Reset) Failed(error string) { + events.App.Emit(resetNames.Failed(), error) +} + +func (c *Reset) Success(data string) { + events.App.Emit(resetNames.Success(), data) +} diff --git a/pkg/events/names/reset.go b/pkg/events/names/reset.go new file mode 100644 index 0000000..ccc19b9 --- /dev/null +++ b/pkg/events/names/reset.go @@ -0,0 +1,22 @@ +package eventNames + +import "github.com/kataras/go-events" + +func _buildResetName(event string) events.EventName { + return builder("reset", event) +} + +type Reset struct { +} + +func (c *Reset) Init() events.EventName { + return _buildResetName("init") +} + +func (c *Reset) Failed() events.EventName{ + return _buildResetName("failed") +} + +func (c *Reset) Success() events.EventName { + return _buildResetName("success") +} diff --git a/pkg/events/watcher.go b/pkg/events/watcher.go index e020fae..564ea9e 100644 --- a/pkg/events/watcher.go +++ b/pkg/events/watcher.go @@ -9,6 +9,7 @@ var pushNames = new(eventNames.Push) var branchNames = new(eventNames.Branch) var publishNames = new(eventNames.Publish) var pullRequest = new(eventNames.PullRequest) +var resetNames = new(eventNames.Reset) func Watcher() { App.On("init:root", func(payload ...interface{}) {}) @@ -37,4 +38,9 @@ func Watcher() { App.On(pullRequest.Init(), func(payload ...interface{}) {}) App.On(pullRequest.Failed(), func(payload ...interface{}) {}) App.On(pullRequest.Success(), func(payload ...interface{}) {}) + + //! Reset + App.On(resetNames.Init(), func(payload ...interface{}) {}) + App.On(resetNames.Failed(), func(payload ...interface{}) {}) + App.On(resetNames.Success(), func(payload ...interface{}) {}) } diff --git a/pkg/git/Reset.go b/pkg/git/Reset.go index 205e1d8..7d5a742 100644 --- a/pkg/git/Reset.go +++ b/pkg/git/Reset.go @@ -4,16 +4,20 @@ import ( "os" git_controller "github.com/Minnek-Digital-Studio/cominnek/controllers/git" + "github.com/Minnek-Digital-Studio/cominnek/pkg/emitters" "github.com/Minnek-Digital-Studio/cominnek/pkg/shell" "github.com/fatih/color" ) +var resetEmitter = new(emitters.Reset) + func Reset(r_type string, r_number string, r_commit string) { color.Yellow("\nResetting\n") cmd := git_controller.ResetBy(r_type, r_number, r_commit) _, _, err := shell.OutLive(cmd) if err != nil { + resetEmitter.Failed(err.Error()) os.Exit(1) } } \ No newline at end of file