summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2025-06-14 00:41:27 +0200
committerThomas Voss <mail@thomasvoss.com> 2025-06-14 00:41:27 +0200
commit4f14515613bd491dd0627398aa8fc3e3aef07945 (patch)
tree61d7ad4890707b280c15118c47281a02dc5000f7
parent604cac8c0ab26a43d28341ff6f6e58e969eec925 (diff)
Implement the ‘atexit’ package
-rw-r--r--main.go2
-rw-r--r--src/atexit/atexit.go13
-rw-r--r--src/dbx/db.go4
-rw-r--r--src/try/try.go7
4 files changed, 24 insertions, 2 deletions
diff --git a/main.go b/main.go
index 71e652e..dd7328e 100644
--- a/main.go
+++ b/main.go
@@ -11,6 +11,7 @@ import (
"git.thomasvoss.com/euro-cash.eu/src"
"git.thomasvoss.com/euro-cash.eu/src/dbx"
+ "git.thomasvoss.com/euro-cash.eu/src/atexit"
"git.thomasvoss.com/euro-cash.eu/src/email"
. "git.thomasvoss.com/euro-cash.eu/src/try"
"git.thomasvoss.com/euro-cash.eu/src/watch"
@@ -40,6 +41,7 @@ func main() {
if *debugp {
path := Try2(os.Executable())
go watch.File(path, func() {
+ atexit.Exec()
Try(syscall.Exec(path, os.Args, os.Environ()))
})
}
diff --git a/src/atexit/atexit.go b/src/atexit/atexit.go
new file mode 100644
index 0000000..ed35ccf
--- /dev/null
+++ b/src/atexit/atexit.go
@@ -0,0 +1,13 @@
+package atexit
+
+var hooks = []func(){}
+
+func Register(f func()) {
+ hooks = append(hooks, f)
+}
+
+func Exec() {
+ for i := len(hooks)-1; i >= 0; i-- {
+ hooks[i]()
+ }
+}
diff --git a/src/dbx/db.go b/src/dbx/db.go
index 5bd65a5..e97b9ea 100644
--- a/src/dbx/db.go
+++ b/src/dbx/db.go
@@ -11,6 +11,7 @@ import (
"github.com/mattn/go-sqlite3"
+ "git.thomasvoss.com/euro-cash.eu/src/atexit"
. "git.thomasvoss.com/euro-cash.eu/src/try"
)
@@ -22,6 +23,7 @@ var (
func Init(sqlDir fs.FS) {
db = Try2(sql.Open("sqlite3", DBName))
Try(db.Ping())
+ atexit.Register(Close)
Try(applyMigrations(sqlDir))
/* TODO: Remove debug code */
@@ -120,7 +122,7 @@ func applyMigrations(dir fs.FS) error {
if err := tx.Commit(); err != nil {
return err
}
- log.Printf("Applied database migration ‘%s’", f)
+ log.Printf("Applied database migration ‘%s’\n", f)
}
if last != "" {
diff --git a/src/try/try.go b/src/try/try.go
index fc086d1..24cb95c 100644
--- a/src/try/try.go
+++ b/src/try/try.go
@@ -1,10 +1,15 @@
package try
-import "log"
+import (
+ "log"
+
+ "git.thomasvoss.com/euro-cash.eu/src/atexit"
+)
func Try(e error) {
if e != nil {
log.Fatal(e)
+ atexit.Exec()
}
}