diff --git a/pkg/gui/controllers/commits_files_controller.go b/pkg/gui/controllers/commits_files_controller.go index a9db34b7e..68a826eb8 100644 --- a/pkg/gui/controllers/commits_files_controller.go +++ b/pkg/gui/controllers/commits_files_controller.go @@ -292,7 +292,8 @@ func (self *CommitFilesController) openCopyMenu() error { func (self *CommitFilesController) checkout(node *filetree.CommitFileNode) error { self.c.LogAction(self.c.Tr.Actions.CheckoutFile) - if err := self.c.Git().WorkingTree.CheckoutFile(self.context().GetRef().RefName(), node.GetPath()); err != nil { + _, to := self.context().GetFromAndToForDiff() + if err := self.c.Git().WorkingTree.CheckoutFile(to, node.GetPath()); err != nil { return err } diff --git a/pkg/integration/tests/commit/checkout_file_from_commit.go b/pkg/integration/tests/commit/checkout_file_from_commit.go new file mode 100644 index 000000000..40a8ee146 --- /dev/null +++ b/pkg/integration/tests/commit/checkout_file_from_commit.go @@ -0,0 +1,55 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var CheckoutFileFromCommit = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Checkout a file from a commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("file.txt", "one\n") + shell.Commit("one") + shell.CreateFileAndAdd("file.txt", "two\n") + shell.Commit("two") + shell.CreateFileAndAdd("file.txt", "three\n") + shell.Commit("three") + shell.CreateFileAndAdd("file.txt", "four\n") + shell.Commit("four") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("four").IsSelected(), + Contains("three"), + Contains("two"), + Contains("one"), + ). + NavigateToLine(Contains("three")). + Tap(func() { + t.Views().Main().ContainsLines( + Contains("-two"), + Contains("+three"), + ) + }). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Equals("M file.txt"), + ). + Press(keys.CommitFiles.CheckoutCommitFile) + + t.Views().Files(). + Lines( + Equals("M file.txt"), + ) + + t.FileSystem().FileContent("file.txt", Equals("three\n")) + }, +}) diff --git a/pkg/integration/tests/commit/checkout_file_from_range_selection_of_commits.go b/pkg/integration/tests/commit/checkout_file_from_range_selection_of_commits.go new file mode 100644 index 000000000..28b8f966c --- /dev/null +++ b/pkg/integration/tests/commit/checkout_file_from_range_selection_of_commits.go @@ -0,0 +1,56 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var CheckoutFileFromRangeSelectionOfCommits = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Checkout a file from a range selection of commits", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("file.txt", "one\n") + shell.Commit("one") + shell.CreateFileAndAdd("file.txt", "two\n") + shell.Commit("two") + shell.CreateFileAndAdd("file.txt", "three\n") + shell.Commit("three") + shell.CreateFileAndAdd("file.txt", "four\n") + shell.Commit("four") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("four").IsSelected(), + Contains("three"), + Contains("two"), + Contains("one"), + ). + NavigateToLine(Contains("three")). + Press(keys.Universal.RangeSelectDown). + Tap(func() { + t.Views().Main().ContainsLines( + Contains("-one"), + Contains("+three"), + ) + }). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Equals("M file.txt"), + ). + Press(keys.CommitFiles.CheckoutCommitFile) + + t.Views().Files(). + Lines( + Equals("M file.txt"), + ) + + t.FileSystem().FileContent("file.txt", Equals("three\n")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index cce631956..b7e204fd2 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -89,6 +89,8 @@ var tests = []*components.IntegrationTest{ commit.AmendWhenThereAreConflictsAndContinue, commit.AutoWrapMessage, commit.Checkout, + commit.CheckoutFileFromCommit, + commit.CheckoutFileFromRangeSelectionOfCommits, commit.Commit, commit.CommitMultiline, commit.CommitSkipHooks,