Monorepo for Tangled
0

Configure Feed

Select the types of activity you want to include in your feed.

appview/repo: skip redundant language writing

Lewis: May this revision serve well! <lewis@tangled.org>

Lewis (Jun 29, 2026, 9:07 PM +0300) 7285a60f b07d141f

+45 -6
+23
appview/db/language.go
··· 52 52 return err 53 53 } 54 54 55 + func GetRepoLanguages(e Execer, repoDid syntax.DID, ref string) (map[string]int64, error) { 56 + rows, err := e.Query( 57 + `select language, bytes from repo_languages where repo_did = ? and ref = ?`, 58 + repoDid, ref, 59 + ) 60 + if err != nil { 61 + return nil, err 62 + } 63 + defer rows.Close() 64 + 65 + out := make(map[string]int64) 66 + for rows.Next() { 67 + var language string 68 + var bytes int64 69 + if err := rows.Scan(&language, &bytes); err != nil { 70 + return nil, err 71 + } 72 + out[language] = bytes 73 + } 74 + 75 + return out, rows.Err() 76 + } 77 + 55 78 func UpdateRepoLanguages(tx *sql.Tx, repoDid syntax.DID, ref string, langs []models.RepoLanguage) error { 56 79 err := DeleteRepoLanguages( 57 80 tx,
+19 -6
appview/repo/index.go
··· 3 3 import ( 4 4 "errors" 5 5 "fmt" 6 + "maps" 6 7 "net/http" 7 8 "net/url" 8 9 "slices" ··· 27 28 28 29 "github.com/go-chi/chi/v5" 29 30 "github.com/go-enry/go-enry/v2" 31 + "github.com/samber/lo" 30 32 ) 31 33 32 34 func (rp *Repo) Index(w http.ResponseWriter, r *http.Request) { ··· 130 132 // non-fatal 131 133 } else if ref == "" { // when request didn't specified ref, we are fetching default branch. 132 134 if err := func(repo syntax.DID, ref string, langs []*tangled.GitTempListLanguages_Language) error { 135 + current := lo.SliceToMap(langs, func(lang *tangled.GitTempListLanguages_Language) (string, int64) { 136 + return lang.Name, lang.Size 137 + }) 138 + 139 + existing, err := db.GetRepoLanguages(rp.db, repo, ref) 140 + if err != nil { 141 + return err 142 + } 143 + if maps.Equal(current, existing) { 144 + return nil 145 + } 146 + 133 147 tx, err := rp.db.Begin() 134 148 if err != nil { 135 149 return err 136 150 } 137 151 defer tx.Rollback() 138 152 139 - var mlangs []models.RepoLanguage 140 - for _, lang := range langs { 141 - mlangs = append(mlangs, models.RepoLanguage{ 153 + mlangs := lo.Map(langs, func(lang *tangled.GitTempListLanguages_Language, _ int) models.RepoLanguage { 154 + return models.RepoLanguage{ 142 155 RepoDid: repo, 143 156 Ref: ref, 144 157 IsDefaultRef: true, 145 158 Language: lang.Name, 146 159 Bytes: lang.Size, 147 - }) 148 - } 160 + } 161 + }) 149 162 150 - if err := db.UpdateRepoLanguages(tx, syntax.DID(f.RepoDid), ref, mlangs); err != nil { 163 + if err := db.UpdateRepoLanguages(tx, repo, ref, mlangs); err != nil { 151 164 return err 152 165 } 153 166
+1
go.mod
··· 63 63 github.com/prometheus/procfs v0.19.2 64 64 github.com/redis/go-redis/v9 v9.7.3 65 65 github.com/resend/resend-go/v3 v3.5.0 66 + github.com/samber/lo v1.38.1 66 67 github.com/sethvargo/go-envconfig v1.1.0 67 68 github.com/sourcegraph/zoekt v0.0.0-20260605122240-893a523804f1 68 69 github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c
+2
go.sum
··· 754 754 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 755 755 github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= 756 756 github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= 757 + github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= 758 + github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= 757 759 github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= 758 760 github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= 759 761 github.com/sethvargo/go-envconfig v1.1.0 h1:cWZiJxeTm7AlCvzGXrEXaSTCNgip5oJepekh/BOQuog=