keep uci_set from saving things that have not changed
[openwrt/svn-archive/archive.git] / package / base-files / files / lib / config / uci.sh
index e1571cc89107d8c8b75982f6741377e39f7e8947..e0293363b3a6e7abef55850b3fb4e00a3597b83d 100644 (file)
@@ -39,16 +39,23 @@ uci_apply_defaults() {(
        uci commit
 )}
 
+uci_call_awk() {
+       local CMD="$*"
+       awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF
+BEGIN {
+       $CMD
+}
+EOF
+}
+
 uci_do_update() {
        local FILENAME="$1"
        local UPDATE="$2"
-       awk -f $UCI_ROOT/lib/config/uci-update.awk -f - <<EOF
-BEGIN {
-       config = read_file("$FILENAME")
+       uci_call_awk "
+       config = read_file(\"$FILENAME\")
        $UPDATE
        print config
-}
-EOF
+"
 }
 
 uci_add_update() {
@@ -69,9 +76,12 @@ uci_set() {
 
        ( # spawn a subshell so you don't mess up the current environment
                uci_load "$PACKAGE"
-               config_get type "$CONFIG" TYPE
-               [ -z "$type" ]
-       ) || uci_add_update "$PACKAGE" "CONFIG_SECTION='$CONFIG'${N}option '$OPTION' '$VALUE'"
+               config_get OLDVAL "$CONFIG" "$OPTION"
+               if [ "$OLDVAL" != "$VALUE" ]; then
+                       config_get type "$CONFIG" TYPE
+                       [ -z "$type" ]
+               fi
+       ) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"
 }
 
 uci_add() {
@@ -114,19 +124,19 @@ uci_commit() {
                
                # replace handlers
                config() {
-                       append updatestr "config = update_config(config, \"@$2=$1\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"
                }
                option() {
-                       append updatestr "config = update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"
                }
                config_rename() {
-                       append updatestr "config = update_config(config, \"&$1=$2\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"
                }
                config_unset() {
-                       append updatestr "config = update_config(config, \"-$1.$2\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"
                }
                config_clear() {
-                       append updatestr "config = update_config(config, \"-$1\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"-$1\")" "$N"
                }
                
                . "/tmp/.uci/$PACKAGE_BASE"