GitRoot
Craft your forge, Build your project, Grow your community freely
1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: MIT
4
5package model
6
7import (
8 "time"
9
10 "github.com/tidwall/gjson"
11)
12
13type Commit struct {
14 Branch string `json:"branch"`
15 Hash string `json:"hash"`
16 Message string `json:"message"`
17 Date time.Time `json:"date"`
18 CommitterEmail string `json:"committerEmail"`
19 CommitterName string `json:"committerName"`
20 ParentHash string `json:"parentHash"`
21 IsSigned bool `json:"isSigned"`
22 IsValidSignature bool `json:"isValidSignature"`
23 SigningKey string `json:"signingKey"`
24}
25
26func commitFromGjson(j gjson.Result) Commit {
27 return Commit{
28 Branch: j.Get("branch").String(),
29 Hash: j.Get("hash").String(),
30 Message: j.Get("message").String(),
31 Date: j.Get("date").Time(),
32 CommitterEmail: j.Get("committerEmail").String(),
33 CommitterName: j.Get("committerName").String(),
34 ParentHash: j.Get("parentHash").String(),
35 IsSigned: j.Get("isSigned").Bool(),
36 IsValidSignature: j.Get("isValidSignature").Bool(),
37 SigningKey: j.Get("signingKey").String(),
38 }
39}
40
41func CommitFromString(commit string) Commit {
42 return commitFromGjson(gjson.Parse(commit))
43}
44
45func CommitsFromString(commits string) []Commit {
46 jsonCommits := gjson.Parse(commits).Array()
47 res := make([]Commit, len(jsonCommits))
48 for i, jsonCommit := range jsonCommits {
49 res[i] = commitFromGjson(jsonCommit)
50 }
51 return res
52}