···428428 -- repo identifiers
429429 repo_at text not null,
430430 ref text not null,
431431+ is_default_ref integer not null default 0,
431432432433 -- language breakdown
433434 language text not null,
+20-8
appview/db/language.go
···88)
991010type RepoLanguage struct {
1111- Id int64
1212- RepoAt syntax.ATURI
1313- Ref string
1414- Language string
1515- Bytes int64
1111+ Id int64
1212+ RepoAt syntax.ATURI
1313+ Ref string
1414+ IsDefaultRef bool
1515+ Language string
1616+ Bytes int64
1617}
17181819func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) {
···2930 }
30313132 query := fmt.Sprintf(
3232- `select id, repo_at, ref, language, bytes from repo_languages %s`,
3333+ `select id, repo_at, ref, is_default_ref, language, bytes from repo_languages %s`,
3334 whereClause,
3435 )
3536 rows, err := e.Query(query, args...)
···4142 var langs []RepoLanguage
4243 for rows.Next() {
4344 var rl RepoLanguage
4545+ var isDefaultRef int
44464547 err := rows.Scan(
4648 &rl.Id,
4749 &rl.RepoAt,
4850 &rl.Ref,
5151+ &isDefaultRef,
4952 &rl.Language,
5053 &rl.Bytes,
5154 )
5255 if err != nil {
5356 return nil, fmt.Errorf("failed to scan: %w ", err)
5757+ }
5858+5959+ if isDefaultRef != 0 {
6060+ rl.IsDefaultRef = true
5461 }
55625663 langs = append(langs, rl)
···64716572func InsertRepoLanguages(e Execer, langs []RepoLanguage) error {
6673 stmt, err := e.Prepare(
6767- "insert or replace into repo_languages (repo_at, ref, language, bytes) values (?, ?, ?, ?)",
7474+ "insert or replace into repo_languages (repo_at, ref, is_default_ref, language, bytes) values (?, ?, ?, ?, ?)",
6875 )
6976 if err != nil {
7077 return err
7178 }
72797380 for _, l := range langs {
7474- _, err := stmt.Exec(l.RepoAt, l.Ref, l.Language, l.Bytes)
8181+ isDefaultRef := 0
8282+ if l.IsDefaultRef {
8383+ isDefaultRef = 1
8484+ }
8585+8686+ _, err := stmt.Exec(l.RepoAt, l.Ref, isDefaultRef, l.Language, l.Bytes)
7587 if err != nil {
7688 return err
7789 }
+9-5
appview/repo/index.go
···123123 }
124124 }
125125126126- languageInfo, err := rp.getLanguageInfo(f, signedClient)
126126+ // TODO: a bit dirty
127127+ languageInfo, err := rp.getLanguageInfo(f, signedClient, chi.URLParam(r, "ref") == "")
127128 if err != nil {
128129 log.Printf("failed to compute language percentages: %s", err)
129130 // non-fatal
···158159func (rp *Repo) getLanguageInfo(
159160 f *reporesolver.ResolvedRepo,
160161 signedClient *knotclient.SignedClient,
162162+ isDefaultRef bool,
161163) ([]types.RepoLanguageDetails, error) {
162164 // first attempt to fetch from db
163165 langs, err := db.GetRepoLanguages(
···175177 if ls == nil {
176178 return nil, nil
177179 }
180180+178181 for l, s := range ls.Languages {
179182 langs = append(langs, db.RepoLanguage{
180180- RepoAt: f.RepoAt,
181181- Ref: f.Ref,
182182- Language: l,
183183- Bytes: s,
183183+ RepoAt: f.RepoAt,
184184+ Ref: f.Ref,
185185+ IsDefaultRef: isDefaultRef,
186186+ Language: l,
187187+ Bytes: s,
184188 })
185189 }
186190