#!/bin/sh
set -eu

DISK="/dev/mmcblk0"
PART_NUM="4"
HOME_PART="/dev/mmcblk0p4"
HOME_MNT="/home"
DONE="$HOME_MNT/.home-resize.done"
LOG="/boot/ota/home-resize.log"

mkdir -p /boot/ota

log() {
	echo "[home-resize] $*" | tee -a "$LOG"
}

[ -f "$DONE" ] && {
	log "already done"
	exit 0
}

[ -b "$DISK" ] || { log "missing disk $DISK"; exit 0; }
[ -b "$HOME_PART" ] || { log "missing home partition $HOME_PART"; exit 0; }
mountpoint -q "$HOME_MNT" || { log "/home not mounted"; exit 0; }

log "starting"
lsblk >> "$LOG" 2>&1 || true
df -h "$HOME_MNT" >> "$LOG" 2>&1 || true

log "fixing GPT backup table if needed"
sgdisk -e "$DISK" >> "$LOG" 2>&1 || true

log "resizing partition $HOME_PART to end of disk"

printf "Yes\n" | parted ---pretend-input-tty "$DISK" resizepart "$PART_NUM" 100% >> "$LOG" 2>&1 || {
	log "ERROR parted resizepart failed"
	exit 1
}

partprobe "$DISK" >> "$LOG" 2>&1 || true
partx -u "$DISK" >> "$LOG" 2>&1 || true
sleep 3

log "resizing btrfs filesystem"
btrfs filesystem resize max "$HOME_MNT" >> "$LOG" 2>&1 || {
	log "ERROR btrfs resize failed"
	exit 1
}

touch "$DONE"
sync

log "after resize"
lsblk >> "$LOG" 2>&1 || true
df -h "$HOME_MNT" >> "$LOG" 2>&1 || true

log "done"
exit 0
