1. Use 2 new data structures: -paths (set) contains all the files in the actual filesystem -hashes (dictionary) substitute the sqlite query with dict[hash] = set(db paths) 2. Minimal unitary tests created with bats (bash script) See https://github.com/ambv/bitrot/issues/23 for details.
62 lines
1.8 KiB
Bash
62 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# LC_ALL=en_US.UTF-8
|
|
# LANGUAGE=en_US.UTF-8
|
|
LANG=C
|
|
|
|
check_fail() {
|
|
local temp=/tmp/bats.log
|
|
> $temp
|
|
for line; do
|
|
echo "$line" >> $temp
|
|
done
|
|
# cat /tmp/.bitrot.log >> $temp
|
|
}
|
|
|
|
|
|
generate_bitrot() {
|
|
local dest=$1 temp=/tmp/temp-base
|
|
local -i count=$(($2*100)) percent=${3:-5}
|
|
local cmd=$4
|
|
mkdir -p "${dest%/*}"
|
|
local dir_base=${dest%%/*}
|
|
touch "$dest" $temp
|
|
#let's make sure they shared the same timestamp
|
|
touch "$dest" -r $temp
|
|
|
|
dd if=/dev/zero of="$dest" bs=1k count=$count &>/dev/null
|
|
run $cmd
|
|
#modify it and change modify date to base-file, simulate real bitrot so
|
|
dd seek=1k if=/dev/urandom of="$dest" bs=1k count=$((count*percent/100)) conv=notrunc &>/dev/null
|
|
touch "$dest" -r $temp
|
|
\rm -f $tmp
|
|
run $cmd
|
|
}
|
|
|
|
generate_bitrots() {
|
|
local dest=$1 dest2=$2 temp=/tmp/temp-base
|
|
local -i count=$(($3*100)) percent=${4:-5}
|
|
mkdir -p "${dest%/*}"
|
|
mkdir -p "${dest2%/*}"
|
|
local dir_base=${dest%/*}
|
|
local dir_base2=${dest2%/*}
|
|
touch "$dest2" "$dest" $temp
|
|
#let's make sure they shared the same timestamp
|
|
touch "$dest" -r $temp
|
|
touch "$dest2" -r $temp
|
|
|
|
dd if=/dev/zero of="$dest" bs=1k count=$count &>/dev/null
|
|
dd if=/dev/zero of="$dest2" bs=1k count=$count &>/dev/null
|
|
run $r "$dir_base" "$dir_base2"
|
|
#modify it and change modify date to base-file, simulate bitrot so
|
|
dd seek=1k if=/dev/urandom of="$dest" bs=1k count=$((count*percent/100)) conv=notrunc &>/dev/null
|
|
dd seek=1k if=/dev/urandom of="$dest2" bs=1k count=$((count*percent/100)) conv=notrunc &>/dev/null
|
|
touch "$dest" -r $temp
|
|
touch "$dest2" -r $temp
|
|
\rm -f $tmp
|
|
echo $status > /tmp/status
|
|
run $r "$dir_base" "$dir_base2"
|
|
echo $status >> /tmp/status
|
|
}
|
|
|