diff --git a/pkg/integration/components/git.go b/pkg/integration/components/git.go index 1e2975be2..1b07e5cf8 100644 --- a/pkg/integration/components/git.go +++ b/pkg/integration/components/git.go @@ -55,3 +55,11 @@ func (self *Git) Version() *git_commands.GitVersion { } return version } + +func (self *Git) GetCommitHash(ref string) string { + output, err := self.shell.runCommandWithOutput([]string{"git", "rev-parse", ref}) + if err != nil { + log.Fatalf("Could not get commit hash: %v", err) + } + return strings.TrimSpace(output) +} diff --git a/pkg/integration/tests/custom_commands/access_commit_properties.go b/pkg/integration/tests/custom_commands/access_commit_properties.go new file mode 100644 index 000000000..fbb54bf81 --- /dev/null +++ b/pkg/integration/tests/custom_commands/access_commit_properties.go @@ -0,0 +1,37 @@ +package custom_commands + +import ( + "fmt" + + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var AccessCommitProperties = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Run a command that accesses properties of a commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("my change") + }, + SetupConfig: func(cfg *config.AppConfig) { + cfg.UserConfig.CustomCommands = []config.CustomCommand{ + { + Key: "X", + Context: "commits", + Command: "printf '%s\n%s' '{{ .SelectedLocalCommit.Name }}' '{{ .SelectedLocalCommit.Hash }}' > file.txt", + }, + } + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("my change").IsSelected(), + ). + Press("X") + + hash := t.Git().GetCommitHash("HEAD") + t.FileSystem().FileContent("file.txt", Equals(fmt.Sprintf("my change\n%s", hash))) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 8f62ca7f5..cb1a66ac5 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -97,6 +97,7 @@ var tests = []*components.IntegrationTest{ conflicts.ResolveExternally, conflicts.ResolveMultipleFiles, conflicts.UndoChooseHunk, + custom_commands.AccessCommitProperties, custom_commands.BasicCmdAtRuntime, custom_commands.BasicCmdFromConfig, custom_commands.CheckForConflicts,