diff options
author | Richard Burke <rich.g.burke@gmail.com> | 2019-01-07 22:45:05 +0000 |
---|---|---|
committer | Richard Burke <rich.g.burke@gmail.com> | 2019-01-07 22:45:05 +0000 |
commit | 66302c58b1510310493389938a844b538c555b7a (patch) | |
tree | 6e4fd6943d40fdad57e06602061915addb5c206c | |
parent | f9c8df8adfa7ff59e16ae6423cdd8e2bb619f3de (diff) |
Show diffs for unmerged files
Also handle case where diff lines is empty
-rw-r--r-- | cmd/grv/diff_view.go | 4 | ||||
-rw-r--r-- | cmd/grv/repo_data_loader.go | 56 |
2 files changed, 46 insertions, 14 deletions
diff --git a/cmd/grv/diff_view.go b/cmd/grv/diff_view.go index d2c7ef2..cc4affe 100644 --- a/cmd/grv/diff_view.go +++ b/cmd/grv/diff_view.go @@ -721,6 +721,10 @@ func selectDiffLine(diffView *DiffView, action Action) (err error) { } lineIndex := diffView.activeViewPos.ActiveRowIndex() + if lineIndex >= diffView.rows() { + return + } + diffLine := diffLines.lines[lineIndex] if diffLine.lineType != dltDiffStatsFile { diff --git a/cmd/grv/repo_data_loader.go b/cmd/grv/repo_data_loader.go index 1d54dbd..d5dab88 100644 --- a/cmd/grv/repo_data_loader.go +++ b/cmd/grv/repo_data_loader.go @@ -1177,12 +1177,16 @@ func (repoDataLoader *RepoDataLoader) DiffStage(statusType StatusType) (diff *Di diff = &Diff{} rawDiff, err := repoDataLoader.generateRawDiff(statusType) + if err != nil { + if diffErrorRegex.MatchString(err.Error()) { + log.Infof("Falling back to git cli after encountering error: %v", err) + repoDataLoader.diffErrorPresent = true + return repoDataLoader.generateStageDiffUsingCLI(statusType) + } - if err != nil && diffErrorRegex.MatchString(err.Error()) { - log.Infof("Falling back to git cli after encountering error: %v", err) - repoDataLoader.diffErrorPresent = true - return repoDataLoader.generateStageDiffUsingCLI(statusType) - } else if err != nil || rawDiff == nil { + return + } else if rawDiff == nil { + err = fmt.Errorf("Failed to generate diff for %v files", StatusTypeDisplayName(statusType)) return } defer rawDiff.Free() @@ -1201,11 +1205,16 @@ func (repoDataLoader *RepoDataLoader) DiffFile(statusType StatusType, path strin diff = &Diff{} rawDiff, err := repoDataLoader.generateRawDiff(statusType) - if err != nil && diffErrorRegex.MatchString(err.Error()) { - log.Infof("Falling back to git cli after encountering error: %v", err) - repoDataLoader.diffErrorPresent = true - return repoDataLoader.generateFileDiffUsingCLI(statusType, path) - } else if err != nil || rawDiff == nil { + if err != nil { + if diffErrorRegex.MatchString(err.Error()) { + log.Infof("Falling back to git cli after encountering error: %v", err) + repoDataLoader.diffErrorPresent = true + return repoDataLoader.generateFileDiffUsingCLI(statusType, path) + } + + return + } else if rawDiff == nil { + err = fmt.Errorf("Failed to generate diff for %v file %v", StatusTypeDisplayName(statusType), path) return } defer rawDiff.Free() @@ -1249,13 +1258,12 @@ func (repoDataLoader *RepoDataLoader) DiffFile(statusType StatusType, path strin func (repoDataLoader *RepoDataLoader) generateRawDiff(statusType StatusType) (rawDiff *git.Diff, err error) { var index *git.Index var options git.DiffOptions + var head Ref + var commit *Commit + var tree *git.Tree switch statusType { case StStaged: - var head Ref - var commit *Commit - var tree *git.Tree - if head, err = repoDataLoader.Head(); err != nil { return } @@ -1291,6 +1299,26 @@ func (repoDataLoader *RepoDataLoader) generateRawDiff(statusType StatusType) (ra if rawDiff, err = repoDataLoader.repo.DiffIndexToWorkdir(index, &options); err != nil { return } + case StConflicted: + if head, err = repoDataLoader.Head(); err != nil { + return + } + + if commit, err = repoDataLoader.Commit(head.Oid()); err != nil { + return + } + + if tree, err = commit.commit.Tree(); err != nil { + return + } + + if options, err = git.DefaultDiffOptions(); err != nil { + return + } + + if rawDiff, err = repoDataLoader.repo.DiffTreeToWorkdir(tree, &options); err != nil { + return + } } return |