Monorepo for Tangled tangled.org
3

Configure Feed

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

1package db 2 3import ( 4 "context" 5 "database/sql" 6 "fmt" 7 8 "github.com/bluesky-social/indigo/atproto/syntax" 9 "github.com/go-git/go-git/v5/plumbing" 10) 11 12func IsLanguageIndexed(ctx context.Context, e *sql.DB, repoId syntax.DID, commitId plumbing.Hash) (bool, error) { 13 var exists bool 14 err := e.QueryRow(`select exists(select 1 from repo_head_languages where repo = $1)`, repoId).Scan(&exists) 15 return exists, err 16} 17 18func InsertLanguages(ctx context.Context, e *sql.DB, repoId syntax.DID, commitId plumbing.Hash, langs map[string]int64) error { 19 tx, err := e.BeginTx(ctx, nil) 20 if err != nil { 21 return fmt.Errorf("BeginTx: %w", err) 22 } 23 defer tx.Rollback() 24 25 if _, err := tx.Exec(`delete from repo_head_languages where repo = $1`, repoId); err != nil { 26 return fmt.Errorf("deleting old languages: %w", err) 27 } 28 29 for lang, size := range langs { 30 if _, err := tx.Exec( 31 `insert into repo_head_languages (repo, commit, language, size) 32 values ($1, $2, $3, $4)`, 33 repoId, commitId.String(), lang, size, 34 ); err != nil { 35 return fmt.Errorf("inserting language: %w", err) 36 } 37 } 38 39 if err := tx.Commit(); err != nil { 40 return fmt.Errorf("tx.Commit: %w", err) 41 } 42 return nil 43} 44 45func ListLanguages(ctx context.Context, e *sql.DB, repoId syntax.DID, commitId plumbing.Hash) (map[string]int64, error) { 46 sizes := make(map[string]int64) 47 48 rows, err := e.Query(`select language, size from repo_head_languages where repo = $1 and commit = $2`, repoId, commitId.String()) 49 if err != nil { 50 return nil, err 51 } 52 defer rows.Close() 53 54 for rows.Next() { 55 var lang string 56 var size int64 57 if err := rows.Scan(&lang, &size); err != nil { 58 return nil, err 59 } 60 sizes[lang] = size 61 } 62 63 if err := rows.Err(); err != nil { 64 return nil, err 65 } 66 67 return sizes, nil 68}