repos / git-pr

a self-hosted git collaboration server
git clone https://github.com/picosh/git-pr.git

commit
d60d7b4
parent
9be7a5d
author
Eric Bower
date
2024-07-18 20:57:32 -0400 EDT
chore: better error handling for cfg and db
4 files changed,  +23, -11
M cfg.go
M db.go
M ssh.go
M web.go
M cfg.go
+16, -4
 1@@ -3,6 +3,7 @@ package git
 2 import (
 3 	"fmt"
 4 	"log/slog"
 5+	"path/filepath"
 6 	"strings"
 7 	"time"
 8 
 9@@ -37,13 +38,17 @@ type GitCfg struct {
10 }
11 
12 func NewGitCfg(fpath string, logger *slog.Logger) *GitCfg {
13-	logger.Info("loading configuration file", "fpath", fpath)
14+	fpp, err := filepath.Abs(fpath)
15+	if err != nil {
16+		panic(err)
17+	}
18+	logger.Info("loading configuration file", "fpath", fpp)
19 
20-	if err := k.Load(file.Provider(fpath), toml.Parser()); err != nil {
21+	if err := k.Load(file.Provider(fpp), toml.Parser()); err != nil {
22 		panic(fmt.Sprintf("error loading config: %v", err))
23 	}
24 
25-	err := k.Load(env.Provider("GITPR_", ".", func(s string) string {
26+	err = k.Load(env.Provider("GITPR_", ".", func(s string) string {
27 		keyword := strings.ToLower(strings.TrimPrefix(s, "GITPR_"))
28 		return keyword
29 	}), nil)
30@@ -68,8 +73,15 @@ func NewGitCfg(fpath string, logger *slog.Logger) *GitCfg {
31 		logger.Info("no admin specified in config so no one can submit a review!")
32 	}
33 
34+	// make datadir absolute
35+	tmpdir := out.DataDir
36 	if out.DataDir == "" {
37-		out.DataDir = "data"
38+		tmpdir = "./data"
39+	}
40+	datadir, err := filepath.Abs(tmpdir)
41+	out.DataDir = datadir
42+	if err != nil {
43+		panic(err)
44 	}
45 
46 	if out.Host == "" {
M db.go
+1, -2
 1@@ -187,12 +187,11 @@ CREATE TABLE IF NOT EXISTS event_logs (
 2 var sqliteMigrations = []string{
 3 	"", // migration #0 is reserved for schema initialization
 4 	"ALTER TABLE patches ADD COLUMN base_commit_sha TEXT",
 5-	`
 6-	`,
 7 }
 8 
 9 // Open opens a database connection.
10 func Open(dsn string, logger *slog.Logger) (*DB, error) {
11+	logger.Info("opening db file", "dsn", dsn)
12 	db, err := sqlx.Connect("sqlite", dsn)
13 	if err != nil {
14 		return nil, err
M ssh.go
+3, -2
 1@@ -32,9 +32,10 @@ func authHandler(pr *PrCmd) func(ctx ssh.Context, key ssh.PublicKey) bool {
 2 }
 3 
 4 func GitSshServer(cfg *GitCfg) {
 5-	dbh, err := Open(filepath.Join(cfg.DataDir, "pr.db"), cfg.Logger)
 6+	dbpath := filepath.Join(cfg.DataDir, "pr.db")
 7+	dbh, err := Open(dbpath, cfg.Logger)
 8 	if err != nil {
 9-		panic(err)
10+		panic(fmt.Sprintf("cannot find database file, check folder and perms: %s", dbpath))
11 	}
12 
13 	be := &Backend{
M web.go
+3, -3
 1@@ -621,10 +621,10 @@ func chromaStyleHandler(w http.ResponseWriter, r *http.Request) {
 2 func StartWebServer(cfg *GitCfg) {
 3 	addr := fmt.Sprintf("%s:%s", cfg.Host, cfg.WebPort)
 4 
 5-	dbh, err := Open(filepath.Join(cfg.DataDir, "pr.db"), cfg.Logger)
 6+	dbpath := filepath.Join(cfg.DataDir, "pr.db")
 7+	dbh, err := Open(dbpath, cfg.Logger)
 8 	if err != nil {
 9-		cfg.Logger.Error("could not open db", "err", err)
10-		return
11+		panic(fmt.Sprintf("cannot find database file, check folder and perms: %s", dbpath))
12 	}
13 
14 	be := &Backend{