diff --git a/pkg/commands/git_commands/working_tree.go b/pkg/commands/git_commands/working_tree.go index d9aecf01f..cac93385a 100644 --- a/pkg/commands/git_commands/working_tree.go +++ b/pkg/commands/git_commands/working_tree.go @@ -230,6 +230,7 @@ func (self *WorkingTreeCommands) WorktreeFileDiffCmdObj(node models.IFile, plain trackedArg := "--" colorArg := self.UserConfig.Git.Paging.ColorArg quotedPath := self.cmd.Quote(node.GetPath()) + quotedPrevPath := "" ignoreWhitespaceArg := "" contextSize := self.UserConfig.Git.DiffContextSize if cached { @@ -244,8 +245,11 @@ func (self *WorkingTreeCommands) WorktreeFileDiffCmdObj(node models.IFile, plain if ignoreWhitespace { ignoreWhitespaceArg = " --ignore-all-space" } + if prevPath := node.GetPreviousPath(); prevPath != "" { + quotedPrevPath = " " + self.cmd.Quote(prevPath) + } - cmdStr := fmt.Sprintf("git diff --submodule --no-ext-diff --unified=%d --color=%s%s%s %s %s", contextSize, colorArg, ignoreWhitespaceArg, cachedArg, trackedArg, quotedPath) + cmdStr := fmt.Sprintf("git diff --submodule --no-ext-diff --unified=%d --color=%s%s%s %s %s%s", contextSize, colorArg, ignoreWhitespaceArg, cachedArg, trackedArg, quotedPath, quotedPrevPath) return self.cmd.New(cmdStr).DontLog() } diff --git a/pkg/commands/models/file.go b/pkg/commands/models/file.go index c5e76949a..bfb40ee53 100644 --- a/pkg/commands/models/file.go +++ b/pkg/commands/models/file.go @@ -27,6 +27,7 @@ type IFile interface { GetHasStagedChanges() bool GetIsTracked() bool GetPath() string + GetPreviousPath() string } func (f *File) IsRename() bool { @@ -85,3 +86,7 @@ func (f *File) GetPath() string { // TODO: remove concept of name; just use path return f.Name } + +func (f *File) GetPreviousPath() string { + return f.PreviousName +} diff --git a/pkg/gui/filetree/file_node.go b/pkg/gui/filetree/file_node.go index 69663b000..53f87c71b 100644 --- a/pkg/gui/filetree/file_node.go +++ b/pkg/gui/filetree/file_node.go @@ -42,6 +42,13 @@ func (s *FileNode) GetPath() string { return s.Path } +func (s *FileNode) GetPreviousPath() string { + if s.File != nil { + return s.File.GetPreviousPath() + } + return "" +} + func (s *FileNode) GetChildren() []INode { return slices.Map(s.Children, func(child *FileNode) INode { return child