From ffaadd3d7304fe70ef83aeebdb1cb5daf6826828 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Sun, 20 Jul 2025 13:35:04 +0100 Subject: [PATCH] appview: store default ref info in languages table Signed-off-by: oppiliappan --- appview/db/db.go | 1 + appview/db/language.go | 28 ++++++++++++++++++++-------- appview/repo/index.go | 14 +++++++++----- appview/state/knotstream.go | 9 +++++---- 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/appview/db/db.go b/appview/db/db.go index 3013c01..cc6283c 100644 --- a/appview/db/db.go +++ b/appview/db/db.go @@ -428,6 +428,7 @@ func Make(dbPath string) (*DB, error) { -- repo identifiers repo_at text not null, ref text not null, + is_default_ref integer not null default 0, -- language breakdown language text not null, diff --git a/appview/db/language.go b/appview/db/language.go index 599806e..73450ac 100644 --- a/appview/db/language.go +++ b/appview/db/language.go @@ -8,11 +8,12 @@ import ( ) type RepoLanguage struct { - Id int64 - RepoAt syntax.ATURI - Ref string - Language string - Bytes int64 + Id int64 + RepoAt syntax.ATURI + Ref string + IsDefaultRef bool + Language string + Bytes int64 } func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) { @@ -29,7 +30,7 @@ func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) { } query := fmt.Sprintf( - `select id, repo_at, ref, language, bytes from repo_languages %s`, + `select id, repo_at, ref, is_default_ref, language, bytes from repo_languages %s`, whereClause, ) rows, err := e.Query(query, args...) @@ -41,11 +42,13 @@ func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) { var langs []RepoLanguage for rows.Next() { var rl RepoLanguage + var isDefaultRef int err := rows.Scan( &rl.Id, &rl.RepoAt, &rl.Ref, + &isDefaultRef, &rl.Language, &rl.Bytes, ) @@ -53,6 +56,10 @@ func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) { return nil, fmt.Errorf("failed to scan: %w ", err) } + if isDefaultRef != 0 { + rl.IsDefaultRef = true + } + langs = append(langs, rl) } if err = rows.Err(); err != nil { @@ -64,14 +71,19 @@ func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) { func InsertRepoLanguages(e Execer, langs []RepoLanguage) error { stmt, err := e.Prepare( - "insert or replace into repo_languages (repo_at, ref, language, bytes) values (?, ?, ?, ?)", + "insert or replace into repo_languages (repo_at, ref, is_default_ref, language, bytes) values (?, ?, ?, ?, ?)", ) if err != nil { return err } for _, l := range langs { - _, err := stmt.Exec(l.RepoAt, l.Ref, l.Language, l.Bytes) + isDefaultRef := 0 + if l.IsDefaultRef { + isDefaultRef = 1 + } + + _, err := stmt.Exec(l.RepoAt, l.Ref, isDefaultRef, l.Language, l.Bytes) if err != nil { return err } diff --git a/appview/repo/index.go b/appview/repo/index.go index edc21e0..370c555 100644 --- a/appview/repo/index.go +++ b/appview/repo/index.go @@ -123,7 +123,8 @@ func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) { } } - languageInfo, err := rp.getLanguageInfo(f, signedClient) + // TODO: a bit dirty + languageInfo, err := rp.getLanguageInfo(f, signedClient, chi.URLParam(r, "ref") == "") if err != nil { log.Printf("failed to compute language percentages: %s", err) // non-fatal @@ -158,6 +159,7 @@ func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) { func (rp *Repo) getLanguageInfo( f *reporesolver.ResolvedRepo, signedClient *knotclient.SignedClient, + isDefaultRef bool, ) ([]types.RepoLanguageDetails, error) { // first attempt to fetch from db langs, err := db.GetRepoLanguages( @@ -175,12 +177,14 @@ func (rp *Repo) getLanguageInfo( if ls == nil { return nil, nil } + for l, s := range ls.Languages { langs = append(langs, db.RepoLanguage{ - RepoAt: f.RepoAt, - Ref: f.Ref, - Language: l, - Bytes: s, + RepoAt: f.RepoAt, + Ref: f.Ref, + IsDefaultRef: isDefaultRef, + Language: l, + Bytes: s, }) } diff --git a/appview/state/knotstream.go b/appview/state/knotstream.go index 5544c7d..4c7255d 100644 --- a/appview/state/knotstream.go +++ b/appview/state/knotstream.go @@ -159,10 +159,11 @@ func updateRepoLanguages(d *db.DB, record tangled.GitRefUpdate) error { } langs = append(langs, db.RepoLanguage{ - RepoAt: repo.RepoAt(), - Ref: ref.Short(), - Language: l.Lang, - Bytes: l.Size, + RepoAt: repo.RepoAt(), + Ref: ref.Short(), + IsDefaultRef: record.Meta.IsDefaultRef, + Language: l.Lang, + Bytes: l.Size, }) } -- 2.51.2