#!/usr/bin/env bash
. ./wvtest-bup.sh
. ./test/lib/btl.sh

set -o pipefail

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

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

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


WVPASS cd "$tmpdir"
WVPASS bup init


WVSTART 'non-directories with empty metadata have restrictive permissions'
WVPASS mkdir src
WVPASS echo 1 > src/1
WVPASS echo 2 > src/2
WVPASS mkfifo src/3
WVPASS chmod 0644 src/{1,2,3}
WVPASS bup index src
WVPASS bup save --strip -n src src
WVPASS bup join src:.bupm > bupm

wv-match-rx "$(bup ls -l src/latest/ | tr -s ' ' ' ')" \
'^-rw-r--r-- [^/]+/.* 2 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2} 1
-rw-r--r-- [^/]+/.* 2 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2} 2
prw-r--r-- [^/]+/.* 0 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2} 3$'

# Now replace src:.bupm with one with some empty entries
WVPASS "$top/dev/clear-bupm-entries" 1 3 < bupm > bupm-cleared
cleared_bupm_oid="$(WVPASS git hash-object -w bupm-cleared)"
new_tree="$(WVPASS git ls-tree src | WVPASS sed -Ee "1s/.*/100644 blob $cleared_bupm_oid	.bupm/")"
new_tree_oid="$(echo "$new_tree" | WVPASS git mktree)"
new_save=$(WVPASS git commit-tree "$new_tree_oid" -p src -m 'empty metadata')
WVPASS git branch -f src "$new_save"

wv-match-rx "$(bup ls -l src/latest/ | tr -s ' ' ' ')" \
'^-rw------- \?/\? 2 \?\?\?\?-\?\?-\?\? \?\?:\?\? 1
-rw-r--r-- [^/]+/.* 2 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2} 2
-rw------- \?/\? 0 \?\?\?\?-\?\?-\?\? \?\?:\?\? 3$'

WVPASS rm -rf restore
um="$(umask)" || exit $?
umask 0
WVPASS bup restore -C restore/ src/latest/
WVPASS cd restore
wv-match-rx "$(ls -l | cut -d' ' -f1 | tail -n +2)" \
'-rw-------[.+]?
-rw-r--r--[.+]?
-rw-------[.+]?'
WVPASS cd ..
umask "$um"
WVPASS rm -rf restore

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