120 |
# ); |
# ); |
121 |
|
|
122 |
sub new { |
sub new { |
123 |
my ($pkg, $filename, $template_name, $validation_name, $template_filename) = @_; |
my ($pkg, $filename, $template_name, $validation_name, $template_filename, $safe_write) = @_; |
124 |
-e $filename or die ("$filename not found"); |
-e $filename or die ("$filename not found"); |
125 |
$template_filename ? |
$template_filename ? |
126 |
require $template_filename : eval "require Libconf::templates::$template_name" . '_template'; |
require $template_filename : eval "require Libconf::templates::$template_name" . '_template'; |
129 |
$out{template_name} = $template_name; |
$out{template_name} = $template_name; |
130 |
$validation_name and $out{validation_name} = $validation_name; |
$validation_name and $out{validation_name} = $validation_name; |
131 |
$out{atoms} = []; |
$out{atoms} = []; |
132 |
|
$safe_write and $out{timestamp} = getTimestamp($filename); |
133 |
readConf(\%out); |
readConf(\%out); |
134 |
bless \%out, $pkg; |
bless \%out, $pkg; |
135 |
\%out; |
\%out; |
136 |
} |
} |
137 |
|
|
138 |
|
sub getTimestamp { |
139 |
|
my ($filename) = @_; |
140 |
|
my @stat; |
141 |
|
@stat = stat($filename); |
142 |
|
return($stat[9]); |
143 |
|
} |
144 |
|
|
145 |
sub readConf { |
sub readConf { |
146 |
my ($out) = @_; |
my ($out) = @_; |
147 |
my $filename = $out->{filename}; |
my $filename = $out->{filename}; |
243 |
$filename ||= $out->{filename}; |
$filename ||= $out->{filename}; |
244 |
my $template_name = $out->{template_name}; |
my $template_name = $out->{template_name}; |
245 |
my @out_atoms = @{$out->{atoms}}; |
my @out_atoms = @{$out->{atoms}}; |
246 |
|
if (defined $out->{timestamp} && (getTimestamp($filename) != $out->{timestamp})) { |
247 |
|
print "Warning $filename has changed !\n"; |
248 |
|
} |
249 |
local *F; |
local *F; |
250 |
open F, "> $filename" or die "cannot create config file $filename"; |
open F, "> $filename" or die "cannot create config file $filename"; |
251 |
foreach my $atom (@out_atoms) { |
foreach my $atom (@out_atoms) { |