diff --git a/pkg/commands/branches.go b/pkg/commands/branches.go index cfc9803d6..62a243247 100644 --- a/pkg/commands/branches.go +++ b/pkg/commands/branches.go @@ -152,6 +152,10 @@ func (c *GitCommand) ResetSoft(ref string) error { return c.RunCommand("git reset --soft " + ref) } +func (c *GitCommand) ResetMixed(ref string) error { + return c.RunCommand("git reset --mixed " + ref) +} + func (c *GitCommand) RenameBranch(oldName string, newName string) error { return c.RunCommand("git branch --move %s %s", oldName, newName) } diff --git a/pkg/commands/git.go b/pkg/commands/git.go index 2745c1935..db5585172 100644 --- a/pkg/commands/git.go +++ b/pkg/commands/git.go @@ -87,7 +87,13 @@ func (c *GitCommand) WithSpan(span string) *GitCommand { newGitCommand := &GitCommand{} *newGitCommand = *c newGitCommand.OSCommand = c.OSCommand.WithSpan(span) + + // NOTE: unlike the other things here which create shallow clones, this will + // actually update the PatchManager on the original struct to have the new span. + // This means each time we call ApplyPatch in PatchManager, we need to ensure + // we've called .WithSpan() ahead of time with the new span value newGitCommand.PatchManager.ApplyPatch = newGitCommand.ApplyPatch + return newGitCommand } diff --git a/pkg/gui/workspace_reset_options_panel.go b/pkg/gui/workspace_reset_options_panel.go index 1346d2f91..701aecf08 100644 --- a/pkg/gui/workspace_reset_options_panel.go +++ b/pkg/gui/workspace_reset_options_panel.go @@ -21,7 +21,7 @@ func (gui *Gui) handleCreateResetMenu() error { red.Sprint(nukeStr), }, onPress: func() error { - if err := gui.GitCommand.ResetAndClean(); err != nil { + if err := gui.GitCommand.WithSpan("Nuke working tree").ResetAndClean(); err != nil { return gui.surfaceError(err) } @@ -34,7 +34,7 @@ func (gui *Gui) handleCreateResetMenu() error { red.Sprint("git checkout -- ."), }, onPress: func() error { - if err := gui.GitCommand.DiscardAnyUnstagedFileChanges(); err != nil { + if err := gui.GitCommand.WithSpan("Discard unstaged file changes").DiscardAnyUnstagedFileChanges(); err != nil { return gui.surfaceError(err) } @@ -47,7 +47,7 @@ func (gui *Gui) handleCreateResetMenu() error { red.Sprint("git clean -fd"), }, onPress: func() error { - if err := gui.GitCommand.RemoveUntrackedFiles(); err != nil { + if err := gui.GitCommand.WithSpan("Remove untracked files").RemoveUntrackedFiles(); err != nil { return gui.surfaceError(err) } @@ -60,7 +60,7 @@ func (gui *Gui) handleCreateResetMenu() error { red.Sprint("git reset --soft HEAD"), }, onPress: func() error { - if err := gui.GitCommand.ResetSoft("HEAD"); err != nil { + if err := gui.GitCommand.WithSpan("Soft reset").ResetSoft("HEAD"); err != nil { return gui.surfaceError(err) } @@ -73,7 +73,7 @@ func (gui *Gui) handleCreateResetMenu() error { red.Sprint("git reset --mixed HEAD"), }, onPress: func() error { - if err := gui.GitCommand.ResetSoft("HEAD"); err != nil { + if err := gui.GitCommand.WithSpan("Mixed reset").ResetMixed("HEAD"); err != nil { return gui.surfaceError(err) } @@ -86,7 +86,7 @@ func (gui *Gui) handleCreateResetMenu() error { red.Sprint("git reset --hard HEAD"), }, onPress: func() error { - if err := gui.GitCommand.ResetHard("HEAD"); err != nil { + if err := gui.GitCommand.WithSpan("Hard reset").ResetHard("HEAD"); err != nil { return gui.surfaceError(err) }