d32879a32154bff1a7e613ba7c1e3229c01e0889

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(ui): show repo update time for new repos

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{