forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

appview: store default ref info in languages table

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li ffaadd3d 1764a690

verified
Changed files
+35 -17
appview
+1
appview/db/db.go
···
-- 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,
+20 -8
appview/db/language.go
···
)
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) {
···
}
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...)
···
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,
)
if err != nil {
return nil, fmt.Errorf("failed to scan: %w ", err)
+
}
+
+
if isDefaultRef != 0 {
+
rl.IsDefaultRef = true
}
langs = append(langs, rl)
···
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
}
+9 -5
appview/repo/index.go
···
}
}
-
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
···
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(
···
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,
})
}
+5 -4
appview/state/knotstream.go
···
}
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,
})
}