mirror of
https://github.com/sbrow/envr.git
synced 2025-12-29 15:47:38 -05:00
refactor(db): Removed the need to pass CloseMode to Db.Close.
This commit is contained in:
25
app/db.go
25
app/db.go
@@ -13,19 +13,12 @@ import (
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
// CloseMode determines whether or not the in-memory DB should be saved to disk
|
||||
// before closing the connection.
|
||||
type CloseMode int
|
||||
|
||||
const (
|
||||
ReadOnly CloseMode = iota
|
||||
Write
|
||||
)
|
||||
|
||||
type Db struct {
|
||||
db *sql.DB
|
||||
cfg Config
|
||||
features *AvailableFeatures
|
||||
// If true, the database will be saved to disk before closing
|
||||
changed bool
|
||||
}
|
||||
|
||||
func Open() (*Db, error) {
|
||||
@@ -37,7 +30,7 @@ func Open() (*Db, error) {
|
||||
if _, err := os.Stat("/home/spencer/.envr/data.age"); err != nil {
|
||||
// Create a new DB
|
||||
db, err := newDb()
|
||||
return &Db{db, *cfg, nil}, err
|
||||
return &Db{db, *cfg, nil, true}, err
|
||||
} else {
|
||||
// Open the existing DB
|
||||
tmpFile, err := os.CreateTemp("", "envr-*.db")
|
||||
@@ -59,7 +52,7 @@ func Open() (*Db, error) {
|
||||
|
||||
restoreDB(tmpFile.Name(), memDb)
|
||||
|
||||
return &Db{memDb, *cfg, nil}, nil
|
||||
return &Db{memDb, *cfg, nil, false}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,10 +174,10 @@ func (db *Db) List() (results []EnvFile, err error) {
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *Db) Close(mode CloseMode) error {
|
||||
func (db *Db) Close() error {
|
||||
defer db.db.Close()
|
||||
|
||||
if mode == Write {
|
||||
if db.changed {
|
||||
// Create tmp file
|
||||
tmpFile, err := os.CreateTemp("", "envr-*.db")
|
||||
if err != nil {
|
||||
@@ -200,6 +193,8 @@ func (db *Db) Close(mode CloseMode) error {
|
||||
if err := encryptDb(tmpFile.Name(), db.cfg.Keys); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
db.changed = false
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -289,6 +284,8 @@ func (db *Db) Insert(file EnvFile) error {
|
||||
return fmt.Errorf("failed to insert env file: %w", err)
|
||||
}
|
||||
|
||||
db.changed = true
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -328,6 +325,8 @@ func (db *Db) Delete(path string) error {
|
||||
return fmt.Errorf("no file found with path: %s", path)
|
||||
}
|
||||
|
||||
db.changed = true
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ var backupCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer db.Close(app.Write)
|
||||
defer db.Close()
|
||||
record := app.NewEnvFile(path)
|
||||
|
||||
if err := db.Insert(record); err != nil {
|
||||
|
||||
@@ -38,7 +38,7 @@ var checkCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to open database: %w", err)
|
||||
}
|
||||
defer db.Close(app.ReadOnly)
|
||||
defer db.Close()
|
||||
|
||||
// Check if the path is a file or directory
|
||||
info, err := os.Stat(absPath)
|
||||
|
||||
@@ -19,7 +19,7 @@ The check command reports on which binaries are available and which are not.`,
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer db.Close(app.ReadOnly)
|
||||
defer db.Close()
|
||||
features := db.Features()
|
||||
|
||||
table := tablewriter.NewWriter(os.Stdout)
|
||||
|
||||
@@ -24,7 +24,7 @@ var listCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer db.Close(app.ReadOnly)
|
||||
defer db.Close()
|
||||
|
||||
rows, err := db.List()
|
||||
if err != nil {
|
||||
|
||||
@@ -25,7 +25,7 @@ var removeCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer db.Close(app.Write)
|
||||
defer db.Close()
|
||||
if err := db.Delete(path); err != nil {
|
||||
return err
|
||||
} else {
|
||||
|
||||
@@ -27,7 +27,7 @@ var restoreCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer db.Close(app.ReadOnly)
|
||||
defer db.Close()
|
||||
record, err := db.Fetch(path)
|
||||
|
||||
if err != nil {
|
||||
|
||||
@@ -57,7 +57,7 @@ var scanCmd = &cobra.Command{
|
||||
|
||||
// Close database with write mode to persist changes
|
||||
if addedCount > 0 {
|
||||
err = db.Close(app.Write)
|
||||
err = db.Close()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error saving changes: %v\n", err)
|
||||
} else {
|
||||
@@ -65,7 +65,7 @@ var scanCmd = &cobra.Command{
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
err = db.Close(app.ReadOnly)
|
||||
err = db.Close()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error closing database: %v\n", err)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ var syncCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer db.Close(app.Write)
|
||||
defer db.Close()
|
||||
files, err := db.List()
|
||||
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user