Skip to content

Commit 66302c5

Browse files
committed
Show diffs for unmerged files
Also handle case where diff lines is empty
1 parent f9c8df8 commit 66302c5

File tree

2 files changed

+46
-14
lines changed

2 files changed

+46
-14
lines changed

cmd/grv/diff_view.go

+4
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,10 @@ func selectDiffLine(diffView *DiffView, action Action) (err error) {
721721
}
722722

723723
lineIndex := diffView.activeViewPos.ActiveRowIndex()
724+
if lineIndex >= diffView.rows() {
725+
return
726+
}
727+
724728
diffLine := diffLines.lines[lineIndex]
725729

726730
if diffLine.lineType != dltDiffStatsFile {

cmd/grv/repo_data_loader.go

+42-14
Original file line numberDiff line numberDiff line change
@@ -1177,12 +1177,16 @@ func (repoDataLoader *RepoDataLoader) DiffStage(statusType StatusType) (diff *Di
11771177
diff = &Diff{}
11781178

11791179
rawDiff, err := repoDataLoader.generateRawDiff(statusType)
1180+
if err != nil {
1181+
if diffErrorRegex.MatchString(err.Error()) {
1182+
log.Infof("Falling back to git cli after encountering error: %v", err)
1183+
repoDataLoader.diffErrorPresent = true
1184+
return repoDataLoader.generateStageDiffUsingCLI(statusType)
1185+
}
11801186

1181-
if err != nil && diffErrorRegex.MatchString(err.Error()) {
1182-
log.Infof("Falling back to git cli after encountering error: %v", err)
1183-
repoDataLoader.diffErrorPresent = true
1184-
return repoDataLoader.generateStageDiffUsingCLI(statusType)
1185-
} else if err != nil || rawDiff == nil {
1187+
return
1188+
} else if rawDiff == nil {
1189+
err = fmt.Errorf("Failed to generate diff for %v files", StatusTypeDisplayName(statusType))
11861190
return
11871191
}
11881192
defer rawDiff.Free()
@@ -1201,11 +1205,16 @@ func (repoDataLoader *RepoDataLoader) DiffFile(statusType StatusType, path strin
12011205
diff = &Diff{}
12021206

12031207
rawDiff, err := repoDataLoader.generateRawDiff(statusType)
1204-
if err != nil && diffErrorRegex.MatchString(err.Error()) {
1205-
log.Infof("Falling back to git cli after encountering error: %v", err)
1206-
repoDataLoader.diffErrorPresent = true
1207-
return repoDataLoader.generateFileDiffUsingCLI(statusType, path)
1208-
} else if err != nil || rawDiff == nil {
1208+
if err != nil {
1209+
if diffErrorRegex.MatchString(err.Error()) {
1210+
log.Infof("Falling back to git cli after encountering error: %v", err)
1211+
repoDataLoader.diffErrorPresent = true
1212+
return repoDataLoader.generateFileDiffUsingCLI(statusType, path)
1213+
}
1214+
1215+
return
1216+
} else if rawDiff == nil {
1217+
err = fmt.Errorf("Failed to generate diff for %v file %v", StatusTypeDisplayName(statusType), path)
12091218
return
12101219
}
12111220
defer rawDiff.Free()
@@ -1249,13 +1258,12 @@ func (repoDataLoader *RepoDataLoader) DiffFile(statusType StatusType, path strin
12491258
func (repoDataLoader *RepoDataLoader) generateRawDiff(statusType StatusType) (rawDiff *git.Diff, err error) {
12501259
var index *git.Index
12511260
var options git.DiffOptions
1261+
var head Ref
1262+
var commit *Commit
1263+
var tree *git.Tree
12521264

12531265
switch statusType {
12541266
case StStaged:
1255-
var head Ref
1256-
var commit *Commit
1257-
var tree *git.Tree
1258-
12591267
if head, err = repoDataLoader.Head(); err != nil {
12601268
return
12611269
}
@@ -1291,6 +1299,26 @@ func (repoDataLoader *RepoDataLoader) generateRawDiff(statusType StatusType) (ra
12911299
if rawDiff, err = repoDataLoader.repo.DiffIndexToWorkdir(index, &options); err != nil {
12921300
return
12931301
}
1302+
case StConflicted:
1303+
if head, err = repoDataLoader.Head(); err != nil {
1304+
return
1305+
}
1306+
1307+
if commit, err = repoDataLoader.Commit(head.Oid()); err != nil {
1308+
return
1309+
}
1310+
1311+
if tree, err = commit.commit.Tree(); err != nil {
1312+
return
1313+
}
1314+
1315+
if options, err = git.DefaultDiffOptions(); err != nil {
1316+
return
1317+
}
1318+
1319+
if rawDiff, err = repoDataLoader.repo.DiffTreeToWorkdir(tree, &options); err != nil {
1320+
return
1321+
}
12941322
}
12951323

12961324
return

0 commit comments

Comments
 (0)