summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-12-04 06:17:50 -0300
committerEuAndreh <eu@euandre.org>2025-12-04 06:25:04 -0300
commit13edba0fa2bd4c3847160809499ce837f52d1264 (patch)
tree73c1df9c4e2d1b36102eddfffb52babb98c5d406 /bin
parentetc/transactor.properties.tmpl: Default to "tmp" for data-dir (diff)
downloaddatomic-13edba0fa2bd4c3847160809499ce837f52d1264.tar.gz
datomic-13edba0fa2bd4c3847160809499ce837f52d1264.tar.xz
bin/datomic.in: Add "datomic(1)" commandHEADmain
Diffstat (limited to 'bin')
-rwxr-xr-xbin/datomic.in85
1 files changed, 85 insertions, 0 deletions
diff --git a/bin/datomic.in b/bin/datomic.in
new file mode 100755
index 0000000..2f60912
--- /dev/null
+++ b/bin/datomic.in
@@ -0,0 +1,85 @@
+#!/bin/sh
+set -euo pipefail
+
+
+usage() {
+ cat <<-'EOF'
+ Usage:
+ datomic backup DBFILE TODIR
+ datomic gc DBFILE
+ EOF
+}
+
+
+ACTION="${1:-}"
+DBFILE="${2:-}"
+TODIR="${3:-}"
+
+if [ -z "$ACTION" ]; then
+ echo 'Missing ACTION.' >&2
+ usage >&2
+ exit 2
+fi
+
+if [ -z "$DBFILE" ]; then
+ echo 'Missing DBFILE.' >&2
+ usage >&2
+ exit 2
+fi
+
+if [ "$ACTION" = 'backup' ] && [ -z "$TODIR" ]; then
+ echo 'Missing TODIR.' >&2
+ usage >&2
+ exit 2
+fi
+
+
+
+lastroot() (
+ cd "$TODIR"/datomic/roots
+ find * | sort -n | tail -n1
+)
+
+backupcmd() {
+ java \
+ -server \
+ -Xms4g \
+ -Xmx4g \
+ --class-path '@SYSCONFDIR@/:@JAVADIR@/*' \
+ clojure.main \
+ -m backup \
+ "$@"
+}
+
+
+case "$ACTION" in
+ (backup)
+ backupcmd backup datomic:sql://app?jdbc:sqlite:"$DBFILE" file:"$TODIR"/datomic
+ backupcmd verify file:"$TODIR"/datomic true "$(lastroot)"
+ sqlite3 "$DBFILE" ".backup '$TODIR/sqlite.db'"
+ {
+ sqlite3 "$DBFILE" .dump > "$TODIR"/dump.sql.next
+ mv "$TODIR"/dump.sql.next "$TODIR"/dump.sql
+ }
+ {
+ sqlite3 "$TODIR"/restored.db < @SYSCONFDIR@/init.sql > /dev/null
+ backupcmd restore file:"$TODIR"/datomic datomic:sql://app?jdbc:sqlite:"$TODIR"/restored.db
+ }
+ ;;
+ (gc)
+ exec java \
+ -server \
+ -Xms4g \
+ -Xmx4g \
+ --class-path '@SYSCONFDIR@/:@JAVADIR@/*' \
+ clojure.main \
+ -m datomic.tools.gc-db \
+ datomic:sql://app?jdbc:sqlite:"$DBFILE" \
+ "$(date --date="$(date +'%Y-%m-01') - 3 months" -Is)"
+ ;;
+ (*)
+ printf 'Bad ACTION: "%s"\n' "$ACTION" >&2
+ usage >&2
+ exit 2
+ ;;
+esac