mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-12 16:46:25 -04:00
Fix support for Git copy status when status.renames=copies (#4892)
Fixes: #4890 - Fix file status parsing to handle Git copy operations when `status.renames=copies` is configured - Extend status parser to recognize both "R" (rename) and "C" (copy) prefixes - Add comprehensive test coverage for copy status codes The same issue from https://github.com/jesseduffield/lazygit/issues/4890 now is fixed <img width="602" height="453" alt="image" src="https://github.com/user-attachments/assets/c5b0dc4b-8f77-4867-b601-65faa91d6607" />
This commit is contained in:
commit
6b5b493237
|
|
@ -201,8 +201,8 @@ func (self *FileLoader) gitStatus(opts GitStatusOptions) ([]FileStatus, error) {
|
|||
PreviousPath: "",
|
||||
}
|
||||
|
||||
if strings.HasPrefix(status.Change, "R") {
|
||||
// if a line starts with 'R' then the next line is the original file.
|
||||
if strings.HasPrefix(status.Change, "R") || strings.HasPrefix(status.Change, "C") {
|
||||
// if a line starts with 'R' (rename) or 'C' (copy) then the next line is the original file.
|
||||
status.PreviousPath = splitLines[i+1]
|
||||
status.StatusString = fmt.Sprintf("%s %s -> %s", status.Change, status.PreviousPath, status.Path)
|
||||
i++
|
||||
|
|
|
|||
|
|
@ -192,6 +192,43 @@ func TestFileGetStatusFiles(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "Copied files",
|
||||
similarityThreshold: 50,
|
||||
runner: oscommands.NewFakeRunner(t).
|
||||
ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z", "--find-renames=50%"},
|
||||
"C copy1.txt\x00original.txt\x00CM copy2.txt\x00original.txt",
|
||||
nil,
|
||||
),
|
||||
expectedFiles: []*models.File{
|
||||
{
|
||||
Path: "copy1.txt",
|
||||
PreviousPath: "original.txt",
|
||||
HasStagedChanges: true,
|
||||
HasUnstagedChanges: false,
|
||||
Tracked: true,
|
||||
Added: false,
|
||||
Deleted: false,
|
||||
HasMergeConflicts: false,
|
||||
HasInlineMergeConflicts: false,
|
||||
DisplayString: "C original.txt -> copy1.txt",
|
||||
ShortStatus: "C ",
|
||||
},
|
||||
{
|
||||
Path: "copy2.txt",
|
||||
PreviousPath: "original.txt",
|
||||
HasStagedChanges: true,
|
||||
HasUnstagedChanges: true,
|
||||
Tracked: true,
|
||||
Added: false,
|
||||
Deleted: false,
|
||||
HasMergeConflicts: false,
|
||||
HasInlineMergeConflicts: false,
|
||||
DisplayString: "CM original.txt -> copy2.txt",
|
||||
ShortStatus: "CM",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
|
|
|
|||
Loading…
Reference in a new issue