# $Id: dirvish-expire.pl,v 12.0 2004/02/25 02:42:14 jw Exp $ $Name: Dirvish-1_2 $ $VERSION = ('$Name: Dirvish-1_2 $' =~ /Dirvish/i) ? ('$Name: Dirvish-1_2 $' =~ m/^.*:\s+dirvish-(.*)\s*\$$/i)[0] : '1.1.2 patch' . ('$Id: dirvish-expire.pl,v 12.0 2004/02/25 02:42:14 jw Exp $' =~ m/^.*,v(.*:\d\d)\s.*$/)[0]; $VERSION =~ s/_/./g; ######################################################################### # # # Copyright 2002 and $Date: 2004/02/25 02:42:14 $ # Pegasystems Technologies and J.W. Schultz # # # # Licensed under the Open Software License version 2.0 # # # # This program is free software; you can redistribute it # # and/or modify it under the terms of the Open Software # # License, version 2.0 by Lauwrence E. Rosen. # # # # This program is distributed in the hope that it will be # # useful, but WITHOUT ANY WARRANTY; without even the implied # # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # # PURPOSE. See the Open Software License for details. # # # ######################################################################### use Time::ParseDate; use POSIX qw(strftime); use File::Find; use Getopt::Long; sub loadconfig; sub check_expire; sub findop; sub imsort; sub seppuku; sub usage { my $message = shift(@_); length($message) and print STDERR $message, "\n\n"; print STDERR < \&usage, version => sub { print STDERR "dirvish version $VERSION\n"; exit(0); }, }; if ($CONFDIR =~ /dirvish$/ && -f "$CONFDIR.conf") { loadconfig(undef, "$CONFDIR.conf", $Options); } elsif (-f "$CONFDIR/master.conf") { loadconfig(undef, "$CONFDIR/master.conf", $Options); } elsif (-f "$CONFDIR/dirvish.conf") { seppuku 250, < $expire_time and return 0; return 1; } sub findop { if ($_ eq 'tree') { $File::Find::prune = 1; return 0; } if ($_ eq 'summary') { my $summary; my ($etime, $path); $path = $File::Find::dir; $summary = loadconfig('R', $File::Find::name); $status = check_expire($summary, $expire_time); $status < 0 and return; $$summary{vault} && $$summary{branch} && $$summary{Image} or return; if ($status == 0) { $$summary{Status} =~ /^success/ && -d ($path . '/tree') and ++$unexpired{$$summary{vault}}{$$summary{branch}}; return; } -d ($path . ($$Options{tree} ? '/tree': undef)) or return; push (@expires, { vault => $$summary{vault}, branch => $$summary{branch}, client => $$summary{client}, tree => $$summary{tree}, image => $$summary{Image}, created => $$summary{'Backup-complete'}, expire => $$summary{Expire}, status => $$summary{Status}, path => $path, } ); } } ## WARNING: don't mess with the sort order, it is needed so that if ## WARNING: all images are expired the newest will be retained. sub imsort { $$a{vault} cmp $$b{vault} || $$a{branch} cmp $$b{branch} || $$a{created} cmp $$b{created}; }