summaryrefslogtreecommitdiff
path: root/bin/bisect-database-dumps
diff options
context:
space:
mode:
Diffstat (limited to 'bin/bisect-database-dumps')
-rwxr-xr-xbin/bisect-database-dumps60
1 files changed, 60 insertions, 0 deletions
diff --git a/bin/bisect-database-dumps b/bin/bisect-database-dumps
new file mode 100755
index 0000000..c943107
--- /dev/null
+++ b/bin/bisect-database-dumps
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+dumps=$(
+ find '/data/backup' -mindepth 1 -maxdepth 1 -name 'database-*.xz' -exec ls -tr {} +
+)
+
+has=$(
+ printf '%s\n' "$dumps" | \
+ tail -n1
+)
+
+if ! xzgrep -q "$@" "${has}"; then
+ >&2 printf 'cannot find "%s" in the latest dump\n' "$*"
+fi
+
+has_not=$(
+ printf '%s\n' "$dumps" | \
+ head -n1
+)
+
+if xzgrep -q "$@" "${has_not}"; then
+ >&2 printf 'first dump does also have "%s"\n' "$*"
+fi
+
+count=$(
+ printf '%s\n' "${dumps}" | \
+ wc -l
+)
+
+>&2 printf '%s dumps to check\n' "${count}"
+
+while [ "${count}" -gt 2 ]; do
+ pivot=$(
+ printf '%s\n' "${dumps}" | \
+ sed -n '
+ \@^'"${has_not}"'$@,\@^'"${has}"'$@p
+ ' | \
+ sed -n '
+ '"$((count/2+1))"' p
+ '
+ )
+ >&2 printf 'looking into "%s" ... ' "${pivot}"
+ if xzgrep -q "$@" "${pivot}"; then
+ >&2 printf 'has'
+ has="${pivot}"
+ else
+ >&2 printf 'has not'
+ has_not="${pivot}"
+ fi
+ count=$(
+ printf '%s\n' "${dumps}" | \
+ sed -n '
+ \@^'"${has_not}"'$@,\@^'"${has}"'$@p
+ ' | \
+ wc -l
+ )
+ >&2 printf ' (%s dumps remaining)\n' "${count}"
+done
+
+printf '%s has not\n%s has\n' "${has_not}" "${has}"