#!/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 mkdir -p "$VERSION_DIR" version_of() { opkg status "gluon-$1" | grep '^Version: ' | cut -d' ' -f 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 else local v for v in *; do [ "$v" != initial -a "$v" != invariant -a "$v" != legacy ] || continue # The return value of opkg compare-versions is negated if ! opkg compare-versions "$v" '>>' "$oldversion"; then do_dir "$v" fi done 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