diff --git a/pkg/commands/loaders/commits.go b/pkg/commands/loaders/commits.go index fd6ce64a8..4a870643b 100644 --- a/pkg/commands/loaders/commits.go +++ b/pkg/commands/loaders/commits.go @@ -157,14 +157,15 @@ func (self *CommitLoader) MergeRebasingCommits(commits []*models.Commit) ([]*mod // example input: // 8ad01fe32fcc20f07bc6693f87aa4977c327f1e1|10 hours ago|Jesse Duffield| (HEAD -> master, tag: v0.15.2)|refresh commits when adding a tag func (self *CommitLoader) extractCommitFromLine(line string) *models.Commit { - split := strings.SplitN(line, "\x00", 6) + split := strings.SplitN(line, "\x00", 7) sha := split[0] unixTimestamp := split[1] - author := split[2] - extraInfo := strings.TrimSpace(split[3]) - parentHashes := split[4] - message := split[5] + authorName := split[2] + authorEmail := split[3] + extraInfo := strings.TrimSpace(split[4]) + parentHashes := split[5] + message := split[6] tags := []string{} @@ -189,7 +190,8 @@ func (self *CommitLoader) extractCommitFromLine(line string) *models.Commit { Tags: tags, ExtraInfo: extraInfo, UnixTimestamp: int64(unitTimestampInt), - Author: author, + AuthorName: authorName, + AuthorEmail: authorEmail, Parents: parents, } } @@ -446,7 +448,8 @@ func (self *CommitLoader) getLogCmd(opts GetCommitsOptions) oscommands.ICmdObj { } var prettyFormat = fmt.Sprintf( - "--pretty=format:\"%%H%s%%at%s%%aN%s%%d%s%%p%s%%s\"", + "--pretty=format:\"%%H%s%%at%s%%aN%s%%ae%s%%d%s%%p%s%%s\"", + NULL_CODE, NULL_CODE, NULL_CODE, NULL_CODE, diff --git a/pkg/commands/loaders/commits_test.go b/pkg/commands/loaders/commits_test.go index 5c1509287..e0e8fbad6 100644 --- a/pkg/commands/loaders/commits_test.go +++ b/pkg/commands/loaders/commits_test.go @@ -12,14 +12,14 @@ import ( "github.com/stretchr/testify/assert" ) -var commitsOutput = strings.Replace(`0eea75e8c631fba6b58135697835d58ba4c18dbc|1640826609|Jesse Duffield| (HEAD -> better-tests)|b21997d6b4cbdf84b149|better typing for rebase mode -b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164|1640824515|Jesse Duffield| (origin/better-tests)|e94e8fc5b6fab4cb755f|fix logging -e94e8fc5b6fab4cb755f29f1bdb3ee5e001df35c|1640823749|Jesse Duffield||d8084cd558925eb7c9c3|refactor -d8084cd558925eb7c9c38afeed5725c21653ab90|1640821426|Jesse Duffield||65f910ebd85283b5cce9|WIP -65f910ebd85283b5cce9bf67d03d3f1a9ea3813a|1640821275|Jesse Duffield||26c07b1ab33860a1a759|WIP -26c07b1ab33860a1a7591a0638f9925ccf497ffa|1640750752|Jesse Duffield||3d4470a6c072208722e5|WIP -3d4470a6c072208722e5ae9a54bcb9634959a1c5|1640748818|Jesse Duffield||053a66a7be3da43aacdc|WIP -053a66a7be3da43aacdc7aa78e1fe757b82c4dd2|1640739815|Jesse Duffield||985fe482e806b172aea4|refactoring the config struct`, "|", "\x00", -1) +var commitsOutput = strings.Replace(`0eea75e8c631fba6b58135697835d58ba4c18dbc|1640826609|Jesse Duffield|jessedduffield@gmail.com| (HEAD -> better-tests)|b21997d6b4cbdf84b149|better typing for rebase mode +b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164|1640824515|Jesse Duffield|jessedduffield@gmail.com| (origin/better-tests)|e94e8fc5b6fab4cb755f|fix logging +e94e8fc5b6fab4cb755f29f1bdb3ee5e001df35c|1640823749|Jesse Duffield|jessedduffield@gmail.com||d8084cd558925eb7c9c3|refactor +d8084cd558925eb7c9c38afeed5725c21653ab90|1640821426|Jesse Duffield|jessedduffield@gmail.com||65f910ebd85283b5cce9|WIP +65f910ebd85283b5cce9bf67d03d3f1a9ea3813a|1640821275|Jesse Duffield|jessedduffield@gmail.com||26c07b1ab33860a1a759|WIP +26c07b1ab33860a1a7591a0638f9925ccf497ffa|1640750752|Jesse Duffield|jessedduffield@gmail.com||3d4470a6c072208722e5|WIP +3d4470a6c072208722e5ae9a54bcb9634959a1c5|1640748818|Jesse Duffield|jessedduffield@gmail.com||053a66a7be3da43aacdc|WIP +053a66a7be3da43aacdc7aa78e1fe757b82c4dd2|1640739815|Jesse Duffield|jessedduffield@gmail.com||985fe482e806b172aea4|refactoring the config struct`, "|", "\x00", -1) func TestGetCommits(t *testing.T) { type scenario struct { @@ -40,7 +40,7 @@ func TestGetCommits(t *testing.T) { opts: GetCommitsOptions{RefName: "HEAD", IncludeRebaseCommits: false}, runner: oscommands.NewFakeRunner(t). Expect(`git merge-base "HEAD" "HEAD"@{u}`, "b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164", nil). - Expect(`git log "HEAD" --topo-order --oneline --pretty=format:"%H%x00%at%x00%aN%x00%d%x00%p%x00%s" --abbrev=40`, "", nil), + Expect(`git log "HEAD" --topo-order --oneline --pretty=format:"%H%x00%at%x00%aN%x00%ae%x00%d%x00%p%x00%s" --abbrev=40`, "", nil), expectedCommits: []*models.Commit{}, expectedError: nil, @@ -54,7 +54,7 @@ func TestGetCommits(t *testing.T) { // here it's seeing which commits are yet to be pushed Expect(`git merge-base "HEAD" "HEAD"@{u}`, "b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164", nil). // here it's actually getting all the commits in a formatted form, one per line - Expect(`git log "HEAD" --topo-order --oneline --pretty=format:"%H%x00%at%x00%aN%x00%d%x00%p%x00%s" --abbrev=40`, commitsOutput, nil). + Expect(`git log "HEAD" --topo-order --oneline --pretty=format:"%H%x00%at%x00%aN%x00%ae%x00%d%x00%p%x00%s" --abbrev=40`, commitsOutput, nil). // here it's seeing where our branch diverged from the master branch so that we can mark that commit and parent commits as 'merged' Expect(`git merge-base "HEAD" "master"`, "26c07b1ab33860a1a7591a0638f9925ccf497ffa", nil), @@ -66,7 +66,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "(HEAD -> better-tests)", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640826609, Parents: []string{ "b21997d6b4cbdf84b149", @@ -79,7 +80,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "(origin/better-tests)", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640824515, Parents: []string{ "e94e8fc5b6fab4cb755f", @@ -92,7 +94,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640823749, Parents: []string{ "d8084cd558925eb7c9c3", @@ -105,7 +108,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640821426, Parents: []string{ "65f910ebd85283b5cce9", @@ -118,7 +122,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640821275, Parents: []string{ "26c07b1ab33860a1a759", @@ -131,7 +136,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640750752, Parents: []string{ "3d4470a6c072208722e5", @@ -144,7 +150,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640748818, Parents: []string{ "053a66a7be3da43aacdc", @@ -157,7 +164,8 @@ func TestGetCommits(t *testing.T) { Action: "", Tags: []string{}, ExtraInfo: "", - Author: "Jesse Duffield", + AuthorName: "Jesse Duffield", + AuthorEmail: "jessedduffield@gmail.com", UnixTimestamp: 1640739815, Parents: []string{ "985fe482e806b172aea4", diff --git a/pkg/commands/models/commit.go b/pkg/commands/models/commit.go index 641cc4242..0ca6a4365 100644 --- a/pkg/commands/models/commit.go +++ b/pkg/commands/models/commit.go @@ -17,7 +17,8 @@ type Commit struct { Action string // one of "", "pick", "edit", "squash", "reword", "drop", "fixup" Tags []string ExtraInfo string // something like 'HEAD -> master, tag: v0.15.2' - Author string // something like 'Jesse Duffield ' + AuthorName string // something like 'Jesse Duffield' + AuthorEmail string // something like 'jessedduffield@gmail.com' UnixTimestamp int64 // SHAs of parent commits (will be multiple if it's a merge commit) diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go index 59802dabf..693b46337 100644 --- a/pkg/gui/presentation/commits.go +++ b/pkg/gui/presentation/commits.go @@ -156,7 +156,7 @@ func loadPipesets(commits []*models.Commit) [][]*graph.Pipe { // pipe sets are unique to a commit head. and a commit count. Sometimes we haven't loaded everything for that. // so let's just cache it based on that. getStyle := func(commit *models.Commit) style.TextStyle { - return authors.AuthorStyle(commit.Author) + return authors.AuthorStyle(commit.AuthorName) } pipeSets = graph.GetPipeSets(commits, getStyle) pipeSetCache[cacheKey] = pipeSets @@ -288,7 +288,7 @@ func displayCommit( cols = append( cols, actionString, - authorFunc(commit.Author), + authorFunc(commit.AuthorName), graphLine+tagString+theme.DefaultTextColor.Sprint(name), ) diff --git a/pkg/gui/presentation/graph/graph_test.go b/pkg/gui/presentation/graph/graph_test.go index 300042558..a6c60acf5 100644 --- a/pkg/gui/presentation/graph/graph_test.go +++ b/pkg/gui/presentation/graph/graph_test.go @@ -528,7 +528,7 @@ func TestGetNextPipes(t *testing.T) { func BenchmarkRenderCommitGraph(b *testing.B) { commits := generateCommits(50) getStyle := func(commit *models.Commit) style.TextStyle { - return authors.AuthorStyle(commit.Author) + return authors.AuthorStyle(commit.AuthorName) } b.ResetTimer() for i := 0; i < b.N; i++ { @@ -538,7 +538,7 @@ func BenchmarkRenderCommitGraph(b *testing.B) { func generateCommits(count int) []*models.Commit { rand.Seed(1234) - pool := []*models.Commit{{Sha: "a", Author: "A"}} + pool := []*models.Commit{{Sha: "a", AuthorName: "A"}} commits := make([]*models.Commit, 0, count) authorPool := []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} for len(commits) < count { @@ -555,8 +555,8 @@ func generateCommits(count int) []*models.Commit { newParent = pool[j] } else { newParent = &models.Commit{ - Sha: fmt.Sprintf("%s%d", currentCommit.Sha, j), - Author: authorPool[rand.Intn(len(authorPool))], + Sha: fmt.Sprintf("%s%d", currentCommit.Sha, j), + AuthorName: authorPool[rand.Intn(len(authorPool))], } pool = append(pool, newParent) }