index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
-rwxr-xr-x | bin/bisect-database-dumps | 60 |
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}" |