Diff
1diff --git a/server/backend/repo.go b/server/backend/repo.go
2index 88a25564bc24b8e9dd431d0dceabcf59163ed587..7172d71ee8bf575654c3549ff10f87ec7e5194bc 100644
3--- a/server/backend/repo.go
4+++ b/server/backend/repo.go
5@@ -1,6 +1,8 @@
6 package backend
7
8 import (
9+ "time"
10+
11 "github.com/charmbracelet/soft-serve/git"
12 )
13
14@@ -78,6 +80,9 @@ type Repository interface {
15 IsMirror() bool
16 // IsHidden returns whether the repository is hidden.
17 IsHidden() bool
18+ // UpdatedAt returns the time the repository was last updated.
19+ // If the repository has never been updated, it returns the time it was created.
20+ UpdatedAt() time.Time
21 // Open returns the underlying git.Repository.
22 Open() (*git.Repository, error)
23 }
24diff --git a/server/backend/sqlite/repo.go b/server/backend/sqlite/repo.go
25index 9259f8bea5b063085fd8ea76c30ca3364c41de74..6b90ca92cc805186a1e7af8fa769283120358a47 100644
26--- a/server/backend/sqlite/repo.go
27+++ b/server/backend/sqlite/repo.go
28@@ -2,6 +2,7 @@ package sqlite
29
30 import (
31 "context"
32+ "time"
33
34 "github.com/charmbracelet/soft-serve/git"
35 "github.com/charmbracelet/soft-serve/server/backend"
36@@ -100,3 +101,23 @@ func (r *Repo) IsHidden() bool {
37
38 return hidden
39 }
40+
41+// UpdatedAt returns the repository's last update time.
42+func (r *Repo) UpdatedAt() time.Time {
43+ rr, err := git.Open(r.path)
44+ if err == nil {
45+ t, err := rr.LatestCommitTime()
46+ if err == nil {
47+ return t
48+ }
49+ }
50+
51+ var updatedAt time.Time
52+ if err := wrapTx(r.db, context.Background(), func(tx *sqlx.Tx) error {
53+ return tx.Get(&updatedAt, "SELECT updated_at FROM repo WHERE name = ?", r.name)
54+ }); err != nil {
55+ return time.Time{}
56+ }
57+
58+ return updatedAt
59+}
60diff --git a/ui/pages/selection/item.go b/ui/pages/selection/item.go
61index 79c5b634622e9f5d016eb7175d4f11639cf4323e..837ce69d37f5c4ea2c67def336e31d40f2d92a96 100644
62--- a/ui/pages/selection/item.go
63+++ b/ui/pages/selection/item.go
64@@ -56,13 +56,9 @@ type Item struct {
65
66 // New creates a new Item.
67 func NewItem(repo backend.Repository, cfg *config.Config) (Item, error) {
68- r, err := repo.Open()
69- if err != nil {
70- return Item{}, err
71- }
72 var lastUpdate *time.Time
73- lu, err := r.LatestCommitTime()
74- if err == nil {
75+ lu := repo.UpdatedAt()
76+ if !lu.IsZero() {
77 lastUpdate = &lu
78 }
79 return Item{