#!/usr/bin/env bash
. ./wvtest-bup.sh || exit $?
. test/lib/btl.sh || exit $?

set -o pipefail

top="$(WVPASS pwd)" || exit $?
tmpdir="$(WVPASS wvmktempdir)" || exit $?

export BUP_DIR="$tmpdir/bup"
export GIT_DIR="$tmpdir/bup"

bup() { "$top/bup" "$@"; }

expect-one-src-missing()
{
    if test $# -eq 0; then
        args=''
    else
        args="$(printf " %q" "$@")"
    fi
    WVEXPRC 1 err-to validate.log bup validate-ref-links $args
    btl-display-file validate.log
    WVPASSEQ 1 "$(grep -cE '^missing ' validate.log)"
}

WVPASS cd "$tmpdir"
WVPASS bup init

WVPASS mkdir -p src/a
WVPASS echo 1 > src/a/1
WVPASS echo 2 > src/a/2
WVPASS echo 3 > src/a/3
WVPASS bup index src
WVPASS bup save --strip -n src src

WVPASS both-to out err bup validate-ref-links
WVPASSEQ 0 "$(grep -cE '^missing ' out)"
WVPASSEQ 0 "$(grep -cE '^missing ' err)"

bupm_oid="$(WVPIPE git ls-tree src:a | WVPASS head -1 | WVPASS btl-ent-oid)" \
    || exit $?
echo "$bupm_oid" | WVPASS "$top/dev/perforate-repo" --drop-oids "$BUP_DIR"

expect-one-src-missing


WVSTART 'validate specific refs'

WVPASS mkdir -p more/a
WVPASS echo 4 > more/a/4
WVPASS echo 5 > more/a/5
WVPASS bup index more
WVPASS bup save --strip -n more more

WVPASS both-to out err bup validate-ref-links more
WVPASSEQ 0 "$(grep -cE '^missing ' out)"
WVPASSEQ 0 "$(grep -cE '^missing ' err)"

expect-one-src-missing
expect-one-src-missing src

WVPASS bup rm --unsafe src
WVPASS both-to out err bup validate-ref-links
WVPASSEQ 0 "$(grep -cE '^missing ' out)"
WVPASSEQ 0 "$(grep -cE '^missing ' err)"


WVPASS cd "$top"
WVPASS rm -rf "$tmpdir"
