#!/bin/bash

set -e

SOURCE=../test-images/cs9-developer-rootfs
OBJDIR=test-objects
LOWERDIR=tmpdir
export SOURCE OBJDIR LOWERDIR

# Clean up
rm -rf $OBJDIR $LOWERDIR large.squashfs large.erofs large.ext4 large.composefs

echo copying data
cp -ra --attributes-only "$SOURCE" "$LOWERDIR"

mkdir -p $OBJDIR

process_regular_file () {
    local SIZE=$(stat -c "%s" "$1")
    local REL="$(realpath --relative-to="$SOURCE" "$1")"
    local DST="$LOWERDIR/$REL"

    local DIGEST=$(fsverity digest --hash-alg=sha256 --compact "$1")
    local PART2=${DIGEST#??}
    local PART1=${DIGEST%${PART2}}

    mkdir -p $OBJDIR/$PART1
    cp --no-preserve=all "$1" $OBJDIR/$PART1/$PART2

    truncate --size=$SIZE "$DST"
    attr -R -s overlay.metacopy -V "" "$DST" > /dev/null
    attr -R -s overlay.redirect -V "/$PART1/$PART2" "$DST"  > /dev/null
}
export -f process_regular_file

find $SOURCE -type f -exec bash -c 'process_regular_file "$0"' {} \;

echo whitelisting
for f in $OBJDIR/*; do
    F=$(basename $f)
    mknod $LOWERDIR/$F c 0 0
done

mksquashfs  $LOWERDIR/ large.squashfs
mkfs.ext4 -d $LOWERDIR large.ext4 200M
mkfs.erofs large.erofs $LOWERDIR

../tools/mkcomposefs --compute-digest $SOURCE large.composefs
