Skip to content

Commit

Permalink
Item13063: Log changes made by tools/configure
Browse files Browse the repository at this point in the history
Create and pass a logger instance in through the params hash.
  • Loading branch information
gac410 committed Dec 9, 2014
1 parent 7de1c98 commit 8b95668
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 14 deletions.
35 changes: 21 additions & 14 deletions core/lib/Foswiki/Configure/Wizards/Save.pm
Expand Up @@ -130,7 +130,14 @@ Returns a wizard report.

sub save {
my ( $this, $reporter ) = @_;
my $session = $Foswiki::Plugins::SESSION;

my $logger;
if ($Foswiki::Plugins::SESSION) {
$logger = $Foswiki::Plugins::SESSION->logger;
}
elsif ( defined $this->param('logger') ) {
$logger = $this->param('logger');
}

# Sort keys so it's possible to diff LSC files.
local $Data::Dumper::Sortkeys = 1;
Expand Down Expand Up @@ -270,7 +277,7 @@ sub save {
if (%orig_content) {
$reporter->NOTE('| *Key* | *Old* | *New* |');
_compareConfigs( $root, \%orig_content, \%Foswiki::cfg,
$reporter, '' );
$reporter, $logger, '' );
}
}
else {
Expand All @@ -283,9 +290,7 @@ sub save {
# $reporter is set to undef when recursing into a hash below the
# Foswiki::Configure::Value level
sub _compareConfigs {
my ( $spec, $o, $n, $reporter, $keypath ) = @_;

my $session = $Foswiki::Plugins::SESSION;
my ( $spec, $o, $n, $reporter, $logger, $keypath ) = @_;

my $old = Foswiki::Configure::Reporter::uneval($o);
my $new = Foswiki::Configure::Reporter::uneval($n);
Expand All @@ -301,7 +306,7 @@ sub _compareConfigs {
}
if ( $old ne $new ) {
$old = "($vs->{default})" if $old eq 'undef' && $vs->{default};
_logAndReport( $reporter, $session, $keypath, $old, $new );
_logAndReport( $reporter, $logger, $keypath, $old, $new );
return 0;
}
return 1;
Expand All @@ -311,7 +316,7 @@ sub _compareConfigs {
if ( $o && $n && ref($o) ne ref($n) ) {

# Both set, but different types. Stop the recursion here.
_logAndReport( $reporter, $session, $keypath, $old, $new );
_logAndReport( $reporter, $logger, $keypath, $old, $new );
return 0;
}

Expand All @@ -328,6 +333,7 @@ sub _compareConfigs {
$o->{$k},
$n->{$k},
$reporter,
$logger,
$keypath . '{'
. Foswiki::Configure::LoadSpec::protectKey($k) . '}'
)
Expand All @@ -343,17 +349,18 @@ sub _compareConfigs {
$o = [] unless defined $o;
$n = [] unless defined $n;
if ( scalar(@$o) != scalar(@$n) ) {
_logAndReport( $reporter, $session, $keypath, $old, $new );
_logAndReport( $reporter, $logger, $keypath, $old, $new );
return 0;
}
for ( my $i = 0 ; $i < scalar(@$o) ; $i++ ) {
unless (
_compareConfigs(
$spec, $o->[$i], $n->[$i], $reporter, "$keypath\[$i\]"
$spec, $o->[$i], $n->[$i],
$reporter, $logger, "$keypath\[$i\]"
)
)
{
_logAndReport( $reporter, $session, $keypath, $old, $new );
_logAndReport( $reporter, $logger, $keypath, $old, $new );
return 0;
}
}
Expand All @@ -364,25 +371,25 @@ sub _compareConfigs {
|| ( defined $o && !defined $n )
|| $o ne $n )
{
_logAndReport( $reporter, $session, $keypath, $old, $new );
_logAndReport( $reporter, $logger, $keypath, $old, $new );
return 0;
}

return 1;
}

sub _logAndReport {
my ( $reporter, $session, $keypath, $old, $new ) = @_;
my ( $reporter, $logger, $keypath, $old, $new ) = @_;

$session->logger->log(
$logger->log(
{
level => 'notice',
action => 'save',
setting => $keypath,
newvalue => $new,
oldvalue => $old,
}
) if ( defined $session );
) if ( defined $logger );

# Truncate the change for the UI
$old = Foswiki::Configure::Reporter::ellipsis( $old, CHANGE_LIMIT );
Expand Down
36 changes: 36 additions & 0 deletions core/tools/configure
Expand Up @@ -323,6 +323,12 @@ if ( $reporter->has_level('errors') ) {

print $reporter->stringify();

# Create a Logger instance and insert in to params hash
# Note: The configure should be bootstrapped before this step so that the
# file system paths for the logger have been defined.

_set_logger($params);

# Perform the action

if ($action) {
Expand Down Expand Up @@ -353,6 +359,36 @@ if ( $actions{save} ) {
_reply($response);
}

=begin TML
---++ ObjectMethod _set_logger()
This code copied from Foswiki.pm, with changes. It inserts the Logger into the params hash.
=cut

sub _set_logger {
my $params = shift;

unless ( $params->{logger} ) {
if ( $Foswiki::cfg{Log}{Implementation} eq 'none' ) {
$params->{logger} = Foswiki::Logger->new();
}
else {
eval "require $Foswiki::cfg{Log}{Implementation}";
if ($@) {
print STDERR "Logger load failed: $@";
$params->{logger} = Foswiki::Logger->new();
}
else {
$params->{logger} = $Foswiki::cfg{Log}{Implementation}->new();
}
}
}

return;
}

1;
__END__
Expand Down

0 comments on commit 8b95668

Please sign in to comment.