-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve undo action to restore files upon undoing a commit (#4167)
- **PR Description** Right now, undoing a commit performs a hard reset, which also discards all the changes from that commit. This PR adds new config options (and a new `undo` section) which allow users to choose between `hard` and `soft` reset modes when undoing commits. Personally, I think that the default should be `soft`, because the state before the commit had the files, so undoing a commit should put the files where they were before. But this PR keeps `hard` as the default and does not change current behavior. - **Please check if the PR fulfills these requirements** * [x] Cheatsheets are up-to-date (run `go generate ./...`) * [x] Code has been formatted (see [here](https://github.com/jesseduffield/lazygit/blob/master/CONTRIBUTING.md#code-formatting)) * [x] Tests have been added/updated (see [here](https://github.com/jesseduffield/lazygit/blob/master/pkg/integration/README.md) for the integration test guide) * [x] Text is internationalised (see [here](https://github.com/jesseduffield/lazygit/blob/master/CONTRIBUTING.md#internationalisation)) * [x] If a new UserConfig entry was added, make sure it can be hot-reloaded (see [here](https://github.com/jesseduffield/lazygit/blob/master/docs/dev/Codebase_Guide.md#using-userconfig)) * [x] Docs have been updated if necessary * [x] You've read through your own file changes for silly mistakes etc <!-- Be sure to name your PR with an imperative e.g. 'Add worktrees view' see https://github.com/jesseduffield/lazygit/releases/tag/v0.40.0 for examples -->
- Loading branch information
Showing
4 changed files
with
145 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
package undo | ||
|
||
import ( | ||
"github.com/jesseduffield/lazygit/pkg/config" | ||
. "github.com/jesseduffield/lazygit/pkg/integration/components" | ||
) | ||
|
||
var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{ | ||
Description: "Undo/redo a commit", | ||
ExtraCmdArgs: []string{}, | ||
Skip: false, | ||
SetupConfig: func(config *config.AppConfig) {}, | ||
SetupRepo: func(shell *Shell) { | ||
shell.CreateFileAndAdd("other-file", "other-file-1") | ||
shell.Commit("one") | ||
shell.CreateFileAndAdd("file", "file-1") | ||
shell.Commit("two") | ||
shell.UpdateFile("other-file", "other-file-2") | ||
}, | ||
Run: func(t *TestDriver, keys config.KeybindingConfig) { | ||
confirmUndo := func() { | ||
t.ExpectPopup().Confirmation(). | ||
Title(Equals("Undo")). | ||
Content(MatchesRegexp(`Are you sure you want to soft reset to '.*'\?`)). | ||
Confirm() | ||
} | ||
|
||
confirmRedo := func() { | ||
t.ExpectPopup().Confirmation(). | ||
Title(Equals("Redo")). | ||
Content(MatchesRegexp(`Are you sure you want to hard reset to '.*'\? An auto-stash will be performed if necessary\.`)). | ||
Confirm() | ||
} | ||
|
||
confirmDiscardFile := func() { | ||
t.ExpectPopup().Menu(). | ||
Title(Equals("Discard changes")). | ||
Select(Contains("Discard all changes")). | ||
Confirm() | ||
} | ||
|
||
t.Views().Files(). | ||
Lines( | ||
Contains(" M other-file"), | ||
) | ||
|
||
t.Views().Commits().Focus(). | ||
Lines( | ||
Contains("two").IsSelected(), | ||
Contains("one"), | ||
). | ||
Press(keys.Universal.Undo). | ||
Tap(confirmUndo). | ||
Lines( | ||
Contains("one").IsSelected(), | ||
) | ||
|
||
t.Views().Files(). | ||
Lines( | ||
Contains("A file"), | ||
Contains(" M other-file"), | ||
) | ||
|
||
t.Views().Commits().Focus(). | ||
Press(keys.Universal.Redo). | ||
Tap(confirmRedo). | ||
Lines( | ||
Contains("two").IsSelected(), | ||
Contains("one"), | ||
) | ||
|
||
t.Views().Files(). | ||
Lines( | ||
Contains(" M other-file"), | ||
) | ||
|
||
// Undo again, this time discarding the original change before redoing again | ||
t.Views().Commits().Focus(). | ||
Press(keys.Universal.Undo). | ||
Tap(confirmUndo). | ||
Lines( | ||
Contains("one").IsSelected(), | ||
) | ||
|
||
t.Views().Files().Focus(). | ||
Lines( | ||
Contains("A file"), | ||
Contains(" M other-file").IsSelected(), | ||
). | ||
Press(keys.Universal.PrevItem). | ||
Press(keys.Universal.Remove). | ||
Tap(confirmDiscardFile). | ||
Lines( | ||
Contains(" M other-file"), | ||
). | ||
Press(keys.Universal.Redo). | ||
Tap(confirmRedo) | ||
|
||
t.Views().Commits(). | ||
Lines( | ||
Contains("two"), | ||
Contains("one"), | ||
) | ||
|
||
t.Views().Files(). | ||
Lines( | ||
Contains(" M other-file"), | ||
) | ||
}, | ||
}) |