feat(git): add SHA1 to commit metadata

This commit is contained in:
Jan De Dobbeleer 2023-08-25 11:02:05 +02:00 committed by Jan De Dobbeleer
parent fcc1daeb36
commit 672f108d22
3 changed files with 8 additions and 2 deletions

View file

@ -21,6 +21,7 @@ type Commit struct {
Committer *User Committer *User
Subject string Subject string
Timestamp time.Time Timestamp time.Time
Sha string
} }
type User struct { type User struct {
@ -195,7 +196,7 @@ func (g *Git) Commit() *Commit {
Author: &User{}, Author: &User{},
Committer: &User{}, Committer: &User{},
} }
commitBody := g.getGitCommandOutput("log", "-1", "--pretty=format:an:%an%nae:%ae%ncn:%cn%nce:%ce%nat:%at%nsu:%s") commitBody := g.getGitCommandOutput("log", "-1", "--pretty=format:an:%an%nae:%ae%ncn:%cn%nce:%ce%nat:%at%nsu:%s%nha:%H")
splitted := strings.Split(strings.TrimSpace(commitBody), "\n") splitted := strings.Split(strings.TrimSpace(commitBody), "\n")
for _, line := range splitted { for _, line := range splitted {
line = strings.TrimSpace(line) line = strings.TrimSpace(line)
@ -219,6 +220,8 @@ func (g *Git) Commit() *Commit {
} }
case "su:": case "su:":
g.commit.Subject = line g.commit.Subject = line
case "ha:":
g.commit.Sha = line
} }
} }
return g.commit return g.commit

View file

@ -942,6 +942,7 @@ func TestGitCommit(t *testing.T) {
ce:jan@ohmyposh.dev ce:jan@ohmyposh.dev
at:1673176335 at:1673176335
su:docs(error): you can't use cross segment properties su:docs(error): you can't use cross segment properties
ha:1234567891011121314
`, `,
Expected: &Commit{ Expected: &Commit{
Author: &User{ Author: &User{
@ -954,6 +955,7 @@ func TestGitCommit(t *testing.T) {
}, },
Subject: "docs(error): you can't use cross segment properties", Subject: "docs(error): you can't use cross segment properties",
Timestamp: time.Unix(1673176335, 0), Timestamp: time.Unix(1673176335, 0),
Sha: "1234567891011121314",
}, },
}, },
{ {
@ -997,7 +999,7 @@ func TestGitCommit(t *testing.T) {
for _, tc := range cases { for _, tc := range cases {
env := new(mock.MockedEnvironment) env := new(mock.MockedEnvironment)
env.MockGitCommand("", tc.Output, "log", "-1", "--pretty=format:an:%an%nae:%ae%ncn:%cn%nce:%ce%nat:%at%nsu:%s") env.MockGitCommand("", tc.Output, "log", "-1", "--pretty=format:an:%an%nae:%ae%ncn:%cn%nce:%ce%nat:%at%nsu:%s%nha:%H")
g := &Git{ g := &Git{
scm: scm{ scm: scm{
env: env, env: env,

View file

@ -183,6 +183,7 @@ Local changes use the following syntax:
| `.Committer` | `User` | the comitter of the commit (see below) | | `.Committer` | `User` | the comitter of the commit (see below) |
| `.Subject` | `string` | the commit subject | | `.Subject` | `string` | the commit subject |
| `.Timestamp` | `time.Time` | the commit timestamp | | `.Timestamp` | `time.Time` | the commit timestamp |
| `.Sha` | `string` | the commit SHA1 |
### User ### User