use POSIX;
use File::Copy;
+use Carp qw(:DEFAULT cluck);
+
use LogRotate::Common;
my $Revis = <<'ENDE';
my $p = verbose() ? __PACKAGE__ . "::find_rotatings(): " : "";
unless ( $file ) {
- carp $p . "Keine Logdatei uebergeben!\n";
+ carp( $p . "Keine Logdatei uebergeben!\n" );
return undef;
}
unless ( $target ) {
- carp $p . "Kein Dateiname fuer rotierte Logdatei uebergeben!\n";
+ carp( $p . "Kein Dateiname fuer rotierte Logdatei uebergeben!\n" );
return undef;
}
print $p . "Ermittle alle Umbenennungen und Rotationen fuer Logdatei '$file' -> '$target'...\n" if verbose() > 1;
my $f = $self->{'c'}{'logfiles'}{$file};
- my $ext = $f->{'extension'} || "";
+ my $ext = defined $f->{'extension'} ? $f->{'extension'} : "";
+ $ext = "" if $ext =~ /^\s*$/;
+ $ext = "." . $ext if $ext ne "" and $ext !~ /^\./;
- my ( $i, $pair );
+ my ( $i, $pair, $t, $t_new );
+ $t = $target . $ext;
+ $i = 0;
my $res = {
'rotate' => {},
'move' => []
};
- unless ( -f $target ) {
- $res->{'rotate'}{'from'} = $file;
- $res->{'rotate'}{'to'} = $target;
- return $res;
+ # Ziel der eigentlichen Rotation festlegen
+ if ( $file eq $t ) {
+ $t = $target . ".0" . $ext;
+ $i = 1;
+ }
+ $res->{'rotate'}{'from'} = $file;
+ $res->{'rotate'}{'to'} = $t;
+
+ # Rotationsziel gibt's nicht, okay, raus hier
+ return $res unless -f $t;
+
+ # restliche Rotationen festlegen ...
+ while ( -f $t ) {
+ $t_new = $target . "." . $i . $ext;
+ $pair = { 'from' => $t,
+ 'to' => $t_new,
+ };
+ unshift @{$res->{'move'}}, $pair;
+ $i++;
}
-
-
return $res;
my $p = verbose() ? __PACKAGE__ . "::get_logfile_target(): " : "";
unless ( $file ) {
- carp $p . "Keine Logdatei uebergeben!\n";
+ carp( $p . "Keine Logdatei uebergeben!\n" );
return undef;
}
my ( $nr, $dir, $basename, $target, $pattern );
unless ( $f ) {
- carp $p . "Keine gueltige Logdatei uebergeben!\n";
+ carp( $p . "Keine gueltige Logdatei uebergeben!\n" );
return undef;
}
return undef;
}
- $basename = $f->{'olddir'}{'expanded'} ? $f->{'olddir'}{'expanded'} . "/" . $basename : $file;
+ $target = $f->{'olddir'}{'expanded'} ? $f->{'olddir'}{'expanded'} . "/" . $basename : $file;
if ( $f->{'dateext'} ) {
$pattern = $f->{'datepattern'};
print $p . "Verwende Datumsersetzung '$pattern' fuer '$file'.\n" if verbose() > 1;
- $basename .= "." . $pattern;
- $basename = POSIX::strftime( $basename, localtime() );
+ $pattern = POSIX::strftime( $pattern, localtime() );
+ print $p . " -> '$pattern'\n" if verbose() > 3;
+ $target .= "." . $pattern;
}
print $p . "Dateiname '$target' fuer rotierte Logdatei '$file' gefunden.\n" if verbose() > 1;
next;
}
+ unless ( $self->rotate_file( $file ) ) {
+ next;
+ }
+
# Ausfuehren des Postrotate-Scripts, falls es die letzte Rotation ist, fuer die
# dieses Script gilt, oder sharedscripts nicht gesetzt ist
if ( $postscript ) {
return undef;
}
- print $p . "Ermittelte Moves: " . Dumper($res) if verbose() > 2;
+ print $p . "Ermittelte Moves: " . Dumper($rotates) if verbose() > 2;