base-files: add function to remove devicename from LED labels
authorAdrian Schmutzler <freifunk@adrianschmutzler.de>
Sun, 27 Sep 2020 15:25:15 +0000 (17:25 +0200)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Fri, 2 Oct 2020 11:50:50 +0000 (13:50 +0200)
Currently, we request LED labels in OpenWrt to follow the scheme

  modelname:color:function

However, specifying the modelname at the beginning is actually
entirely useless for the devices we support in OpenWrt. In patches
subsequent to this one, we will thus remove the modelname from
the label definitions on various targets.

To migrate the existing definitions from older installations,
a migration script needs to be deployed that does

  modelname:color:function -> color:function

e.g.

  dir-789:green:status -> green:status

This patch introduces two functions that do exactly that:
For each entry in /etc/config/system, the routine will check whether
two (or more) colons are present, and then remove everything up to
(and including) the first colon.

For now, this will be applied unconditionally, i.e. if the function
is called for a device, all labels will be cut like this.

However, for a future case of mixed three-part and two-part labels,
it should not be too hard to provide a function argument with
exceptions to the removal.

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

index db9be216e6815aa806f9a491cfbd9540312afb37..3cb3d2034a459ece02425a4f38e3002eac8839bd 100644 (file)
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=230
+PKG_RELEASE:=231
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
index b180a0242f3ca9b9778ba4434c737d47cef46d3a..da10d2be5accd1a75da7cf5ee4fb9991c648929d 100644 (file)
@@ -28,11 +28,34 @@ migrate_led_sysfs() {
        done;
 }
 
+remove_devicename_led_sysfs() {
+       local cfg="$1"
+       local sysfs
+       local name
+       local new_sysfs
+
+       config_get sysfs ${cfg} sysfs
+       config_get name ${cfg} name
+
+       echo "${sysfs}" | grep -q ":.*:" || return
+
+       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}