summaryrefslogtreecommitdiffstats
path: root/pkg/commands/loading_commit_files.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-09-29 19:22:26 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-09-29 20:48:49 +1000
commit1767f91047a35318f6b1e469199c8a7f547f2afc (patch)
treefbbd83d25289676d305eaabc1e354a8f68a834a4 /pkg/commands/loading_commit_files.go
parent1759ddf2470389d8de7ccedad24caf66c3cdb7d5 (diff)
factor out code for loading models
Diffstat (limited to 'pkg/commands/loading_commit_files.go')
-rw-r--r--pkg/commands/loading_commit_files.go50
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
+}