mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-30 03:23:08 +03:00
add author email to commits
This commit is contained in:
@ -157,14 +157,15 @@ func (self *CommitLoader) MergeRebasingCommits(commits []*models.Commit) ([]*mod
|
|||||||
// example input:
|
// example input:
|
||||||
// 8ad01fe32fcc20f07bc6693f87aa4977c327f1e1|10 hours ago|Jesse Duffield| (HEAD -> master, tag: v0.15.2)|refresh commits when adding a tag
|
// 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 {
|
func (self *CommitLoader) extractCommitFromLine(line string) *models.Commit {
|
||||||
split := strings.SplitN(line, "\x00", 6)
|
split := strings.SplitN(line, "\x00", 7)
|
||||||
|
|
||||||
sha := split[0]
|
sha := split[0]
|
||||||
unixTimestamp := split[1]
|
unixTimestamp := split[1]
|
||||||
author := split[2]
|
authorName := split[2]
|
||||||
extraInfo := strings.TrimSpace(split[3])
|
authorEmail := split[3]
|
||||||
parentHashes := split[4]
|
extraInfo := strings.TrimSpace(split[4])
|
||||||
message := split[5]
|
parentHashes := split[5]
|
||||||
|
message := split[6]
|
||||||
|
|
||||||
tags := []string{}
|
tags := []string{}
|
||||||
|
|
||||||
@ -189,7 +190,8 @@ func (self *CommitLoader) extractCommitFromLine(line string) *models.Commit {
|
|||||||
Tags: tags,
|
Tags: tags,
|
||||||
ExtraInfo: extraInfo,
|
ExtraInfo: extraInfo,
|
||||||
UnixTimestamp: int64(unitTimestampInt),
|
UnixTimestamp: int64(unitTimestampInt),
|
||||||
Author: author,
|
AuthorName: authorName,
|
||||||
|
AuthorEmail: authorEmail,
|
||||||
Parents: parents,
|
Parents: parents,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -446,7 +448,8 @@ func (self *CommitLoader) getLogCmd(opts GetCommitsOptions) oscommands.ICmdObj {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var prettyFormat = fmt.Sprintf(
|
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,
|
NULL_CODE,
|
||||||
NULL_CODE,
|
NULL_CODE,
|
||||||
|
@ -12,14 +12,14 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
var commitsOutput = strings.Replace(`0eea75e8c631fba6b58135697835d58ba4c18dbc|1640826609|Jesse Duffield| (HEAD -> better-tests)|b21997d6b4cbdf84b149|better typing for rebase mode
|
var commitsOutput = strings.Replace(`0eea75e8c631fba6b58135697835d58ba4c18dbc|1640826609|Jesse Duffield|jessedduffield@gmail.com| (HEAD -> better-tests)|b21997d6b4cbdf84b149|better typing for rebase mode
|
||||||
b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164|1640824515|Jesse Duffield| (origin/better-tests)|e94e8fc5b6fab4cb755f|fix logging
|
b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164|1640824515|Jesse Duffield|jessedduffield@gmail.com| (origin/better-tests)|e94e8fc5b6fab4cb755f|fix logging
|
||||||
e94e8fc5b6fab4cb755f29f1bdb3ee5e001df35c|1640823749|Jesse Duffield||d8084cd558925eb7c9c3|refactor
|
e94e8fc5b6fab4cb755f29f1bdb3ee5e001df35c|1640823749|Jesse Duffield|jessedduffield@gmail.com||d8084cd558925eb7c9c3|refactor
|
||||||
d8084cd558925eb7c9c38afeed5725c21653ab90|1640821426|Jesse Duffield||65f910ebd85283b5cce9|WIP
|
d8084cd558925eb7c9c38afeed5725c21653ab90|1640821426|Jesse Duffield|jessedduffield@gmail.com||65f910ebd85283b5cce9|WIP
|
||||||
65f910ebd85283b5cce9bf67d03d3f1a9ea3813a|1640821275|Jesse Duffield||26c07b1ab33860a1a759|WIP
|
65f910ebd85283b5cce9bf67d03d3f1a9ea3813a|1640821275|Jesse Duffield|jessedduffield@gmail.com||26c07b1ab33860a1a759|WIP
|
||||||
26c07b1ab33860a1a7591a0638f9925ccf497ffa|1640750752|Jesse Duffield||3d4470a6c072208722e5|WIP
|
26c07b1ab33860a1a7591a0638f9925ccf497ffa|1640750752|Jesse Duffield|jessedduffield@gmail.com||3d4470a6c072208722e5|WIP
|
||||||
3d4470a6c072208722e5ae9a54bcb9634959a1c5|1640748818|Jesse Duffield||053a66a7be3da43aacdc|WIP
|
3d4470a6c072208722e5ae9a54bcb9634959a1c5|1640748818|Jesse Duffield|jessedduffield@gmail.com||053a66a7be3da43aacdc|WIP
|
||||||
053a66a7be3da43aacdc7aa78e1fe757b82c4dd2|1640739815|Jesse Duffield||985fe482e806b172aea4|refactoring the config struct`, "|", "\x00", -1)
|
053a66a7be3da43aacdc7aa78e1fe757b82c4dd2|1640739815|Jesse Duffield|jessedduffield@gmail.com||985fe482e806b172aea4|refactoring the config struct`, "|", "\x00", -1)
|
||||||
|
|
||||||
func TestGetCommits(t *testing.T) {
|
func TestGetCommits(t *testing.T) {
|
||||||
type scenario struct {
|
type scenario struct {
|
||||||
@ -40,7 +40,7 @@ func TestGetCommits(t *testing.T) {
|
|||||||
opts: GetCommitsOptions{RefName: "HEAD", IncludeRebaseCommits: false},
|
opts: GetCommitsOptions{RefName: "HEAD", IncludeRebaseCommits: false},
|
||||||
runner: oscommands.NewFakeRunner(t).
|
runner: oscommands.NewFakeRunner(t).
|
||||||
Expect(`git merge-base "HEAD" "HEAD"@{u}`, "b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164", nil).
|
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{},
|
expectedCommits: []*models.Commit{},
|
||||||
expectedError: nil,
|
expectedError: nil,
|
||||||
@ -54,7 +54,7 @@ func TestGetCommits(t *testing.T) {
|
|||||||
// here it's seeing which commits are yet to be pushed
|
// here it's seeing which commits are yet to be pushed
|
||||||
Expect(`git merge-base "HEAD" "HEAD"@{u}`, "b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164", nil).
|
Expect(`git merge-base "HEAD" "HEAD"@{u}`, "b21997d6b4cbdf84b149d8e6a2c4d06a8e9ec164", nil).
|
||||||
// here it's actually getting all the commits in a formatted form, one per line
|
// 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'
|
// 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),
|
Expect(`git merge-base "HEAD" "master"`, "26c07b1ab33860a1a7591a0638f9925ccf497ffa", nil),
|
||||||
|
|
||||||
@ -66,7 +66,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "(HEAD -> better-tests)",
|
ExtraInfo: "(HEAD -> better-tests)",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640826609,
|
UnixTimestamp: 1640826609,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"b21997d6b4cbdf84b149",
|
"b21997d6b4cbdf84b149",
|
||||||
@ -79,7 +80,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "(origin/better-tests)",
|
ExtraInfo: "(origin/better-tests)",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640824515,
|
UnixTimestamp: 1640824515,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"e94e8fc5b6fab4cb755f",
|
"e94e8fc5b6fab4cb755f",
|
||||||
@ -92,7 +94,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "",
|
ExtraInfo: "",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640823749,
|
UnixTimestamp: 1640823749,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"d8084cd558925eb7c9c3",
|
"d8084cd558925eb7c9c3",
|
||||||
@ -105,7 +108,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "",
|
ExtraInfo: "",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640821426,
|
UnixTimestamp: 1640821426,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"65f910ebd85283b5cce9",
|
"65f910ebd85283b5cce9",
|
||||||
@ -118,7 +122,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "",
|
ExtraInfo: "",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640821275,
|
UnixTimestamp: 1640821275,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"26c07b1ab33860a1a759",
|
"26c07b1ab33860a1a759",
|
||||||
@ -131,7 +136,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "",
|
ExtraInfo: "",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640750752,
|
UnixTimestamp: 1640750752,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"3d4470a6c072208722e5",
|
"3d4470a6c072208722e5",
|
||||||
@ -144,7 +150,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "",
|
ExtraInfo: "",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640748818,
|
UnixTimestamp: 1640748818,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"053a66a7be3da43aacdc",
|
"053a66a7be3da43aacdc",
|
||||||
@ -157,7 +164,8 @@ func TestGetCommits(t *testing.T) {
|
|||||||
Action: "",
|
Action: "",
|
||||||
Tags: []string{},
|
Tags: []string{},
|
||||||
ExtraInfo: "",
|
ExtraInfo: "",
|
||||||
Author: "Jesse Duffield",
|
AuthorName: "Jesse Duffield",
|
||||||
|
AuthorEmail: "jessedduffield@gmail.com",
|
||||||
UnixTimestamp: 1640739815,
|
UnixTimestamp: 1640739815,
|
||||||
Parents: []string{
|
Parents: []string{
|
||||||
"985fe482e806b172aea4",
|
"985fe482e806b172aea4",
|
||||||
|
@ -17,7 +17,8 @@ type Commit struct {
|
|||||||
Action string // one of "", "pick", "edit", "squash", "reword", "drop", "fixup"
|
Action string // one of "", "pick", "edit", "squash", "reword", "drop", "fixup"
|
||||||
Tags []string
|
Tags []string
|
||||||
ExtraInfo string // something like 'HEAD -> master, tag: v0.15.2'
|
ExtraInfo string // something like 'HEAD -> master, tag: v0.15.2'
|
||||||
Author string // something like 'Jesse Duffield <jessedduffield@gmail.com>'
|
AuthorName string // something like 'Jesse Duffield'
|
||||||
|
AuthorEmail string // something like 'jessedduffield@gmail.com'
|
||||||
UnixTimestamp int64
|
UnixTimestamp int64
|
||||||
|
|
||||||
// SHAs of parent commits (will be multiple if it's a merge commit)
|
// SHAs of parent commits (will be multiple if it's a merge commit)
|
||||||
|
@ -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.
|
// 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.
|
// so let's just cache it based on that.
|
||||||
getStyle := func(commit *models.Commit) style.TextStyle {
|
getStyle := func(commit *models.Commit) style.TextStyle {
|
||||||
return authors.AuthorStyle(commit.Author)
|
return authors.AuthorStyle(commit.AuthorName)
|
||||||
}
|
}
|
||||||
pipeSets = graph.GetPipeSets(commits, getStyle)
|
pipeSets = graph.GetPipeSets(commits, getStyle)
|
||||||
pipeSetCache[cacheKey] = pipeSets
|
pipeSetCache[cacheKey] = pipeSets
|
||||||
@ -288,7 +288,7 @@ func displayCommit(
|
|||||||
cols = append(
|
cols = append(
|
||||||
cols,
|
cols,
|
||||||
actionString,
|
actionString,
|
||||||
authorFunc(commit.Author),
|
authorFunc(commit.AuthorName),
|
||||||
graphLine+tagString+theme.DefaultTextColor.Sprint(name),
|
graphLine+tagString+theme.DefaultTextColor.Sprint(name),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -528,7 +528,7 @@ func TestGetNextPipes(t *testing.T) {
|
|||||||
func BenchmarkRenderCommitGraph(b *testing.B) {
|
func BenchmarkRenderCommitGraph(b *testing.B) {
|
||||||
commits := generateCommits(50)
|
commits := generateCommits(50)
|
||||||
getStyle := func(commit *models.Commit) style.TextStyle {
|
getStyle := func(commit *models.Commit) style.TextStyle {
|
||||||
return authors.AuthorStyle(commit.Author)
|
return authors.AuthorStyle(commit.AuthorName)
|
||||||
}
|
}
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
@ -538,7 +538,7 @@ func BenchmarkRenderCommitGraph(b *testing.B) {
|
|||||||
|
|
||||||
func generateCommits(count int) []*models.Commit {
|
func generateCommits(count int) []*models.Commit {
|
||||||
rand.Seed(1234)
|
rand.Seed(1234)
|
||||||
pool := []*models.Commit{{Sha: "a", Author: "A"}}
|
pool := []*models.Commit{{Sha: "a", AuthorName: "A"}}
|
||||||
commits := make([]*models.Commit, 0, count)
|
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"}
|
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 {
|
for len(commits) < count {
|
||||||
@ -555,8 +555,8 @@ func generateCommits(count int) []*models.Commit {
|
|||||||
newParent = pool[j]
|
newParent = pool[j]
|
||||||
} else {
|
} else {
|
||||||
newParent = &models.Commit{
|
newParent = &models.Commit{
|
||||||
Sha: fmt.Sprintf("%s%d", currentCommit.Sha, j),
|
Sha: fmt.Sprintf("%s%d", currentCommit.Sha, j),
|
||||||
Author: authorPool[rand.Intn(len(authorPool))],
|
AuthorName: authorPool[rand.Intn(len(authorPool))],
|
||||||
}
|
}
|
||||||
pool = append(pool, newParent)
|
pool = append(pool, newParent)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user