#!/bin/sh


UPGRADE_DIR=/lib/gluon/upgrade
VERSION_DIR=/lib/gluon/version


if [ -x /lib/gluon/legacy/legacy-upgrade ] && /lib/gluon/legacy/legacy-upgrade; then
	HAS_LEGACY=1
else
	HAS_LEGACY=
fi


# Temporary fix for broken upgrades (happened between 20140225 and 20140226, remove next week)
if [ -f "$VERSION_DIR" ]; then rm "$VERSION_DIR"; fi

mkdir -p "$VERSION_DIR"


version_of() {
	opkg status "gluon-$1" | awk '/^Version: / { print $2 }'
}

oldversion_of() {
	cat "$VERSION_DIR"/"$1" 2>/dev/null
}

do_dir() {
	[ -d "$1" ] || return

	local s
	for s in "$1"/*; do "$s"; done
}

do_component() {
	local component="$1"
	local version="$(version_of "$component")"
	[ "$version" ] || continue

	(
		cd "$component"

		local oldversion="$(oldversion_of "$component")"
		if [ -z "$oldversion" ]; then
			if [ "$HAS_LEGACY" ]; then
				do_dir legacy
			else
				do_dir initial
			fi
		fi

		do_dir invariant

		echo "$version" > "$VERSION_DIR"/"$component"
	)
}


cd "$UPGRADE_DIR"

do_component core

for component in *; do
	[ "$component" != 'core' ] || continue
	do_component "$component"
done

if [ "$HAS_LEGACY" ]; then
	/lib/gluon/legacy/legacy-upgrade-late
fi