#!/bin/sh

PREREQS="arista-convertfs"

prereqs() { echo "$PREREQS"; }

case $1 in
  prereqs)
  prereqs
    exit 0
    ;;
esac

info() { printf "%04.2f: $@\n" "$(cut -f1 -d' ' /proc/uptime)"; }
err() { info "Error: $@"; }
warn() { info "Warning: $@"; }

set -e

root_mnt='/mnt/arista-firmware'
root_dev=''
aboot_flag=''

# Alway run cleanup before exit
cleanup() {
    if grep -q "$root_mnt" /proc/mounts; then
        umount "$root_mnt"
    fi
    [ -e "$root_mnt" ] && rmdir "$root_mnt"
}
trap cleanup EXIT

# Extract kernel parameters
set -- $(cat /proc/cmdline)
for x in "$@"; do
    case "$x" in
        Aboot=*)
            aboot_flag="${x#Aboot=}"
            ;;
        loop=*)
            x1="${x#loop=}"
            image_dir="${x1%/*}"
            ;;
        SONIC_BOOT_TYPE=warm*|SONIC_BOOT_TYPE=fast*)
            # Skip this script for warm-reboot and fast-reboot
            exit 0
            ;;
        systemd.unit=kdump-tools.service)
            # In kdump environment, skip hooks
            exit 0
            ;;
    esac
done

[ -z "$aboot_flag" ] && exit 0

root_dev="$ROOT"
if [ -z "$root_dev" ]; then
    err "Error: root device name is not provided"
    exit 1
fi

mkdir -p "$root_mnt"
mount -t ext4 "$root_dev" "$root_mnt"

get_sorted_hooks() {
    echo $(find "$1" -name '[0-9][0-9]-*' -type f | sort)
}

if [ -d "$root_mnt/$image_dir/platform/hooks/boot1" ]; then
    for hook in $(get_sorted_hooks "$root_mnt/$image_dir/platform/hooks/boot1"); do
        if [ ! -z "$hook" ]; then
            cp "$hook" /tmp/
            hook="/tmp/`basename $hook`"
            info "Running hook $(basename $hook)"
            . "$hook"
        fi
    done
fi

umount "$root_mnt"
rmdir "$root_mnt"