- commit
- f090087
- parent
- 4975e6d
- author
- jolheiser
- date
- 2024-07-15 12:20:30 -0400 EDT
feat: configurable time format This patch allows the displayed time format to be configurable. By default it uses time.RFC3339 Signed-off-by: jolheiser <git@jolheiser.com>
M
cfg.go
+17,
-10
1@@ -4,6 +4,7 @@ import (
2 "fmt"
3 "log/slog"
4 "strings"
5+ "time"
6
7 "github.com/charmbracelet/ssh"
8 "github.com/knadh/koanf/parsers/toml"
9@@ -22,16 +23,17 @@ type Repo struct {
10 var k = koanf.New(".")
11
12 type GitCfg struct {
13- DataDir string `koanf:"data_dir"`
14- Repos []*Repo `koanf:"repo"`
15- Url string `koanf:"url"`
16- Host string `koanf:"host"`
17- SshPort string `koanf:"ssh_port"`
18- WebPort string `koanf:"web_port"`
19- AdminsStr []string `koanf:"admins"`
20- Admins []ssh.PublicKey `koanf:"admins_pk"`
21- Theme string `koanf:"theme"`
22- Logger *slog.Logger
23+ DataDir string `koanf:"data_dir"`
24+ Repos []*Repo `koanf:"repo"`
25+ Url string `koanf:"url"`
26+ Host string `koanf:"host"`
27+ SshPort string `koanf:"ssh_port"`
28+ WebPort string `koanf:"web_port"`
29+ AdminsStr []string `koanf:"admins"`
30+ Admins []ssh.PublicKey `koanf:"admins_pk"`
31+ Theme string `koanf:"theme"`
32+ TimeFormat string `koanf:"time_format"`
33+ Logger *slog.Logger
34 }
35
36 func NewGitCfg(fpath string, logger *slog.Logger) *GitCfg {
37@@ -86,6 +88,10 @@ func NewGitCfg(fpath string, logger *slog.Logger) *GitCfg {
38 out.Theme = "dracula"
39 }
40
41+ if out.TimeFormat == "" {
42+ out.TimeFormat = time.RFC3339
43+ }
44+
45 logger.Info(
46 "config",
47 "url", out.Url,
48@@ -94,6 +100,7 @@ func NewGitCfg(fpath string, logger *slog.Logger) *GitCfg {
49 "ssh_port", out.SshPort,
50 "web_port", out.WebPort,
51 "theme", out.Theme,
52+ "time_format", out.TimeFormat,
53 )
54
55 for _, pubkey := range out.AdminsStr {
M
cli.go
+4,
-5
1@@ -6,7 +6,6 @@ import (
2 "strconv"
3 "strings"
4 "text/tabwriter"
5- "time"
6
7 "github.com/charmbracelet/soft-serve/pkg/utils"
8 "github.com/charmbracelet/ssh"
9@@ -152,7 +151,7 @@ Here's how it works:
10 eventLog.RepoID,
11 eventLog.PatchRequestID,
12 eventLog.Event,
13- eventLog.CreatedAt.Format(time.RFC3339Nano),
14+ eventLog.CreatedAt.Format(be.Cfg.TimeFormat),
15 eventLog.Data,
16 )
17 }
18@@ -238,7 +237,7 @@ Here's how it works:
19 req.Name,
20 req.Status,
21 user.Name,
22- req.CreatedAt.Format(time.RFC3339Nano),
23+ req.CreatedAt.Format(be.Cfg.TimeFormat),
24 )
25 }
26 writer.Flush()
27@@ -356,7 +355,7 @@ Here's how it works:
28 fmt.Fprintf(
29 writer,
30 "%d\t%s\t[%s]\t%s\n%s\n\n",
31- request.ID, request.Name, request.Status, request.CreatedAt.Format(time.RFC3339Nano),
32+ request.ID, request.Name, request.Status, request.CreatedAt.Format(be.Cfg.TimeFormat),
33 request.Text,
34 )
35 writer.Flush()
36@@ -425,7 +424,7 @@ Here's how it works:
37 fmt.Fprintf(
38 writer,
39 "%d\t%s\t[%s]\t%s\n%s\n",
40- request.ID, request.Name, request.Status, request.CreatedAt.Format(time.RFC3339Nano),
41+ request.ID, request.Name, request.Status, request.CreatedAt.Format(be.Cfg.TimeFormat),
42 request.Text,
43 )
44 writer.Flush()
M
web.go
+4,
-4
1@@ -130,7 +130,7 @@ func repoListHandler(w http.ResponseWriter, r *http.Request) {
2 Url: template.URL(fmt.Sprintf("/prs/%d", curpr.ID)),
3 Text: curpr.Name,
4 },
5- Date: curpr.CreatedAt.Format(time.RFC3339),
6+ Date: curpr.CreatedAt.Format(web.Backend.Cfg.TimeFormat),
7 Status: curpr.Status,
8 }
9 }
10@@ -232,7 +232,7 @@ func repoDetailHandler(w http.ResponseWriter, r *http.Request) {
11 Url: template.URL(fmt.Sprintf("/prs/%d", curpr.ID)),
12 Text: curpr.Name,
13 },
14- Date: curpr.CreatedAt.Format(time.RFC3339),
15+ Date: curpr.CreatedAt.Format(web.Backend.Cfg.TimeFormat),
16 Status: curpr.Status,
17 }
18 if curpr.Status == "open" {
19@@ -378,7 +378,7 @@ func prDetailHandler(w http.ResponseWriter, r *http.Request) {
20 EventLog: eventlog,
21 UserName: user.Name,
22 Pubkey: user.Pubkey,
23- Date: pr.CreatedAt.Format(time.RFC3339),
24+ Date: pr.CreatedAt.Format(web.Backend.Cfg.TimeFormat),
25 })
26 }
27
28@@ -397,7 +397,7 @@ func prDetailHandler(w http.ResponseWriter, r *http.Request) {
29 Title: pr.Name,
30 UserName: user.Name,
31 Pubkey: user.Pubkey,
32- Date: pr.CreatedAt.Format(time.RFC3339),
33+ Date: pr.CreatedAt.Format(web.Backend.Cfg.TimeFormat),
34 Status: pr.Status,
35 },
36 MetaData: MetaData{