#!/bin/sh UPGRADE_DIR=/lib/gluon/upgrade VERSION_DIR=/lib/gluon/version version_of() { opkg status "gluon-$1" | grep '^Version: ' | cut -d' ' -f 2 } oldversion_of() { oldversion="$(cat "$VERSION_DIR"/"$1" 2>/dev/null)" # Legacy support if [ -z "$oldversion" ]; then oldversion="$(cat /etc/.freifunk_version_keep 2>/dev/null)"; fi if [ -z "$oldversion" ]; then oldversion="$(cat /etc/.lff_version_keep 2>/dev/null)"; fi if [ -z "$oldversion" ]; then oldversion="$(cat /etc/.kff_version_keep 2>/dev/null)"; fi echo "$oldversion" } do_dir() { if [ -d "$1" ]; then local s for s in "$1"/*; do "$s"; done fi } do_component() { local component="$1" local version="$(version_of "$component")" if [ -z "$version" ]; then continue; fi cd "$component" local oldversion="$(oldversion_of "$component")" if [ -z "$oldversion" ]; then do_dir initial else local v for v in *; do if [ "$v" = initial -o "$v" = invariant -o "$v" = version ]; then continue; fi # 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" } version="$(version_of core)" oldversion="$(cat "$VERSION_FILE" 2>/dev/null)" if [ -z "$oldversion" ]; then oldversion="$(cat "$VERSION_FILE_FREIFUNK" 2>/dev/null)"; fi if [ -z "$oldversion" ]; then oldversion="$(cat "$VERSION_FILE_LFF" 2>/dev/null)"; fi if [ -z "$oldversion" ]; then oldversion="$(cat "$VERSION_FILE_KFF" 2>/dev/null)"; fi ( cd "$UPGRADE_DIR" do_component core for component in *; do ( if [ "$component" != 'core' ]; then do_component "$component" fi ) done ) rm -f "$VERSION_FILE_FREIFUNK" "$VERSION_FILE_LFF" "$VERSION_FILE_KFF"