From 989f8be8c3cd3338da284491e35851d4f7e79435 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Thu, 22 Aug 2024 03:19:45 -0400 Subject: [PATCH] read_recap: Delete from `%config` any status values missing from recap --- ddclient.in | 8 +++++++- t/read_recap.pl | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ddclient.in b/ddclient.in index 743993f..3ddd4a5 100755 --- a/ddclient.in +++ b/ddclient.in @@ -1633,6 +1633,7 @@ sub read_recap { %opt = (); $saved_recap = _read_config(\%recap, $globals, "##\\s*$program-$version\\s*", $file); %opt = %saved; + $recap{$_} //= {} for keys(%config); for my $h (keys(%recap)) { next if !exists($config{$h}); # Only status variables are copied from `%recap` into `%config` because the recap should @@ -1647,8 +1648,13 @@ sub read_recap { # `$recap{$h}{'status-ipv4'}` directly. for my $v (qw(atime mtime wtime ipv4 ipv6 status-ipv4 status-ipv6 warned-min-interval warned-min-error-interval)) { - $config{$h}{$v} = $recap{$h}{$v} if exists($recap{$h}{$v}); + if (exists($recap{$h}{$v})) { + $config{$h}{$v} = $recap{$h}{$v}; + } else { + delete($config{$h}{$v}); + } } + delete($recap{$h}) if !%{$recap{$h}}; } } ###################################################################### diff --git a/t/read_recap.pl b/t/read_recap.pl index ebec050..240bb8b 100644 --- a/t/read_recap.pl +++ b/t/read_recap.pl @@ -137,7 +137,6 @@ my @test_cases = ( 'warned-min-error-interval' => $DOES_NOT_EXIST, # `var_a` should remain untouched. }}, - want_config_changes_TODO => "longstanding bug", }, { desc => "non-recap vars are not loaded to %recap or copied to %config",