diff --git a/pkg/commands/git_commands/diff.go b/pkg/commands/git_commands/diff.go index d7121db9925..b3c97faaa8a 100644 --- a/pkg/commands/git_commands/diff.go +++ b/pkg/commands/git_commands/diff.go @@ -16,6 +16,8 @@ func NewDiffCommands(gitCommon *GitCommon) *DiffCommands { } } +// This is for generating diffs to be shown in the UI (e.g. rendering a range +// diff to the main view). It uses a custom pager if one is configured. func (self *DiffCommands) DiffCmdObj(diffArgs []string) oscommands.ICmdObj { extDiffCmd := self.UserConfig().Git.Paging.ExternalDiffCommand useExtDiff := extDiffCmd != "" @@ -36,27 +38,21 @@ func (self *DiffCommands) DiffCmdObj(diffArgs []string) oscommands.ICmdObj { ) } -func (self *DiffCommands) internalDiffCmdObj(diffArgs ...string) *GitCommandBuilder { - return NewGitCmd("diff"). - Config("diff.noprefix=false"). - Arg("--no-ext-diff", "--no-color"). - Arg(diffArgs...). - Dir(self.repoPaths.worktreePath) -} - -func (self *DiffCommands) GetPathDiff(path string, staged bool) (string, error) { +// This is a basic generic diff command that can be used for any diff operation +// (e.g. copying a diff to the clipboard). It will not use a custom pager, and +// does not use user configs such as ignore whitespace. +// If you want to diff specific refs (one or two), you need to add them yourself +// in additionalArgs; it is recommended to also pass `--` after that. If you +// want to restrict the diff to specific paths, pass them in additionalArgs +// after the `--`. +func (self *DiffCommands) GetDiff(staged bool, additionalArgs ...string) (string, error) { return self.cmd.New( - self.internalDiffCmdObj(). - ArgIf(staged, "--staged"). - Arg(path). - ToArgv(), - ).RunWithOutput() -} - -func (self *DiffCommands) GetAllDiff(staged bool) (string, error) { - return self.cmd.New( - self.internalDiffCmdObj(). + NewGitCmd("diff"). + Config("diff.noprefix=false"). + Arg("--no-ext-diff", "--no-color"). ArgIf(staged, "--staged"). + Dir(self.repoPaths.worktreePath). + Arg(additionalArgs...). ToArgv(), ).RunWithOutput() } diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index 1ea20eeb218..e31adf36703 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -869,7 +869,7 @@ func (self *FilesController) openCopyMenu() error { OnPress: func() error { path := self.context().GetSelectedPath() hasStaged := self.hasPathStagedChanges(node) - diff, err := self.c.Git().Diff.GetPathDiff(path, hasStaged) + diff, err := self.c.Git().Diff.GetDiff(hasStaged, "--", path) if err != nil { return err } @@ -894,7 +894,7 @@ func (self *FilesController) openCopyMenu() error { Tooltip: self.c.Tr.CopyFileDiffTooltip, OnPress: func() error { hasStaged := self.c.Helpers().WorkingTree.AnyStagedFiles() - diff, err := self.c.Git().Diff.GetAllDiff(hasStaged) + diff, err := self.c.Git().Diff.GetDiff(hasStaged, "--") if err != nil { return err }