base-files: allow exceptions when removing devicename from LEDs
authorAdrian Schmutzler <freifunk@adrianschmutzler.de>
Fri, 2 Oct 2020 12:23:59 +0000 (14:23 +0200)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Fri, 2 Oct 2020 12:51:57 +0000 (14:51 +0200)
Without the model-based devicename for LEDs, there are still cases
where a third component is required, typically when it refers to
internal "devices" like phys etc. An example are the following two
found on ramips:

  - rt2800soc-phy0::radio
  - rt2800pci-phy0::radio

So far, the rt2800*-phy: prefixes would be removed by the devicename
removal ("migration") script, and the configuration for these LEDs
would be broken.

To address this, this patch allows to add arguments to a call of
remove_devicename_leds, which will be compared against the first
part of the LED names/labels, and then be ignored by the routine,
and thus not removed:

  remove_devicename_leds "rt2800soc-phy0" "rt2800pci-phy0"

This mechanism is supposed to be used when a "devicename" applies
to several devices. If only a single device is affected, it might
be more effective to use a case statement and exclude the device
from migration by that entirely.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
package/base-files/Makefile
package/base-files/files/lib/functions/migrations.sh

index 3cb3d2034a459ece02425a4f38e3002eac8839bd..bf6b5c3c9a27be53cef245b38ebd63fbf89c0aaa 100644 (file)
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=231
+PKG_RELEASE:=232
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
index da10d2be5accd1a75da7cf5ee4fb9991c648929d..d2f1bc19aac055c9475a27d25350eea0eb09cd82 100644 (file)
@@ -29,7 +29,8 @@ migrate_led_sysfs() {
 }
 
 remove_devicename_led_sysfs() {
-       local cfg="$1"
+       local cfg="$1"; shift
+       local exceptions="$@"
        local sysfs
        local name
        local new_sysfs
@@ -37,8 +38,14 @@ remove_devicename_led_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}"
@@ -53,7 +60,7 @@ migrate_leds() {
 
 remove_devicename_leds() {
        config_load system
-       config_foreach remove_devicename_led_sysfs led
+       config_foreach remove_devicename_led_sysfs led "$@"
 }
 
 migrations_apply() {