diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2020-09-29 19:22:26 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2020-09-29 20:48:49 +1000 |
commit | 1767f91047a35318f6b1e469199c8a7f547f2afc (patch) | |
tree | fbbd83d25289676d305eaabc1e354a8f68a834a4 /pkg/commands/loading_commit_files.go | |
parent | 1759ddf2470389d8de7ccedad24caf66c3cdb7d5 (diff) |
factor out code for loading models
Diffstat (limited to 'pkg/commands/loading_commit_files.go')
-rw-r--r-- | pkg/commands/loading_commit_files.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/pkg/commands/loading_commit_files.go b/pkg/commands/loading_commit_files.go new file mode 100644 index 000000000..ed0f855d4 --- /dev/null +++ b/pkg/commands/loading_commit_files.go @@ -0,0 +1,50 @@ +package commands + +import ( + "strings" + + "github.com/jesseduffield/lazygit/pkg/commands/patch" + "github.com/jesseduffield/lazygit/pkg/models" +) + +// GetFilesInDiff get the specified commit files +func (c *GitCommand) GetFilesInDiff(from string, to string, reverse bool, patchManager *patch.PatchManager) ([]*models.CommitFile, error) { + reverseFlag := "" + if reverse { + reverseFlag = " -R " + } + + filenames, err := c.OSCommand.RunCommandWithOutput("git diff --submodule --no-ext-diff --name-status %s %s %s", reverseFlag, from, to) + if err != nil { + return nil, err + } + + return c.getCommitFilesFromFilenames(filenames, to, patchManager), nil +} + +// filenames string is something like "file1\nfile2\nfile3" +func (c *GitCommand) getCommitFilesFromFilenames(filenames string, parent string, patchManager *patch.PatchManager) []*models.CommitFile { + commitFiles := make([]*models.CommitFile, 0) + + for _, line := range strings.Split(strings.TrimRight(filenames, "\n"), "\n") { + // typical result looks like 'A my_file' meaning my_file was added + if line == "" { + continue + } + changeStatus := line[0:1] + name := line[2:] + status := patch.UNSELECTED + if patchManager != nil && patchManager.To == parent { + status = patchManager.GetFileStatus(name) + } + + commitFiles = append(commitFiles, &models.CommitFile{ + Parent: parent, + Name: name, + ChangeStatus: changeStatus, + PatchStatus: status, + }) + } + + return commitFiles +} |