ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/base-files/files/lib/functions/migrations.sh b/package/base-files/files/lib/functions/migrations.sh
new file mode 100644
index 0000000..d43ea35
--- /dev/null
+++ b/package/base-files/files/lib/functions/migrations.sh
@@ -0,0 +1,67 @@
+. /lib/functions.sh
+
+migrate_led_sysfs() {
+ local cfg="$1"; shift
+ local tuples="$@"
+ local sysfs
+ local name
+
+ config_get sysfs ${cfg} sysfs
+ config_get name ${cfg} name
+
+ [ -z "${sysfs}" ] && return
+
+ for tuple in ${tuples}; do
+ local old=${tuple%=*}
+ local new=${tuple#*=}
+ local new_sysfs
+
+ new_sysfs=$(echo ${sysfs} | sed "s/${old}/${new}/")
+
+ [ "${new_sysfs}" = "${sysfs}" ] && continue
+
+ uci set system.${cfg}.sysfs="${new_sysfs}"
+
+ logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}"
+ done;
+}
+
+remove_devicename_led_sysfs() {
+ local cfg="$1"; shift
+ local exceptions="$@"
+ local sysfs
+ local name
+ local new_sysfs
+
+ config_get sysfs ${cfg} sysfs
+ config_get name ${cfg} name
+
+ # only continue if two or more colons are present
+ echo "${sysfs}" | grep -q ":.*:" || return
+
+ for exception in ${exceptions}; do
+ # no change if exceptions provided as argument are found for devicename
+ echo "${sysfs}" | grep -q "^${exception}:" && return
+ done
+
+ new_sysfs=$(echo ${sysfs} | sed "s/^[^:]*://")
+
+ uci set system.${cfg}.sysfs="${new_sysfs}"
+
+ logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}"
+}
+
+migrate_leds() {
+ config_load system
+ config_foreach migrate_led_sysfs led "$@"
+}
+
+remove_devicename_leds() {
+ config_load system
+ config_foreach remove_devicename_led_sysfs led "$@"
+}
+
+migrations_apply() {
+ local realm="$1"
+ [ -n "$(uci changes ${realm})" ] && uci -q commit ${realm}
+}