#
# AUTHOR
# Craig Barratt <cbarratt@users.sourceforge.net>
+# Dobrica Pavlinusic <dpavlin@rot13.org>
#
# COPYRIGHT
# Copyright (C) 2007-2009 Craig Barratt
use lib "/usr/local/BackupPC/lib";
use Getopt::Std;
use BackupPC::Lib;
+use BackupPC::Search;
+
+use Data::Dump qw(dump);
+
+my $debug = $ENV{DEBUG} || 0;
die("BackupPC::Lib->new failed\n") if ( !(my $bpc = BackupPC::Lib->new) );
my %opts;
# no options currently
-if ( !getopts("", \%opts) || @ARGV < 3 ) {
+if ( !getopts("", \%opts) || @ARGV < 2 ) {
print STDERR <<EOF;
-usage: $0 archiveHost userName hosts[:num]...
+usage: $0 archiveHost userName [hosts[:num]...]
EOF
exit(1);
}
+my %Conf = $bpc->Conf();
+
+my $dbh = BackupPC::Search::get_dbh;
+
+my $sth = $dbh->prepare(qq{
+ select
+ backups.id as backup_id,
+ hosts.name as host,
+ backups.num as num,
+ inc_size,
+ size,
+ inc_deleted
+ from backups
+ join hosts on hosts.id = hostid
+ where hosts.name = ?
+});
+
my $Hosts = $bpc->HostInfoRead();
-my $ArchiveHost = $ARGV[0];
-my $UserName = $ARGV[1];
+my $ArchiveHost = shift @ARGV;
+my $UserName = shift @ARGV;
+my @HostFilter = @ARGV;
my $TopDir = $bpc->{Conf}{TopDir};
if ( !defined($Hosts->{$ArchiveHost}) ) {
$bpc->ConfigRead($ArchiveHost);
my(@HostList, @BackupList);
-for ( my $i = 2 ; $i < @ARGV ; $i++ ) {
- my ($host,$num) = split(/:/,$ARGV[$i],2);
- if ( !defined($Hosts->{$host}) ) {
- print(STDERR "$0: host $host doesn't exist... quitting\n");
- exit(1);
- }
- my @backups = $bpc->BackupInfoRead($host);
- if ( !@backups ) {
- print(STDERR "$0: host $host doesn't have any backups... quitting\n");
- exit(1);
- }
- push(@HostList, $host);
- $num ||= $backups[$#backups]{num};
- push(@BackupList, $num);
+
+
+my $host_nums;
+
+foreach my $host ( keys %$Hosts ) {
+ $host = lc $host;
+ my @backups = $bpc->BackupInfoRead($host);
+ if ( !@backups ) {
+ warn "$0: host $host doesn't have any backups... skipping\n";
+ next;
+ }
+ $host_nums->{$host} = [ BackupPC::Search::host_backup_nums( $host ) ];
+}
+
+foreach ( @HostFilter ) {
+ my ($host,$num) = split(/:/,$_,2);
+ if ( !defined($Hosts->{$host}) ) {
+ print(STDERR "$0: host $host doesn't exist... quitting\n");
+ exit(1);
+ }
+ if ( defined $num ) {
+ warn "+ $host $num\n";
+ push(@HostList, $host);
+ push(@BackupList, $num);
+ } else {
+ foreach my $num ( @{ $host_nums->{$host} } ) {
+ warn "+ $host $num\n";
+ push(@HostList, $host);
+ push(@BackupList, $num);
+ }
+ }
}
+if ( ! @HostFilter ) {
+ foreach my $host ( keys %$host_nums ) {
+ foreach my $num ( @{ $host_nums->{$host} } ) {
+ warn "+ $host $num\n";
+ push(@HostList, $host);
+ push(@BackupList, $num);
+ }
+ }
+}
+
+warn "# HostList=",dump(@HostList),"\n";
+warn "# BackupList=",dump(@BackupList),"\n";
+
+$dbh->disconnect;
+
my $ReqFileName;
for ( my $i = 0 ; ; $i++ ) {
$ReqFileName="archiveReq.$$.$i";
compext => $bpc->{Conf}{ArchiveComp} eq 'none' ? ''
: ($bpc->{Conf}{ArchiveComp} eq 'gzip' ? '.gz' : '.bz2'),
parfile => $bpc->{Conf}{ArchivePar},
- splitsize => '0000000',
+ splitsize => $bpc->{Conf}{ArchiveSplit} . '000000', # mb -> bytes
host => $ArchiveHost,
HostList => \@HostList,
BackupList => \@BackupList,