From 925ed2975de48562445c3aeb56d2d245604e18c1 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Thu, 14 Dec 2006 11:41:02 +0000 Subject: [PATCH] kes Complete hopefully the last of the copyright transfer changes. kes Separate NumVolumes in SD to NumReadVolumes and NumWrite volumes so that migration writing to multiple volumes doesn't mess up reading Volumes. This should fix bug #720 -- multivol migration fails. kes Make migration SQL look only for Type='B' jobs to migrate. This should fix bug #724 jobs getting migrated twice. kes Convert remaining dev_cap(dev, ...) to use dev->has_cap(). kes Implement dev->clear_cap() and dev->set_cap() methods. kes Turn off disk seeking on restore for DVDs since I am not 100% sure it works. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3802 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/ChangeLog | 38 + bacula/examples/reports/baculareport.pl | 950 +- bacula/src/console2.glade | 9104 ++++++++--------- bacula/src/dird/migrate.c | 7 +- bacula/src/jcr.h | 5 +- bacula/src/stored/acquire.c | 12 +- bacula/src/stored/block.c | 4 +- bacula/src/stored/btape.c | 38 +- bacula/src/stored/butil.c | 3 +- bacula/src/stored/dev.c | 19 +- bacula/src/stored/dev.h | 5 +- bacula/src/stored/device.c | 6 +- bacula/src/stored/label.c | 8 +- bacula/src/stored/mac.c | 4 +- bacula/src/stored/mount.c | 8 +- bacula/src/stored/parse_bsr.c | 8 +- bacula/src/stored/read.c | 4 +- bacula/src/version.h | 8 +- bacula/src/win32/compat/winapi.c | 39 +- bacula/src/win32/patches/mt.patch | 4 +- bacula/src/win32/stored/baculasd/winabout.h | 38 +- bacula/src/win32/stored/baculasd/winbacula.h | 2 +- bacula/src/win32/stored/baculasd/winmain.cpp | 41 +- .../src/win32/stored/baculasd/winservice.cpp | 2 +- bacula/src/win32/stored/baculasd/winservice.h | 2 +- bacula/src/win32/stored/baculasd/winstat.cpp | 33 +- bacula/src/win32/stored/baculasd/winstat.h | 32 +- bacula/src/win32/stored/baculasd/wintray.cpp | 2 +- bacula/src/win32/stored/baculasd/wintray.h | 2 +- bacula/technotes-1.39 | 11 + 30 files changed, 5276 insertions(+), 5163 deletions(-) diff --git a/bacula/ChangeLog b/bacula/ChangeLog index 7809b0b400..6121868295 100644 --- a/bacula/ChangeLog +++ b/bacula/ChangeLog @@ -2,6 +2,44 @@ General: +14Dec06 +kes Complete hopefully the last of the copyright transfer changes. +kes Separate NumVolumes in SD to NumReadVolumes and NumWrite volumes so + that migration writing to multiple volumes doesn't mess up reading + Volumes. This should fix bug #720 -- multivol migration fails. +kes Make migration SQL look only for Type='B' jobs to migrate. This should + fix bug #724 jobs getting migrated twice. +kes Convert remaining dev_cap(dev, ...) to use dev->has_cap(). +kes Implement dev->clear_cap() and dev->set_cap() methods. +kes Turn off disk seeking on restore for DVDs since I am not 100% + sure it works. +13Dec06 +kes Implement code that should properly set that a job was migrated, + if the migration was successful even if there were no file to + migrate. +kes Apply Richard's patch to fix building or filed/restore.c without + OpenSSL support. +kes Ensure that at least one block is written by the SD even if the + FD dies or fails -- should fix bug #728. +kes Convert stored/record.c ASSERT into a soft fail if the length of + a record is too insanely long. This should fix bug #??? +12Dec06 +kes Fix automatic labeling of File volumes, which was broken by new + removable device code. +10Dec06 +kes Remove typedef uLong for HP in baconfig.h. It broke things. +lf Fix job byte reporting -- the digest code runs in verify.c and + increases this value. The better solution is to digest the + stream as we receive it, thus removing the need to re-read + from disk at all, but that requires more extensive and + potentially destabilizing changes. +lf This commit fixes backup and restore of HFS+ resource forks. +lf Add a long-missing 'break' statement in HFS+ attribute + handling that resulted in restore failures. +09Dec06 +ebl Fix runscript to always execute command after all job type. + +Version 1.39.30 released: 08Dec06 kes Mark build-depkgs-mingw3 executable in configure process. kes Update autoconf/config.h.in to include LOCALEDIR diff --git a/bacula/examples/reports/baculareport.pl b/bacula/examples/reports/baculareport.pl index fef359b289..bf014a0376 100755 --- a/bacula/examples/reports/baculareport.pl +++ b/bacula/examples/reports/baculareport.pl @@ -78,20 +78,20 @@ my $out_cutmarks = ""; Getopt::Long::Configure("bundling"); GetOptions("host=s"=>\$db_host, - "user|U=s"=>\$db_user, - "database|D=s"=>\$db_database, - "password|P=s"=>\$db_pass, - "debug=i"=>\$debug, - "help|h"=>\$do_usage, - "version|V"=>\$do_version, - "subpools|s"=>\$out_subpools, - "subpool-details"=>\$out_subpooldetails, - "pool-details|d"=>\$out_pooldetails, - "pool-bargraph!"=>\$out_bargraph, - "bar-length|l=i"=>\$out_bargraphlen, - "cutmarks|c"=>\$out_cutmarks, - "subpool-bargraph"=>\$out_subbargraph - ); + "user|U=s"=>\$db_user, + "database|D=s"=>\$db_database, + "password|P=s"=>\$db_pass, + "debug=i"=>\$debug, + "help|h"=>\$do_usage, + "version|V"=>\$do_version, + "subpools|s"=>\$out_subpools, + "subpool-details"=>\$out_subpooldetails, + "pool-details|d"=>\$out_pooldetails, + "pool-bargraph!"=>\$out_bargraph, + "bar-length|l=i"=>\$out_bargraphlen, + "cutmarks|c"=>\$out_cutmarks, + "subpool-bargraph"=>\$out_subbargraph + ); debug_out(100, "I've got host: $db_host @@ -150,10 +150,10 @@ $dbconn .= "\@" . $db_host if $db_host; debug_out(40, "DBI connect with $dbconn"); my $h_db = DBI->connect($dbconn, - $db_user, $db_pass, - { PrintError => 0, - AutoCommit => 1 } - ) || die DBI::errstr; + $db_user, $db_pass, + { PrintError => 0, + AutoCommit => 1 } + ) || die DBI::errstr; debug_out(10, "Have database connection $h_db"); debug_out(100, "creating temp tables..."); @@ -178,7 +178,7 @@ debug_out(40, "Getting Pool Names."); my $h_st = $h_db->prepare("SELECT Name,PoolId FROM Pool ORDER BY Name") || debug_abort(0, "Couldn't get Pool Information.", $h_db->errstr()); $h_st->execute() || debug_abort(0, "Couldn't query Pool information.", - $h_db->errstr()); + $h_db->errstr()); my $pools; while ($pools=$h_st->fetchrow_hashref()) { process_pool($pools->{Name}, $pools->{PoolId}) @@ -521,7 +521,7 @@ later version, apply. See http://www.fsf.org. You can contact the author using the above email address. I will try to answer any question concerning this script, but still - no promises! -Bacula is (C) copyright 2000-2005 Kern Sibbald. See http://www.bacula.org. +Bacula is (C) copyright 2000-2006 Free Software Foundation Europe e.V. See http://www.bacula.org. (Bacula consulting available.) @@ -529,18 +529,18 @@ Bacula is (C) copyright 2000-2005 Kern Sibbald. See http://www.bacula.org. sub process_pool { my %pool = (BytesTotal=>0, - VolumesTotal=>0, - VolumesFull=>0, - VolumesEmpty=>0, - VolumesPartly=>0, - VolumesAway=>0, - VolumesOther=>0, - VolumesOff=>0, - VolumesCleaning=>"Not counted", - BytesFree=>0, - GuessReliability=>0, - AvgFullUsesDefaults=>"" - ); + VolumesTotal=>0, + VolumesFull=>0, + VolumesEmpty=>0, + VolumesPartly=>0, + VolumesAway=>0, + VolumesOther=>0, + VolumesOff=>0, + VolumesCleaning=>"Not counted", + BytesFree=>0, + GuessReliability=>0, + AvgFullUsesDefaults=>"" + ); debug_out(10, "Working on Pool $pools->{Name}."); $pool{Name} = shift; $pool{Id} = shift; @@ -549,294 +549,294 @@ sub process_pool { debug_out(30, "Pool $pool{Name} is Id $pool{Id}."); my $h_st = $h_db->prepare("SELECT MediaType FROM alrep_M WHERE PoolId = $pool{Id} ORDER BY MediaType") || - debug_abort(0, - "Can't query Media table.", $h_st->errstr()); + debug_abort(0, + "Can't query Media table.", $h_st->errstr()); $h_st->execute() || - debug_abort(0, - "Can't get Media Information", $h_st->errstr()); + debug_abort(0, + "Can't get Media Information", $h_st->errstr()); while (my $mt=$h_st->fetchrow_hashref()) { # In this loop, we process one media type in a pool - my %subpool = (MediaType=>$mt->{MediaType}); - debug_out(45, "Working on MediaType $mt->{MediaType}."); - my $h_qu = - $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes," . - "STD(VolBytes) AS Std,AVG(VolBytes) AS Avg " . - "FROM Media WHERE (PoolId=$pool{Id}) AND " . - "(MediaType=" . $h_db->quote($mt->{MediaType}) . - ") AND (VolStatus=\'Full\')") - || debug_abort(0, - "Can't query Media Summary Information by MediaType.", - $h_db->errstr()); - debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); - debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Full"); - debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", - $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); - $h_qu->execute(); - debug_out(48, "Result:", $h_qu->rows(), "Rows."); + my %subpool = (MediaType=>$mt->{MediaType}); + debug_out(45, "Working on MediaType $mt->{MediaType}."); + my $h_qu = + $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes," . + "STD(VolBytes) AS Std,AVG(VolBytes) AS Avg " . + "FROM Media WHERE (PoolId=$pool{Id}) AND " . + "(MediaType=" . $h_db->quote($mt->{MediaType}) . + ") AND (VolStatus=\'Full\')") + || debug_abort(0, + "Can't query Media Summary Information by MediaType.", + $h_db->errstr()); + debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); + debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Full"); + debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", + $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); + $h_qu->execute(); + debug_out(48, "Result:", $h_qu->rows(), "Rows."); # Don't know why, but otherwise the handle access # methods result in a warning... - $^W = 0; - if (1 == $h_qu->rows()) { - if (my $qr = $h_qu->fetchrow_hashref) { - debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); - $subpool{VolumesFull} = $qr->{Nr}; - $subpool{VolumesTotal} += $qr->{Nr}; - $subpool{BytesTotal} = $qr->{Bytes} if (defined($qr->{Bytes})); - if (defined($qr->{Bytes}) && (0 < $qr->{Bytes}) && - (0 < $qr->{Nr})) { - $subpool{AvgFullBytes} = int($qr->{Bytes} / $qr->{Nr}); - } else { - $subpool{AvgFullBytes} = get_default_bytes($mt->{MediaType}); - $subpool{AvgFullUsesDefaults} = 1; - } - if (defined($qr->{Std}) && - defined($qr->{Avg}) && - (0 < $qr->{Avg})) { -# $subpool{GuessReliability} = 100-(100*$qr->{Std}/$qr->{Avg}); - $subpool{GuessReliability} = - 100 - # 100 Percent minus... - ( 100 * # Percentage of - ( $qr->{Std}/$qr->{Avg} ) * # V - ( 1 - 1 / $qr->{Nr} ) # ... the more tapes - # the better the guess - ); - } else { - $subpool{GuessReliability} = 0; - } - } else { - debug_out(1, "Can't get Media Summary Information by MediaType.", - $h_qu->errstr()); - $subpool{VolumesFull} = 0; - $subpool{BytesTotal} = 0; - $subpool{GuessReliability} = 0; - $subpool{AvgFullBytes} = -1; - } - } else { - debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); - } - $^W = 1; + $^W = 0; + if (1 == $h_qu->rows()) { + if (my $qr = $h_qu->fetchrow_hashref) { + debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); + $subpool{VolumesFull} = $qr->{Nr}; + $subpool{VolumesTotal} += $qr->{Nr}; + $subpool{BytesTotal} = $qr->{Bytes} if (defined($qr->{Bytes})); + if (defined($qr->{Bytes}) && (0 < $qr->{Bytes}) && + (0 < $qr->{Nr})) { + $subpool{AvgFullBytes} = int($qr->{Bytes} / $qr->{Nr}); + } else { + $subpool{AvgFullBytes} = get_default_bytes($mt->{MediaType}); + $subpool{AvgFullUsesDefaults} = 1; + } + if (defined($qr->{Std}) && + defined($qr->{Avg}) && + (0 < $qr->{Avg})) { +# $subpool{GuessReliability} = 100-(100*$qr->{Std}/$qr->{Avg}); + $subpool{GuessReliability} = + 100 - # 100 Percent minus... + ( 100 * # Percentage of + ( $qr->{Std}/$qr->{Avg} ) * # V + ( 1 - 1 / $qr->{Nr} ) # ... the more tapes + # the better the guess + ); + } else { + $subpool{GuessReliability} = 0; + } + } else { + debug_out(1, "Can't get Media Summary Information by MediaType.", + $h_qu->errstr()); + $subpool{VolumesFull} = 0; + $subpool{BytesTotal} = 0; + $subpool{GuessReliability} = 0; + $subpool{AvgFullBytes} = -1; + } + } else { + debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); + } + $^W = 1; # Here, Full Media are done - debug_out(15, "Full Media done. Now Empty ones."); - $h_qu = - $h_db->prepare("SELECT COUNT(*) AS Nr " . - "FROM Media WHERE (PoolId=$pool{Id}) AND " . - "(MediaType=" . $h_db->quote($mt->{MediaType}) . - ") AND ((VolStatus=\'Purged\') OR " . - "(VolStatus=\'Recycle\'))") - || debug_abort(0, - "Can't query Media Summary Information by MediaType.", - $h_db->errstr()); - debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); - debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); - debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", - $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); - $h_qu->execute(); - debug_out(48, "Result:", $h_qu->rows(), "Rows."); + debug_out(15, "Full Media done. Now Empty ones."); + $h_qu = + $h_db->prepare("SELECT COUNT(*) AS Nr " . + "FROM Media WHERE (PoolId=$pool{Id}) AND " . + "(MediaType=" . $h_db->quote($mt->{MediaType}) . + ") AND ((VolStatus=\'Purged\') OR " . + "(VolStatus=\'Recycle\'))") + || debug_abort(0, + "Can't query Media Summary Information by MediaType.", + $h_db->errstr()); + debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); + debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); + debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", + $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); + $h_qu->execute(); + debug_out(48, "Result:", $h_qu->rows(), "Rows."); # Don't know why, but otherwise the handle access # methods result in a warning... - $^W = 0; - if (1 == $h_qu->rows()) { - if (my $qr = $h_qu->fetchrow_hashref) { - debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); - $subpool{VolumesEmpty} = $qr->{Nr}; - $subpool{VolumesTotal} += $qr->{Nr}; - if (($subpool{AvgFullBytes} > 0) && ($qr->{Nr} > 0)) { - $subpool{BytesFreeEmpty} = $qr->{Nr} * $subpool{AvgFullBytes}; - } else { - $subpool{BytesFreeEmpty} = -1; - } - } else { - debug_out(1, "Can't get Media Summary Information by MediaType.", - $h_qu->errstr()); - $subpool{VolumesEmpty} = 0; - $subpool{BytesFreeEmpty} = 0; - } - } else { - debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); - } - $^W = 1; + $^W = 0; + if (1 == $h_qu->rows()) { + if (my $qr = $h_qu->fetchrow_hashref) { + debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); + $subpool{VolumesEmpty} = $qr->{Nr}; + $subpool{VolumesTotal} += $qr->{Nr}; + if (($subpool{AvgFullBytes} > 0) && ($qr->{Nr} > 0)) { + $subpool{BytesFreeEmpty} = $qr->{Nr} * $subpool{AvgFullBytes}; + } else { + $subpool{BytesFreeEmpty} = -1; + } + } else { + debug_out(1, "Can't get Media Summary Information by MediaType.", + $h_qu->errstr()); + $subpool{VolumesEmpty} = 0; + $subpool{BytesFreeEmpty} = 0; + } + } else { + debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); + } + $^W = 1; # Here, Empty Volumes are processed. - debug_out(15, "Empty Media done. Now Partly filled ones."); - $h_qu = - $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . - "FROM Media WHERE (PoolId=$pool{Id}) AND " . - "(MediaType=" . $h_db->quote($mt->{MediaType}) . - ") AND (VolStatus=\'Append\')") - || debug_abort(0, - "Can't query Media Summary Information by MediaType.", - $h_db->errstr()); - debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); - debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Append"); - debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", - $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); - $h_qu->execute(); - debug_out(48, "Result:", $h_qu->rows(), "Rows."); + debug_out(15, "Empty Media done. Now Partly filled ones."); + $h_qu = + $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . + "FROM Media WHERE (PoolId=$pool{Id}) AND " . + "(MediaType=" . $h_db->quote($mt->{MediaType}) . + ") AND (VolStatus=\'Append\')") + || debug_abort(0, + "Can't query Media Summary Information by MediaType.", + $h_db->errstr()); + debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); + debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Append"); + debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", + $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); + $h_qu->execute(); + debug_out(48, "Result:", $h_qu->rows(), "Rows."); # Don't know why, but otherwise the handle access # methods result in a warning... - $^W = 0; - if (1 == $h_qu->rows()) { - if (my $qr = $h_qu->fetchrow_hashref) { - debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); - $subpool{VolumesPartly} = $qr->{Nr}; - $subpool{VolumesTotal} += $qr->{Nr}; - $subpool{BytesTotal} += $qr->{Bytes}; - if (($subpool{AvgFullBytes} > 0) && ($qr->{Nr} > 0)) { - $subpool{BytesFreePartly} = $qr->{Nr} * $subpool{AvgFullBytes} - $qr->{Bytes}; - $subpool{BytesFreePartly} = $qr->{Nr} if $subpool{BytesFreePartly} < 1; - } else { - $subpool{BytesFreePartly} = -1; - } - } else { - debug_out(1, "Can't get Media Summary Information by MediaType.", - $h_qu->errstr()); - $subpool{VolumesPartly} = 0; - $subpool{BytesFreePartly} = 0; - } - } else { - debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); - } - $^W = 1; + $^W = 0; + if (1 == $h_qu->rows()) { + if (my $qr = $h_qu->fetchrow_hashref) { + debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); + $subpool{VolumesPartly} = $qr->{Nr}; + $subpool{VolumesTotal} += $qr->{Nr}; + $subpool{BytesTotal} += $qr->{Bytes}; + if (($subpool{AvgFullBytes} > 0) && ($qr->{Nr} > 0)) { + $subpool{BytesFreePartly} = $qr->{Nr} * $subpool{AvgFullBytes} - $qr->{Bytes}; + $subpool{BytesFreePartly} = $qr->{Nr} if $subpool{BytesFreePartly} < 1; + } else { + $subpool{BytesFreePartly} = -1; + } + } else { + debug_out(1, "Can't get Media Summary Information by MediaType.", + $h_qu->errstr()); + $subpool{VolumesPartly} = 0; + $subpool{BytesFreePartly} = 0; + } + } else { + debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); + } + $^W = 1; # Here, Partly filled volumes are done - debug_out(15, "Partly Media done. Now Away ones."); - $h_qu = - $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . - "FROM Media WHERE (PoolId=$pool{Id}) AND " . - "(MediaType=" . $h_db->quote($mt->{MediaType}) . - ") AND ((VolStatus=\'Archive\') OR " . - "(VolStatus=\'Read-Only\'))") - || debug_abort(0, - "Can't query Media Summary Information by MediaType.", - $h_db->errstr()); - debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); - debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); - debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", - $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); - $h_qu->execute(); - debug_out(48, "Result:", $h_qu->rows(), "Rows."); + debug_out(15, "Partly Media done. Now Away ones."); + $h_qu = + $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . + "FROM Media WHERE (PoolId=$pool{Id}) AND " . + "(MediaType=" . $h_db->quote($mt->{MediaType}) . + ") AND ((VolStatus=\'Archive\') OR " . + "(VolStatus=\'Read-Only\'))") + || debug_abort(0, + "Can't query Media Summary Information by MediaType.", + $h_db->errstr()); + debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); + debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); + debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", + $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); + $h_qu->execute(); + debug_out(48, "Result:", $h_qu->rows(), "Rows."); # Don't know why, but otherwise the handle access # methods result in a warning... - $^W = 0; - if (1 == $h_qu->rows()) { - if (my $qr = $h_qu->fetchrow_hashref) { - debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); - $subpool{VolumesAway} = $qr->{Nr}; - $subpool{VolumesTotal} += $qr->{Nr}; - $subpool{BytesTotal} += $qr->{Bytes}; - } else { - debug_out(1, "Can't get Media Summary Information by MediaType.", - $h_qu->errstr()); - $subpool{VolumesAway} = 0; - } - } else { - debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); - } - $^W = 1; + $^W = 0; + if (1 == $h_qu->rows()) { + if (my $qr = $h_qu->fetchrow_hashref) { + debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); + $subpool{VolumesAway} = $qr->{Nr}; + $subpool{VolumesTotal} += $qr->{Nr}; + $subpool{BytesTotal} += $qr->{Bytes}; + } else { + debug_out(1, "Can't get Media Summary Information by MediaType.", + $h_qu->errstr()); + $subpool{VolumesAway} = 0; + } + } else { + debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); + } + $^W = 1; # Here, Away Volumes are processed. - debug_out(15, "Away Media done. Now Other ones."); - $h_qu = - $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . - "FROM Media WHERE (PoolId=$pool{Id}) AND " . - "(MediaType=" . $h_db->quote($mt->{MediaType}) . - ") AND ((VolStatus=\'Busy\') OR " . - "(VolStatus=\'Used\'))") - || debug_abort(0, - "Can't query Media Summary Information by MediaType.", - $h_db->errstr()); - debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); - debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); - debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", - $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); - $h_qu->execute(); - debug_out(48, "Result:", $h_qu->rows(), "Rows."); + debug_out(15, "Away Media done. Now Other ones."); + $h_qu = + $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . + "FROM Media WHERE (PoolId=$pool{Id}) AND " . + "(MediaType=" . $h_db->quote($mt->{MediaType}) . + ") AND ((VolStatus=\'Busy\') OR " . + "(VolStatus=\'Used\'))") + || debug_abort(0, + "Can't query Media Summary Information by MediaType.", + $h_db->errstr()); + debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); + debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); + debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", + $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); + $h_qu->execute(); + debug_out(48, "Result:", $h_qu->rows(), "Rows."); # Don't know why, but otherwise the handle access # methods result in a warning... - $^W = 0; - if (1 == $h_qu->rows()) { - if (my $qr = $h_qu->fetchrow_hashref) { - debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); - $subpool{VolumesOther} = $qr->{Nr}; - $subpool{VolumesTotal} += $qr->{Nr}; - $subpool{BytesTotal} += $qr->{Bytes}; - } else { - debug_out(1, "Can't get Media Summary Information by MediaType.", - $h_qu->errstr()); - $subpool{VolumesOther} = 0; - } - } else { - debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); - } - $^W = 1; + $^W = 0; + if (1 == $h_qu->rows()) { + if (my $qr = $h_qu->fetchrow_hashref) { + debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); + $subpool{VolumesOther} = $qr->{Nr}; + $subpool{VolumesTotal} += $qr->{Nr}; + $subpool{BytesTotal} += $qr->{Bytes}; + } else { + debug_out(1, "Can't get Media Summary Information by MediaType.", + $h_qu->errstr()); + $subpool{VolumesOther} = 0; + } + } else { + debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); + } + $^W = 1; # Here, Other Volumes are processed. - debug_out(15, "Other Media done. Now Off ones."); - $h_qu = - $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . - "FROM Media WHERE (PoolId=$pool{Id}) AND " . - "(MediaType=" . $h_db->quote($mt->{MediaType}) . - ") AND ((VolStatus=\'Disabled\') OR " . - "(VolStatus=\'Error\'))") - || debug_abort(0, - "Can't query Media Summary Information by MediaType.", - $h_db->errstr()); - debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); - debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); - debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", - $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); - $h_qu->execute(); - debug_out(48, "Result:", $h_qu->rows(), "Rows."); + debug_out(15, "Other Media done. Now Off ones."); + $h_qu = + $h_db->prepare("SELECT COUNT(*) AS Nr,SUM(VolBytes) AS Bytes " . + "FROM Media WHERE (PoolId=$pool{Id}) AND " . + "(MediaType=" . $h_db->quote($mt->{MediaType}) . + ") AND ((VolStatus=\'Disabled\') OR " . + "(VolStatus=\'Error\'))") + || debug_abort(0, + "Can't query Media Summary Information by MediaType.", + $h_db->errstr()); + debug_out(48, "Query active: ", $h_qu->{Active}?"Yes":"No"); + debug_out(45, "Now selecting Summary Information for $pool{Name}:$mt->{MediaType}:Recycle OR Purged"); + debug_out(48, "Query: ", $h_qu->{Statement}, "Params: ", + $h_qu->{NUM_OF_PARAMS}, " Rows: ", $h_qu->rows); + $h_qu->execute(); + debug_out(48, "Result:", $h_qu->rows(), "Rows."); # Don't know why, but otherwise the handle access # methods result in a warning... - $^W = 0; - if (1 == $h_qu->rows()) { - if (my $qr = $h_qu->fetchrow_hashref) { - debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); - $subpool{VolumesOff} = $qr->{Nr}; - $subpool{VolumesTotal} += $qr->{Nr}; - } else { - debug_out(1, "Can't get Media Summary Information by MediaType.", - $h_qu->errstr()); - $subpool{VolumesOff} = 0; - } - } else { - debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); - } - $^W = 1; + $^W = 0; + if (1 == $h_qu->rows()) { + if (my $qr = $h_qu->fetchrow_hashref) { + debug_out(45, "Got $qr->{Nr} and $qr->{Bytes}."); + $subpool{VolumesOff} = $qr->{Nr}; + $subpool{VolumesTotal} += $qr->{Nr}; + } else { + debug_out(1, "Can't get Media Summary Information by MediaType.", + $h_qu->errstr()); + $subpool{VolumesOff} = 0; + } + } else { + debug_out(45, "Got nothing: ", (defined($h_qu->errstr()))?$h_qu->errstr():"No error."); + } + $^W = 1; # Here, Off Volumes are processed. - if ((0 < $subpool{BytesFreeEmpty}) || - (0 < $subpool{BytesFreePartly})) { - debug_out(15, "We have a guess."); - $subpool{BytesFree} = 0; - $subpool{BytesFree} += $subpool{BytesFreeEmpty} if - (0 < $subpool{BytesFreeEmpty}); - $subpool{BytesFree} += $subpool{BytesFreePartly} if - (0 < $subpool{BytesFreePartly}); - } else { - debug_out(15, "Neither Empty nor Partly BytesFree available - no guess!"); - $subpool{BytesFree} = -1; - } - if ($subpool{AvgFullUsesDefaults}) { - debug_out(15, "Average Full Capacity calculation included defaults."); - $pool{AvgFullUsesDefaults} = 1; - } - $pool{BytesTotal} += $subpool{BytesTotal}; - $pool{VolumesTotal} += $subpool{VolumesTotal}; - $pool{VolumesFull} += $subpool{VolumesFull}; - $pool{VolumesEmpty} += $subpool{VolumesEmpty}; - $pool{VolumesPartly} += $subpool{VolumesPartly}; - $pool{VolumesAway} += $subpool{VolumesAway}; - $pool{VolumesOther} += $subpool{VolumesOther}; - $pool{VolumesOff} += $subpool{VolumesOff}; + if ((0 < $subpool{BytesFreeEmpty}) || + (0 < $subpool{BytesFreePartly})) { + debug_out(15, "We have a guess."); + $subpool{BytesFree} = 0; + $subpool{BytesFree} += $subpool{BytesFreeEmpty} if + (0 < $subpool{BytesFreeEmpty}); + $subpool{BytesFree} += $subpool{BytesFreePartly} if + (0 < $subpool{BytesFreePartly}); + } else { + debug_out(15, "Neither Empty nor Partly BytesFree available - no guess!"); + $subpool{BytesFree} = -1; + } + if ($subpool{AvgFullUsesDefaults}) { + debug_out(15, "Average Full Capacity calculation included defaults."); + $pool{AvgFullUsesDefaults} = 1; + } + $pool{BytesTotal} += $subpool{BytesTotal}; + $pool{VolumesTotal} += $subpool{VolumesTotal}; + $pool{VolumesFull} += $subpool{VolumesFull}; + $pool{VolumesEmpty} += $subpool{VolumesEmpty}; + $pool{VolumesPartly} += $subpool{VolumesPartly}; + $pool{VolumesAway} += $subpool{VolumesAway}; + $pool{VolumesOther} += $subpool{VolumesOther}; + $pool{VolumesOff} += $subpool{VolumesOff}; # not counted! -# $pool{VolumesCleaning} += $subpool{VolumesCleaning}; +# $pool{VolumesCleaning} += $subpool{VolumesCleaning}; - $pool{BytesFree} += $subpool{BytesFree} if ($subpool{BytesFree} > 0); + $pool{BytesFree} += $subpool{BytesFree} if ($subpool{BytesFree} > 0); - debug_out(10, "Now storing sub-pool with MediaType", $subpool{MediaType}); - push @subpools, \%subpool; + debug_out(10, "Now storing sub-pool with MediaType", $subpool{MediaType}); + push @subpools, \%subpool; } $pool{MediaTypes} = \@subpools; # GuessReliability @@ -845,13 +845,13 @@ sub process_pool { my $guess_includes_defaults = 0; debug_out(10, "Summarizing Reliabilities from $subcnt sub-pools."); foreach my $rel (@{$pool{MediaTypes}}) { - $allrels += $rel->{GuessReliability} * $rel->{VolumesTotal}; + $allrels += $rel->{GuessReliability} * $rel->{VolumesTotal}; } debug_out(15, "We have $allrels summed/weighted reliabilites and $pool{VolumesTotal} Volumes."); if ($pool{VolumesTotal} > 0) { - $pool{GuessReliability} = $allrels / $pool{VolumesTotal}; + $pool{GuessReliability} = $allrels / $pool{VolumesTotal}; } else { - $pool{GuessReliability} = "N/A"; + $pool{GuessReliability} = "N/A"; } push @the_pools, \%pool; } @@ -860,105 +860,105 @@ sub output_pool { debug_out(10, "Printing pool data."); my $pool = shift; $pool->{GuessReliability} += 1000.0 if - (($pool->{GuessReliability} ne "N/A") && - $pool->{AvgFullUsesDefaults}); + (($pool->{GuessReliability} ne "N/A") && + $pool->{AvgFullUsesDefaults}); printf((($out_cutmarks)?" -" . " " x ($out_bargraphlen - 6) . "-\n": - "\n") . - "Pool%15.15s%s\n", "$pool->{Name}", - ($debug>=5)?sprintf(" %5.9s", "(" . $pool->{Id} . ")"):""); + "\n") . + "Pool%15.15s%s\n", "$pool->{Name}", + ($debug>=5)?sprintf(" %5.9s", "(" . $pool->{Id} . ")"):""); my $poolbarbytes = $pool->{BytesTotal} + $pool->{BytesFree}; if ($out_bargraph) { - print bargraph($out_bargraphlen, 2, - $poolbarbytes, - $pool->{BytesTotal}, $pool->{BytesFree}); + print bargraph($out_bargraphlen, 2, + $poolbarbytes, + $pool->{BytesTotal}, $pool->{BytesFree}); } if ($out_pooldetails) { - print(" $pool->{VolumesTotal} Volumes ($pool->{VolumesFull} F, ", - "$pool->{VolumesOther} O, $pool->{VolumesPartly} A, ", - "$pool->{VolumesEmpty} E, $pool->{VolumesAway} W, ", - "$pool->{VolumesOff} X) Total ", - human_readable("B", $pool->{BytesTotal}), - " Rel: ", human_readable("P", $pool->{GuessReliability}), - " avail.: ", human_readable("B", $pool->{BytesFree}), "\n"); + print(" $pool->{VolumesTotal} Volumes ($pool->{VolumesFull} F, ", + "$pool->{VolumesOther} O, $pool->{VolumesPartly} A, ", + "$pool->{VolumesEmpty} E, $pool->{VolumesAway} W, ", + "$pool->{VolumesOff} X) Total ", + human_readable("B", $pool->{BytesTotal}), + " Rel: ", human_readable("P", $pool->{GuessReliability}), + " avail.: ", human_readable("B", $pool->{BytesFree}), "\n"); } else { - print bargraph_legend($out_bargraphlen, 2, - $pool->{BytesTotal} + $pool->{BytesFree}, - $pool->{BytesTotal}, $pool->{BytesFree}, - $pool->{VolumesFull}, $pool->{VolumesPartly}, - $pool->{VolumesEmpty}, $pool->{GuessReliability}); + print bargraph_legend($out_bargraphlen, 2, + $pool->{BytesTotal} + $pool->{BytesFree}, + $pool->{BytesTotal}, $pool->{BytesFree}, + $pool->{VolumesFull}, $pool->{VolumesPartly}, + $pool->{VolumesEmpty}, $pool->{GuessReliability}); } if ($out_subpools) { - debug_out(10, "Printing details:", $#{$pool->{MediaTypes}}+1, "MediaTypes"); - if (0 < scalar($pool->{MediaTypes})) { - print " Details by Mediatype:\n"; - foreach my $i (@{$pool->{MediaTypes}}) { - debug_out(15, "Media Type $i->{MediaType}"); - $i->{GuessReliability} += 1000.0 if ($i->{AvgFullUsesDefaults}); - print(" $i->{MediaType} ($i->{VolumesFull} F, ", - "$i->{VolumesOther} O, $i->{VolumesPartly} A, ", - "$i->{VolumesEmpty} E, $i->{VolumesAway} W, " , - "$i->{VolumesOff} X) Total ", - human_readable("B", $i->{BytesTotal}), "\n"); - if ($out_subbargraph) { - print bargraph($out_bargraphlen - 3, 5, - $poolbarbytes, - $i->{BytesTotal}, - $i->{BytesFree}); - } - if ($out_subpooldetails) { - print " Avg, avail. Partly, Empty, Total, Rel.: ", - ($i->{AvgFullBytes} > 0)?human_readable("B", $i->{AvgFullBytes}):"N/A", " ", - ($i->{BytesFreePartly} > 0)?human_readable("B", $i->{BytesFreePartly}):"N/A", " ", - ($i->{BytesFreeEmpty} > 0)?human_readable("B", $i->{BytesFreeEmpty}):"N/A", " ", - ($i->{BytesFree} > 0)?human_readable("B", $i->{BytesFree}):"N/A", " ", - human_readable("P", $i->{GuessReliability}), "\n"; - } else { - print bargraph_legend($out_bargraphlen - 3, 5, - $poolbarbytes, - $i->{BytesTotal}, - $i->{BytesFree}, - $i->{VolumesFull}, - $i->{VolumesPartly}, - $i->{VolumesEmpty}, - $i->{GuessReliability} - ) if ($out_subbargraph); - } - } - } + debug_out(10, "Printing details:", $#{$pool->{MediaTypes}}+1, "MediaTypes"); + if (0 < scalar($pool->{MediaTypes})) { + print " Details by Mediatype:\n"; + foreach my $i (@{$pool->{MediaTypes}}) { + debug_out(15, "Media Type $i->{MediaType}"); + $i->{GuessReliability} += 1000.0 if ($i->{AvgFullUsesDefaults}); + print(" $i->{MediaType} ($i->{VolumesFull} F, ", + "$i->{VolumesOther} O, $i->{VolumesPartly} A, ", + "$i->{VolumesEmpty} E, $i->{VolumesAway} W, " , + "$i->{VolumesOff} X) Total ", + human_readable("B", $i->{BytesTotal}), "\n"); + if ($out_subbargraph) { + print bargraph($out_bargraphlen - 3, 5, + $poolbarbytes, + $i->{BytesTotal}, + $i->{BytesFree}); + } + if ($out_subpooldetails) { + print " Avg, avail. Partly, Empty, Total, Rel.: ", + ($i->{AvgFullBytes} > 0)?human_readable("B", $i->{AvgFullBytes}):"N/A", " ", + ($i->{BytesFreePartly} > 0)?human_readable("B", $i->{BytesFreePartly}):"N/A", " ", + ($i->{BytesFreeEmpty} > 0)?human_readable("B", $i->{BytesFreeEmpty}):"N/A", " ", + ($i->{BytesFree} > 0)?human_readable("B", $i->{BytesFree}):"N/A", " ", + human_readable("P", $i->{GuessReliability}), "\n"; + } else { + print bargraph_legend($out_bargraphlen - 3, 5, + $poolbarbytes, + $i->{BytesTotal}, + $i->{BytesFree}, + $i->{VolumesFull}, + $i->{VolumesPartly}, + $i->{VolumesEmpty}, + $i->{GuessReliability} + ) if ($out_subbargraph); + } + } + } } } sub bargraph_legend { debug_out(15, "bargraph_legend called with ", join(":", @_)); my ($len, $pad, $b_all, $b_tot, $b_free, $v_total, $v_app, - $v_empty, $g_r) = @_; + $v_empty, $g_r) = @_; if ((9 == scalar(@_)) && - defined($len) && ($len >= 0) && ($len =~ /^\d+$/) && - defined($pad) && ($pad >= 0) && ($pad =~ /^\d+$/) && - defined($b_all) && ($b_all =~ /^\d+$/) && - defined($b_tot) && ($b_tot =~ /^-?\d+$/) && - defined($b_free) && ($b_free =~ /^-?\d+$/) && - defined($v_total) && ($v_total =~ /^\d+$/) && - defined($v_app) && ($v_app =~ /^\d+$/) && - defined($v_empty) && ($v_empty =~ /^\d+$/) && - ($g_r =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?/) - ) { - return "" if ( 0 == $b_all); - $b_tot = 0 if ($b_tot < 0); - $b_free = 0 if ($b_free < 0); - return "" if (0 == ($b_tot + $b_free)); - my ($ll, $lm); - my $l1 = human_readable("B", $b_tot) . " used "; - my $l2 = "Rel: " . human_readable("P", $g_r) . " free " . human_readable("B", $b_free); - $ll = $l1 . " " x ($len - length($l1) - length($l2)) . $l2; - $l1 = $v_total . " F Volumes "; - $l2 = $v_app . " A and " . $v_empty . " E Volumes"; - $lm = $l1 . " " x ($len - length($l1) - length($l2)) . $l2; - return " " x $pad . $ll . "\n" . - " " x $pad . $lm . "\n"; + defined($len) && ($len >= 0) && ($len =~ /^\d+$/) && + defined($pad) && ($pad >= 0) && ($pad =~ /^\d+$/) && + defined($b_all) && ($b_all =~ /^\d+$/) && + defined($b_tot) && ($b_tot =~ /^-?\d+$/) && + defined($b_free) && ($b_free =~ /^-?\d+$/) && + defined($v_total) && ($v_total =~ /^\d+$/) && + defined($v_app) && ($v_app =~ /^\d+$/) && + defined($v_empty) && ($v_empty =~ /^\d+$/) && + ($g_r =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?/) + ) { + return "" if ( 0 == $b_all); + $b_tot = 0 if ($b_tot < 0); + $b_free = 0 if ($b_free < 0); + return "" if (0 == ($b_tot + $b_free)); + my ($ll, $lm); + my $l1 = human_readable("B", $b_tot) . " used "; + my $l2 = "Rel: " . human_readable("P", $g_r) . " free " . human_readable("B", $b_free); + $ll = $l1 . " " x ($len - length($l1) - length($l2)) . $l2; + $l1 = $v_total . " F Volumes "; + $l2 = $v_app . " A and " . $v_empty . " E Volumes"; + $lm = $l1 . " " x ($len - length($l1) - length($l2)) . $l2; + return " " x $pad . $ll . "\n" . + " " x $pad . $lm . "\n"; } else { - debug_out(1, "bargraph_legend called without proper parameters"); - return ""; + debug_out(1, "bargraph_legend called without proper parameters"); + return ""; } } @@ -966,125 +966,125 @@ sub bargraph { debug_out(15, "bargraph called with ", join(":", @_)); my ($len, $pad, $p_all, $p_full, $p_empty) = @_; if ((5 == scalar(@_)) && - defined($len) && ($len >= 0) && ($len =~ /^\d+$/) && - defined($pad) && ($pad >= 0) && ($pad =~ /^\d+$/) && - defined($p_full) && ($p_full =~ /^-?\d+$/) && - defined($p_empty) && ($p_empty =~ /^-?\d+$/) && - defined($p_all) && ($p_all >= $p_full + $p_empty) && - ($p_all =~ /^\d+$/) - ) { - $len = 12 if ($len < 12); - $p_full = 0 if ($p_full < 0); - $p_empty = 0 if ($p_empty < 0); - debug_out(15, "bargraph: len $len all $p_all full $p_full empty $p_empty"); - return " " x $pad . "Nothing to report.\n" if (0 == $p_all); - return "" if (0 == ($p_full + $p_empty)); - my $contperbox = $p_all / $len; - my $boxfull = sprintf("%u", ($p_full / $contperbox) + 0.5); - my $boxempty = sprintf("%u", ($p_empty / $contperbox) + 0.5); - my $boxnon = $len - $boxfull - $boxempty; - debug_out(15, "bargraph: output $boxfull $boxempty $boxnon"); - $contperbox = sprintf("%f", $len / 100.0); - my $leg = "|0%"; - my $ticks = sprintf("%u", ($len-12) / 12.5); - my $be = 0; - my $now = 4; - for my $i (1..$ticks) { - debug_out(15, "Tick loop. Previous pos: $now Previous Tick: ", $i-1); - my $pct = sprintf("%f", 100.0 / ($ticks+1.0) * $i); - $be = sprintf("%u", 0.5 + ($pct * $contperbox)); - debug_out(15, "Tick $i ($pct percent) goes to pos $be. Chars per Percent: $contperbox"); - my $bl = $be - $now; - debug_out(15, "Need $bl blanks to fill up."); - $leg .= " " x $bl . sprintf("|%2u%%", 0.5 + $pct); - $now = $be + 4; - } - debug_out(15, "Fillup... Now at pos $now and $contperbox char/pct."); - $be = $len - $now - 4; - $leg .= " " x $be . "100%|"; - return " " x $pad . "#" x $boxfull . "-" x $boxempty . - " " x $boxnon . "\n" . " " x $pad . "$leg\n"; + defined($len) && ($len >= 0) && ($len =~ /^\d+$/) && + defined($pad) && ($pad >= 0) && ($pad =~ /^\d+$/) && + defined($p_full) && ($p_full =~ /^-?\d+$/) && + defined($p_empty) && ($p_empty =~ /^-?\d+$/) && + defined($p_all) && ($p_all >= $p_full + $p_empty) && + ($p_all =~ /^\d+$/) + ) { + $len = 12 if ($len < 12); + $p_full = 0 if ($p_full < 0); + $p_empty = 0 if ($p_empty < 0); + debug_out(15, "bargraph: len $len all $p_all full $p_full empty $p_empty"); + return " " x $pad . "Nothing to report.\n" if (0 == $p_all); + return "" if (0 == ($p_full + $p_empty)); + my $contperbox = $p_all / $len; + my $boxfull = sprintf("%u", ($p_full / $contperbox) + 0.5); + my $boxempty = sprintf("%u", ($p_empty / $contperbox) + 0.5); + my $boxnon = $len - $boxfull - $boxempty; + debug_out(15, "bargraph: output $boxfull $boxempty $boxnon"); + $contperbox = sprintf("%f", $len / 100.0); + my $leg = "|0%"; + my $ticks = sprintf("%u", ($len-12) / 12.5); + my $be = 0; + my $now = 4; + for my $i (1..$ticks) { + debug_out(15, "Tick loop. Previous pos: $now Previous Tick: ", $i-1); + my $pct = sprintf("%f", 100.0 / ($ticks+1.0) * $i); + $be = sprintf("%u", 0.5 + ($pct * $contperbox)); + debug_out(15, "Tick $i ($pct percent) goes to pos $be. Chars per Percent: $contperbox"); + my $bl = $be - $now; + debug_out(15, "Need $bl blanks to fill up."); + $leg .= " " x $bl . sprintf("|%2u%%", 0.5 + $pct); + $now = $be + 4; + } + debug_out(15, "Fillup... Now at pos $now and $contperbox char/pct."); + $be = $len - $now - 4; + $leg .= " " x $be . "100%|"; + return " " x $pad . "#" x $boxfull . "-" x $boxempty . + " " x $boxnon . "\n" . " " x $pad . "$leg\n"; } else { - debug_out(1, "bargrahp called without proper parameters."); - return ""; + debug_out(1, "bargrahp called without proper parameters."); + return ""; } } sub human_readable { debug_out(15, "human_readable called with ", join(":", @_)); if (2 == scalar(@_)) { - debug_out(15, "2 Params - let's see what we've got."); - my ($t, $v) = @_; + debug_out(15, "2 Params - let's see what we've got."); + my ($t, $v) = @_; SWITCH: for ($t) { - /B/ && do { - debug_out(15, "Working with Bytes."); - my $d = 'B'; - if ($v > 1024) { - $v /= 1024; - $d = 'kB'; - } - if ($v > 1024) { - $v /= 1024; - $d = 'MB'; - } - if ($v > 1024) { - $v /= 1024; - $d = 'GB'; - } - if ($v > 1024) { - $v /= 1024; - $d = 'TB'; - } - return sprintf("%0.2f%s", $v, $d); - last SWITCH; - }; - /P/ && do { - debug_out(15, "Working with Percent value."); - my $ret = $v; - if ($v =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?/) { - if ($v >= 1000.0) { - $ret = " (def.)"; - $v -= 1000.0; - } else { - $ret = ""; - } - $ret = sprintf("%1.0f%%", $v) . $ret; - } - return $ret; - last SWITCH; - }; - return $v; + /B/ && do { + debug_out(15, "Working with Bytes."); + my $d = 'B'; + if ($v > 1024) { + $v /= 1024; + $d = 'kB'; + } + if ($v > 1024) { + $v /= 1024; + $d = 'MB'; + } + if ($v > 1024) { + $v /= 1024; + $d = 'GB'; + } + if ($v > 1024) { + $v /= 1024; + $d = 'TB'; + } + return sprintf("%0.2f%s", $v, $d); + last SWITCH; + }; + /P/ && do { + debug_out(15, "Working with Percent value."); + my $ret = $v; + if ($v =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?/) { + if ($v >= 1000.0) { + $ret = " (def.)"; + $v -= 1000.0; + } else { + $ret = ""; + } + $ret = sprintf("%1.0f%%", $v) . $ret; + } + return $ret; + last SWITCH; + }; + return $v; } } else { - return join("", @_); + return join("", @_); } } sub get_default_bytes { debug_out(15, "get_default_bytes called with ", join(":", @_)); if (1 == scalar(@_)) { - debug_out(15, "1 Param - let's see what we've got."); + debug_out(15, "1 Param - let's see what we've got."); SWITCH: for (@_) { - /DDS/ && return 2000000000; - /DDS1/ && return 2000000000; - /DDS2/ && return 4000000000; - /DLTIV/ && return 20000000000; - /DC6525/ && return 525000000; - /File/ && return 128*1024*1024; - { - debug_out(0, "$_ is not a known Media Type. Assuming 1 kBytes"); - return 1024; - }; + /DDS/ && return 2000000000; + /DDS1/ && return 2000000000; + /DDS2/ && return 4000000000; + /DLTIV/ && return 20000000000; + /DC6525/ && return 525000000; + /File/ && return 128*1024*1024; + { + debug_out(0, "$_ is not a known Media Type. Assuming 1 kBytes"); + return 1024; + }; }; } else { - debug_out(0, "This is not right..."); - return 999; + debug_out(0, "This is not right..."); + return 999; } } sub debug_out { if ($debug >= shift) { - print "@_\n"; + print "@_\n"; } } @@ -1098,8 +1098,8 @@ sub do_closedb { my $t; debug_out(40, "Closing database connection..."); while ($t=shift @temp_tables) { - debug_out(40, "Now dropping table $t"); - $h_db->do("DROP TABLE $t") || debug_out(0, "Can't drop $t."); + debug_out(40, "Now dropping table $t"); + $h_db->do("DROP TABLE $t") || debug_out(0, "Can't drop $t."); } $h_db->disconnect(); debug_out(40, "Database disconnected."); @@ -1154,7 +1154,7 @@ Although I give no warranties, in case of problems you can contact me. I will help as good as possible. Bacula consulting available. -Bacula is a Trademark and Copyright of Kern Sibbald. See www.bacula.org +Bacula is a Trademark of John Walker. See www.bacula.org EOF diff --git a/bacula/src/console2.glade b/bacula/src/console2.glade index a76e9b1ff1..59708068bc 100644 --- a/bacula/src/console2.glade +++ b/bacula/src/console2.glade @@ -30,544 +30,544 @@ 0 - - 1 - True - GTK_SHADOW_OUT - GTK_POS_LEFT - GTK_POS_TOP - - - - True - GTK_PACK_DIRECTION_LTR - GTK_PACK_DIRECTION_LTR - - - - True - _File - True - - - - True - - - - True - Connect to Director - _Connect - True - - - - - - - True - Disconnect from Director - _Disconnect - True - - - - - - - True - - - - - - True - gtk-quit - True - - Exit - - - - - - - - - - - - True - _Edit - True - - - - True - - - - True - gtk-cut - True - - Cut - - - - - - - - True - gtk-copy - True - - Copy - - - - - - - - True - gtk-paste - True - - Paste - - - - - - - - True - gtk-clear - True - - Clear - - - - - - - - True - - - - - - - - - - True - Display Messages - _View - True - - - - True - - - - True - _Display Messages - True - - - - - - - - - - - True - _Settings - True - - - - True - - - - True - gtk-preferences - True - - Preferences - - - - - - - - - - - - True - _Help - True - - - - True - - - - True - gnome-stock-about - True - - About - - - - - - - - - - - - - 0 - False - True - + + 1 + True + GTK_SHADOW_OUT + GTK_POS_LEFT + GTK_POS_TOP + + + + True + GTK_PACK_DIRECTION_LTR + GTK_PACK_DIRECTION_LTR + + + + True + _File + True + + + + True + + + + True + Connect to Director + _Connect + True + + + + + + + True + Disconnect from Director + _Disconnect + True + + + + + + + True + + + + + + True + gtk-quit + True + + Exit + + + + + + + + + + + + True + _Edit + True + + + + True + + + + True + gtk-cut + True + + Cut + + + + + + + + True + gtk-copy + True + + Copy + + + + + + + + True + gtk-paste + True + + Paste + + + + + + + + True + gtk-clear + True + + Clear + + + + + + + + True + + + + + + + + + + True + Display Messages + _View + True + + + + True + + + + True + _Display Messages + True + + + + + + + + + + + True + _Settings + True + + + + True + + + + True + gtk-preferences + True + + Preferences + + + + + + + + + + + + True + _Help + True + + + + True + + + + True + gnome-stock-about + True + + About + + + + + + + + + + + + + 0 + False + True + - - 1 - True - GTK_SHADOW_OUT - GTK_POS_LEFT - GTK_POS_TOP - - - - 1 - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Connect to Director - Connect - True - gtk-disconnect - True - True - False - - - - False - True - - - - - - True - Run a Job - Run - True - gtk-execute - True - True - False - - - - False - True - - - - - - True - Dir Status - True - gnome-stock-text-bulleted-list - True - True - False - - - - False - True - - - - - - True - Restore - True - gtk-revert-to-saved - True - True - False - - - - False - True - - - - - - True - Label - True - gtk-save-as - True - True - False - - - - False - True - - - - - - True - Display Messages - Msgs - True - gtk-find - True - True - False - - - - False - True - - - - - - - 0 - False - True - + + 1 + True + GTK_SHADOW_OUT + GTK_POS_LEFT + GTK_POS_TOP + + + + 1 + True + GTK_ORIENTATION_HORIZONTAL + GTK_TOOLBAR_BOTH + True + True + + + + True + Connect to Director + Connect + True + gtk-disconnect + True + True + False + + + + False + True + + + + + + True + Run a Job + Run + True + gtk-execute + True + True + False + + + + False + True + + + + + + True + Dir Status + True + gnome-stock-text-bulleted-list + True + True + False + + + + False + True + + + + + + True + Restore + True + gtk-revert-to-saved + True + True + False + + + + False + True + + + + + + True + Label + True + gtk-save-as + True + True + False + + + + False + True + + + + + + True + Display Messages + Msgs + True + gtk-find + True + True + False + + + + False + True + + + + + + + 0 + False + True + - - True - False - 0 - - - - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - False - False - True - GTK_JUSTIFY_LEFT - GTK_WRAP_WORD - True - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - Command: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - True - - - - - - True - Enter Commands Here - True - True - True - True - True - True - 150 - - True - * - False - - - - - 0 - True - True - - - - - 0 - False - True - - - - - - True - False - 0 - - - - True - 0 - 0.5 - GTK_SHADOW_ETCHED_IN - - - - True - Status: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - 0 - False - True - - - - - - True - 0 - 0.5 - GTK_SHADOW_ETCHED_IN - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - 0 - True - True - - - - - 0 - False - False - - - - - 0 - True - True - + + True + False + 0 + + + + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + False + False + True + GTK_JUSTIFY_LEFT + GTK_WRAP_WORD + True + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + 0 + True + True + + + + + + True + False + 0 + + + + True + Command: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + True + + + + + + True + Enter Commands Here + True + True + True + True + True + True + 150 + + True + * + False + + + + + 0 + True + True + + + + + 0 + False + True + + + + + + True + False + 0 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + Status: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + False + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + True + True + + + + + 0 + False + False + + + + + 0 + True + True + @@ -597,208 +597,208 @@ 0 - - True - GTK_BUTTONBOX_END - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - False - - - - - - 1 - 400 - 640 - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - - - - 0 - False - False - - - - - - - 0 - False - True - GTK_PACK_END - + + True + GTK_BUTTONBOX_END + + + + True + False + 0 + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + False + + + + + + 1 + 400 + 640 + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + False + + + + + + + 0 + False + True + GTK_PACK_END + - - True - False - 0 - - - - True - False - 0 - - - - True - Bacula Console + + True + False + 0 + + + + True + False + 0 + + + + True + Bacula Console - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - - - 0 - False - False - - - - - - True - Copyright (c) 2000 - 2004, Kern Sibbald and John Walker - False - False - GTK_JUSTIFY_LEFT - False - False - 0.10000000149 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - False - - - - - - True - Authors: Kern Sibbald and John Walker - False - False - GTK_JUSTIFY_LEFT - False - False - 0.0400000996888 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - False - - - - - - True - It comes by night and sucks the essence from your computers - False - False - GTK_JUSTIFY_LEFT - False - False - 0.15000000596 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - False - - - - - 0 - True - True - - - - - 0 - True - True - + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + + + 0 + False + False + + + + + + True + Copyright (C) 2000-2006, Free Software Foundation Europe e.V. + False + False + GTK_JUSTIFY_LEFT + False + False + 0.10000000149 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + False + + + + + + True + Author: Kern Sibbald + False + False + GTK_JUSTIFY_LEFT + False + False + 0.0400000996888 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + False + + + + + + True + It comes by night and sucks the essence from your computers + False + False + GTK_JUSTIFY_LEFT + False + False + 0.15000000596 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + False + + + + + 0 + True + True + + + + + 0 + True + True + @@ -828,210 +828,210 @@ 0 - - True - GTK_BUTTONBOX_END - - - - True - False - 0 - - - - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - - - - 0 - False - False - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 2 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - - - - 0 - False - False - - - - - - - 0 - False - True - GTK_PACK_END - + + True + GTK_BUTTONBOX_END + + + + True + False + 0 + + + + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + False + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 2 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + False + + + + + + + 0 + False + True + GTK_PACK_END + - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.479999989271 - 0.460000008345 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - Select Director - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - False - True - False - True - False - - - - True - True - True - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - False - False - - - - - 0 - True - True - + + True + False + 0 + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.479999989271 + 0.460000008345 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + Select Director + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + False + True + False + True + False + + + + True + True + True + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + False + False + + + + + 0 + True + True + @@ -1061,1532 +1061,1532 @@ 0 - - True - GTK_BUTTONBOX_END - - - - True - GTK_BUTTONBOX_END - 8 - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - - - - - - - - 0 - False - True - GTK_PACK_END - + + True + GTK_BUTTONBOX_END + + + + True + GTK_BUTTONBOX_END + 8 + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + + + + + + + + 0 + False + True + GTK_PACK_END + - - True - False - 0 - - - - True - False - 0 - - - - True - Run a Job - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 9 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 2 - False - False - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - 1 - True - False - 0 - - - - True - False - 0 - - - - 85 - 16 - True - Job: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 198 - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 1 - True - True - - - - - - True - Type: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 141 - 24 - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - False - False - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 30 - False - False - - - - - - - 2 - False - False - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Client: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 1 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 123 - False - False - - - - - 0 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - FileSet: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - 13 - 16 - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 103 - True - Priority: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - True - - - - - - 85 - 24 - True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 10 0 100 1 10 10 - - - 4 - True - True - - - - - 2 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Level: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 100 - False - False - - - - - 2 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Pool: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 120 - False - False - - - - - 2 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Storage: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 120 - False - False - - - - - 0 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Messages: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 120 - False - False - - - - - 0 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Where: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 120 - False - False - - - - - 2 - True - True - - - - - 0 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - When: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 120 - False - False - - - - - 0 - True - True - - - - - - 1 - True - False - 0 - - - - 85 - 16 - True - Bootstrap: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 36 - False - False - - - - - 0 - True - True - - - - - - 12 - 19 - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - 0 - True - True - + + True + False + 0 + + + + True + False + 0 + + + + True + Run a Job + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 9 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 0 + 0 + + + + 1 + True + False + 0 + + + + True + False + 0 + + + + 85 + 16 + True + Job: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 198 + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 1 + True + True + + + + + + True + Type: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 141 + 24 + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + False + False + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 30 + False + False + + + + + + + 2 + False + False + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Client: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 1 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 123 + False + False + + + + + 0 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + FileSet: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + 13 + 16 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 103 + True + Priority: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + 85 + 24 + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 10 0 100 1 10 10 + + + 4 + True + True + + + + + 2 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Level: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 100 + False + False + + + + + 2 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Pool: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 120 + False + False + + + + + 2 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Storage: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 120 + False + False + + + + + 0 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Messages: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 120 + False + False + + + + + 0 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Where: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 120 + False + False + + + + + 2 + True + True + + + + + 0 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + When: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 120 + False + False + + + + + 0 + True + True + + + + + + 1 + True + False + 0 + + + + 85 + 16 + True + Bootstrap: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 36 + False + False + + + + + 0 + True + True + + + + + + 12 + 19 + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + True + True + @@ -2620,503 +2620,503 @@ 0 - - True - GTK_SHADOW_OUT - GTK_POS_LEFT - GTK_POS_TOP - - - - True - GTK_PACK_DIRECTION_LTR - GTK_PACK_DIRECTION_LTR - - - - True - GNOMEUIINFO_MENU_FILE_TREE - - - - - - - True - GNOMEUIINFO_MENU_NEW_ITEM - _New - True - - - - - - - True - GNOMEUIINFO_MENU_OPEN_ITEM - - - - - - - True - GNOMEUIINFO_MENU_SAVE_ITEM - - - - - - - True - GNOMEUIINFO_MENU_SAVE_AS_ITEM - - - - - - - True - - - - - - True - GNOMEUIINFO_MENU_EXIT_ITEM - - - - - - - - - - - True - GNOMEUIINFO_MENU_EDIT_TREE - - - - - - - True - GNOMEUIINFO_MENU_CUT_ITEM - - - - - - - True - GNOMEUIINFO_MENU_COPY_ITEM - - - - - - - True - GNOMEUIINFO_MENU_PASTE_ITEM - - - - - - - True - GNOMEUIINFO_MENU_CLEAR_ITEM - - - - - - - True - - - - - - True - GNOMEUIINFO_MENU_PROPERTIES_ITEM - - - - - - - True - - - - - - True - GNOMEUIINFO_MENU_PREFERENCES_ITEM - - - - - - - - - - - True - GNOMEUIINFO_MENU_VIEW_TREE - - - - - - - - - - - True - GNOMEUIINFO_MENU_HELP_TREE - - - - - - - True - GNOMEUIINFO_MENU_ABOUT_ITEM - - - - - - - - - - - - 0 - False - False - + + True + GTK_SHADOW_OUT + GTK_POS_LEFT + GTK_POS_TOP + + + + True + GTK_PACK_DIRECTION_LTR + GTK_PACK_DIRECTION_LTR + + + + True + GNOMEUIINFO_MENU_FILE_TREE + + + + + + + True + GNOMEUIINFO_MENU_NEW_ITEM + _New + True + + + + + + + True + GNOMEUIINFO_MENU_OPEN_ITEM + + + + + + + True + GNOMEUIINFO_MENU_SAVE_ITEM + + + + + + + True + GNOMEUIINFO_MENU_SAVE_AS_ITEM + + + + + + + True + + + + + + True + GNOMEUIINFO_MENU_EXIT_ITEM + + + + + + + + + + + True + GNOMEUIINFO_MENU_EDIT_TREE + + + + + + + True + GNOMEUIINFO_MENU_CUT_ITEM + + + + + + + True + GNOMEUIINFO_MENU_COPY_ITEM + + + + + + + True + GNOMEUIINFO_MENU_PASTE_ITEM + + + + + + + True + GNOMEUIINFO_MENU_CLEAR_ITEM + + + + + + + True + + + + + + True + GNOMEUIINFO_MENU_PROPERTIES_ITEM + + + + + + + True + + + + + + True + GNOMEUIINFO_MENU_PREFERENCES_ITEM + + + + + + + + + + + True + GNOMEUIINFO_MENU_VIEW_TREE + + + + + + + + + + + True + GNOMEUIINFO_MENU_HELP_TREE + + + + + + + True + GNOMEUIINFO_MENU_ABOUT_ITEM + + + + + + + + + + + + 0 + False + False + - - True - GTK_SHADOW_OUT - GTK_POS_LEFT - GTK_POS_TOP - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - gtk-go-up - True - True - False - - - - False - True - - - - - - True - gtk-add - True - True - False - - - - False - True - - - - - - True - gtk-remove - True - True - False - - - - False - True - - - - - - - - - - - - - - - 0 - False - False - + + True + GTK_SHADOW_OUT + GTK_POS_LEFT + GTK_POS_TOP + + + + True + GTK_ORIENTATION_HORIZONTAL + GTK_TOOLBAR_BOTH + True + True + + + + True + gtk-go-up + True + True + False + + + + False + True + + + + + + True + gtk-add + True + True + False + + + + False + True + + + + + + True + gtk-remove + True + True + False + + + + False + True + + + + + + + + + + + + + + + 0 + False + False + - - True - False - 0 - - - - True - Current dir: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - True - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - 0 - False - True - + + True + False + 0 + + + + True + Current dir: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + True + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + 0 + False + True + - - True - True - - - - 164 - 78 - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - - - - True - False - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - - - - True - True - - - - - 0 - True - True - + + True + True + + + + 164 + 78 + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + + + + True + False + + + + + + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + + + + True + True + + + + + 0 + True + True + - - 301 - 30 - True - False - 0 - - - - True - Files Selected: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.019999999553 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - True - - - - - - 72 - 30 - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - - - - 0 - False - True - - - - - - 34 - 16 - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - - - - 0 - False - True - - - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 8 - False - False - - - - - 5 - False - True - + + 301 + 30 + True + False + 0 + + + + True + Files Selected: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.019999999553 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + 72 + 30 + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + True + + + + + + 34 + 16 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + True + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 8 + False + False + + + + + 5 + False + True + @@ -3146,501 +3146,501 @@ 0 - - True - GTK_BUTTONBOX_END - - - - True - GTK_BUTTONBOX_END - 8 - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - - - - - - - - 0 - False - True - GTK_PACK_END - + + True + GTK_BUTTONBOX_END + + + + True + GTK_BUTTONBOX_END + 8 + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + + + + + + + + 0 + False + True + GTK_PACK_END + - - True - False - 0 - - - - True - Label a Volume - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 9 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 5 - True - False - 0 - - - - True - Storage: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.15000000596 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - True - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 15 - True - True - - - - - - - - - 0 - False - True - - - - - - 5 - True - False - 0 - - - - True - Pool: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.119999997318 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - True - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 14 - True - True - - - - - - - - - 0 - False - True - - - - - - 5 - True - False - 0 - - - - True - Volume Name: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.170000001788 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - True - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - - - - 0 - False - True - - - - - - 5 - True - False - 0 - - - - True - Slot: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.0900000035763 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - True - - - - - - True - True - 1 - 0 - True - GTK_UPDATE_ALWAYS - False - False - 0 0 10000 1 10 10 - - - 0 - True - True - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - 0 - False - True - + + True + False + 0 + + + + True + Label a Volume + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 9 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 5 + True + False + 0 + + + + True + Storage: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.15000000596 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 15 + True + True + + + + + + + + + 0 + False + True + + + + + + 5 + True + False + 0 + + + + True + Pool: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.119999997318 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 14 + True + True + + + + + + + + + 0 + False + True + + + + + + 5 + True + False + 0 + + + + True + Volume Name: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.170000001788 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + + + + 0 + False + True + + + + + + 5 + True + False + 0 + + + + True + Slot: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.0900000035763 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + True + + + + + + True + True + 1 + 0 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 10000 1 10 10 + + + 0 + True + True + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + False + True + @@ -3672,999 +3672,999 @@ 0 - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NORMAL - True - -11 - - - - - - True - True - True - GTK_RELIEF_NORMAL - True - 0 - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-apply - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - Select Files - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - 0 - False - True - GTK_PACK_END - + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NORMAL + True + -11 + + + + + + True + True + True + GTK_RELIEF_NORMAL + True + 0 + + + + + True + 0.5 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-apply + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + Select Files + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + 0 + False + True + GTK_PACK_END + - - True - False - 0 - - - - True - False - 0 - - - - True - Restore Files - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 9 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 2 - False - False - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - 66 - 16 - True - Job: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 1 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 27 - False - False - - - - - 0 - True - True - - - - - - - 2 - False - False - - - - - - True - False - 0 - - - - 66 - 16 - True - Client: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 1 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 25 - False - False - - - - - 0 - True - True - - - - - - True - False - 0 - - - - 66 - 16 - True - FileSet: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 23 - False - False - - - - - 2 - True - True - - - - - - True - False - 0 - - - - 66 - 16 - True - Pool: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 21 - False - False - - - - - 2 - True - True - - - - - - True - False - 0 - - - - 66 - 16 - True - Storage: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - False - True - False - - - - True - True - False - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - True - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 21 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - True - False - 0 - - - - 66 - 16 - True - Before: - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 53 - False - False - - - - - 0 - True - True - - - - - - True - - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - 0 - True - True - + + True + False + 0 + + + + True + False + 0 + + + + True + Restore Files + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 9 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 0 + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + 66 + 16 + True + Job: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 1 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 27 + False + False + + + + + 0 + True + True + + + + + + + 2 + False + False + + + + + + True + False + 0 + + + + 66 + 16 + True + Client: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 1 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 25 + False + False + + + + + 0 + True + True + + + + + + True + False + 0 + + + + 66 + 16 + True + FileSet: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 23 + False + False + + + + + 2 + True + True + + + + + + True + False + 0 + + + + 66 + 16 + True + Pool: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 21 + False + False + + + + + 2 + True + True + + + + + + True + False + 0 + + + + 66 + 16 + True + Storage: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + False + True + False + + + + True + True + False + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + True + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 21 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + False + 0 + + + + 66 + 16 + True + Before: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 53 + False + False + + + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + True + True + @@ -4694,140 +4694,140 @@ 0 - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - 0 - False - True - GTK_PACK_END - + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + 0 + False + True + GTK_PACK_END + - - True - False - 0 - - - - 0 - 43 - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 0 - 36 - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 150 - 33 - True - GTK_PROGRESS_LEFT_TO_RIGHT - 0 - 0.10000000149 - PANGO_ELLIPSIZE_NONE - - - 0 - True - False - - - - - - 0 - 52 - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - 0 - True - True - + + True + False + 0 + + + + 0 + 43 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 0 + 36 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 150 + 33 + True + GTK_PROGRESS_LEFT_TO_RIGHT + 0 + 0.10000000149 + PANGO_ELLIPSIZE_NONE + + + 0 + True + False + + + + + + 0 + 52 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + True + True + diff --git a/bacula/src/dird/migrate.c b/bacula/src/dird/migrate.c index 991b581312..88a5189d3a 100644 --- a/bacula/src/dird/migrate.c +++ b/bacula/src/dird/migrate.c @@ -473,7 +473,7 @@ const char *sql_client = const char *sql_jobids_from_client = "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool,Client" " WHERE Client.Name='%s' AND Pool.Name='%s' AND Job.PoolId=Pool.PoolId" - " AND Job.ClientId=Client.ClientId " + " AND Job.ClientId=Client.ClientId AND Job.Type='B'" " ORDER by Job.StartTime"; /* Get Volume names in Pool */ @@ -486,7 +486,7 @@ const char *sql_vol = const char *sql_jobids_from_vol = "SELECT DISTINCT Job.JobId,Job.StartTime FROM Media,JobMedia,Job" " WHERE Media.VolumeName='%s' AND Media.MediaId=JobMedia.MediaId" - " AND JobMedia.JobId=Job.JobId" + " AND JobMedia.JobId=Job.JobId AND Job.Type='B'" " ORDER by Job.StartTime"; @@ -506,6 +506,7 @@ const char *sql_oldest_vol = const char *sql_jobids_from_mediaid = "SELECT DISTINCT Job.JobId,Job.StartTime FROM JobMedia,Job" " WHERE JobMedia.JobId=Job.JobId AND JobMedia.MediaId=%s" + " AND Job.Type='B'" " ORDER by Job.StartTime"; /* Get tne number of bytes in the pool */ @@ -530,6 +531,7 @@ const char *sql_pool_time = "SELECT DISTINCT Job.JobId from Pool,Job,Media,JobMedia WHERE" " Pool.Name='%s' AND Media.PoolId=Pool.PoolId AND" " VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" + " Job.Type='B' AND" " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId" " AND Job.RealEndTime<='%s'"; @@ -1094,6 +1096,7 @@ void migration_cleanup(JCR *jcr, int TermCode) /* Mark previous job as migrated */ Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", (char)JT_MIGRATED_JOB, edit_uint64(jcr->previous_jr.JobId, ec1)); + Dmsg1(000, "Mark: %s\n", query.c_str()); db_sql_query(jcr->db, query.c_str(), NULL, NULL); } term_msg = _("%s -- no files to migrate"); diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index 300c15c79e..cb3cb885f0 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -311,8 +311,9 @@ public: POOLMEM *fileset_name; /* FileSet */ POOLMEM *fileset_md5; /* MD5 for FileSet */ VOL_LIST *VolList; /* list to read */ - int32_t NumVolumes; /* number of volumes used */ - int32_t CurVolume; /* current volume number */ + int32_t NumWriteVolumes; /* number of volumes written */ + int32_t NumReadVolumes; /* total number of volumes to read */ + int32_t CurReadVolume; /* current read volume number */ int label_errors; /* count of label errors */ bool session_opened; long Ticket; /* ticket for this job */ diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index faa369213f..8aa0dd12be 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -79,13 +79,13 @@ bool acquire_device_for_read(DCR *dcr) edit_int64(jcr->JobId, ed1)); goto get_out; } - jcr->CurVolume++; - for (i=1; iCurVolume; i++) { + jcr->CurReadVolume++; + for (i=1; iCurReadVolume; i++) { vol = vol->next; } if (!vol) { Jmsg(jcr, M_FATAL, 0, _("Logic error: no next volume. Numvol=%d Curvol=%d\n"), - jcr->NumVolumes, jcr->CurVolume); + jcr->NumReadVolumes, jcr->CurReadVolume); goto get_out; /* should not happen */ } bstrncpy(dcr->VolumeName, vol->VolumeName, sizeof(dcr->VolumeName)); @@ -403,8 +403,8 @@ DCR *acquire_device_for_append(DCR *dcr) } dev->num_writers++; /* we are now a writer */ - if (jcr->NumVolumes == 0) { - jcr->NumVolumes = 1; + if (jcr->NumWriteVolumes == 0) { + jcr->NumWriteVolumes = 1; } P(dev->mutex); if (dcr->reserved_device) { @@ -502,7 +502,7 @@ bool release_device(DCR *dcr) } /* If no writers, close if file or !CAP_ALWAYS_OPEN */ - if (dev->num_writers == 0 && (!dev->is_tape() || !dev_cap(dev, CAP_ALWAYSOPEN))) { + if (dev->num_writers == 0 && (!dev->is_tape() || !dev->has_cap(CAP_ALWAYSOPEN))) { dvd_remove_empty_part(dcr); /* get rid of any empty spool part */ dev->close(); } diff --git a/bacula/src/stored/block.c b/bacula/src/stored/block.c index b788bfb28a..c567fe3742 100644 --- a/bacula/src/stored/block.c +++ b/bacula/src/stored/block.c @@ -643,7 +643,7 @@ static void reread_last_block(DCR *dcr) * then re-read it and verify that the block number is * correct. */ - if (dev->is_tape() && dev_cap(dev, CAP_BSR)) { + if (dev->is_tape() && dev->has_cap(CAP_BSR)) { /* Now back up over what we wrote and read the last block */ if (!dev->bsf(1)) { berrno be; @@ -762,7 +762,7 @@ static bool terminate_writing_volume(DCR *dcr) /* Set new file/block parameters for current dcr */ set_new_file_parameters(dcr); - if (ok && dev_cap(dev, CAP_TWOEOF) && !dev->weof(1)) { /* end the tape */ + if (ok && dev->has_cap(CAP_TWOEOF) && !dev->weof(1)) { /* end the tape */ dev->VolCatInfo.VolCatErrors++; /* This may not be fatal since we already wrote an EOF */ Jmsg(dcr->jcr, M_ERROR, 0, "%s", dev->errmsg); diff --git a/bacula/src/stored/btape.c b/bacula/src/stored/btape.c index 2f64288fb6..3bdae65350 100644 --- a/bacula/src/stored/btape.c +++ b/bacula/src/stored/btape.c @@ -726,14 +726,14 @@ static int re_read_block_test() Pmsg1(0, _("Wrote third record of %d bytes.\n"), rec->data_len); } weofcmd(); - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } if (!dev->bsf(1)) { Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror()); goto bail_out; } - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { if (!dev->bsf(1)) { Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror()); goto bail_out; @@ -840,7 +840,7 @@ static int write_read_test() } Pmsg1(0, _("Wrote 1000 blocks of %d bytes.\n"), rec->data_len); weofcmd(); - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } if (!dev->rewind(dcr)) { @@ -952,7 +952,7 @@ static int position_test() } Pmsg1(0, _("Wrote 1000 blocks of %d bytes.\n"), rec->data_len); weofcmd(); - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } if (!dev->rewind(dcr)) { @@ -1080,7 +1080,7 @@ static int append_test() wrcmd(); wrcmd(); weofcmd(); /* end file 2 */ - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } dev->close(); /* release device */ @@ -1100,7 +1100,7 @@ static int append_test() Pmsg0(-1, _("\nNow the important part, I am going to attempt to append to the tape.\n\n")); wrcmd(); weofcmd(); - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } rewindcmd(); @@ -1129,7 +1129,7 @@ static int autochanger_test() int sleep_time = 0; Dmsg1(100, "Max changer wait = %d sec\n", timeout); - if (!dev_cap(dev, CAP_AUTOCHANGER)) { + if (!dev->has_cap(CAP_AUTOCHANGER)) { return 1; } if (!(dcr->device && dcr->device->changer_name && dcr->device->changer_command)) { @@ -1296,7 +1296,7 @@ static int fsf_test() weofcmd(); /* end file 3 */ wrcmd(); weofcmd(); /* end file 4 */ - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } @@ -1359,10 +1359,10 @@ test_again: bail_out: Pmsg0(-1, _("\nThe forward space file test failed.\n")); - if (dev_cap(dev, CAP_FASTFSF)) { + if (dev->has_cap(CAP_FASTFSF)) { Pmsg0(-1, _("You have Fast Forward Space File enabled.\n" "I am turning it off then retrying the test.\n")); - dev->capabilities &= ~CAP_FASTFSF; + dev->clear_cap(CAP_FASTFSF); set_off = true; goto test_again; } @@ -1397,13 +1397,13 @@ static void testcmd() goto all_done; } if (stat == -1) { /* first test failed */ - if (dev_cap(dev, CAP_EOM) || dev_cap(dev, CAP_FASTFSF)) { + if (dev->has_cap(CAP_EOM) || dev->has_cap(CAP_FASTFSF)) { Pmsg0(-1, _("\nAppend test failed. Attempting again.\n" "Setting \"Hardware End of Medium = no\n" " and \"Fast Forward Space File = no\n" "and retrying append test.\n\n")); - dev->capabilities &= ~CAP_EOM; /* turn off eom */ - dev->capabilities &= ~CAP_FASTFSF; /* turn off fast fsf */ + dev->clear_cap(CAP_EOM); /* turn off eom */ + dev->clear_cap(CAP_FASTFSF); /* turn off fast fsf */ stat = append_test(); if (stat == 1) { Pmsg0(-1, _("\n\nIt looks like the test worked this time, please add:\n\n" @@ -2119,8 +2119,8 @@ static void do_unfill() LastBlock = 0; Dmsg0(20, "Enter do_unfill\n"); - dev->capabilities |= CAP_ANONVOLS; /* allow reading any volume */ - dev->capabilities &= ~CAP_LABEL; /* don't label anything here */ + dev->set_cap(CAP_ANONVOLS); /* allow reading any volume */ + dev->clear_cap(CAP_LABEL); /* don't label anything here */ end_of_tape = 0; @@ -2151,7 +2151,7 @@ static void do_unfill() if (!simple) { /* Multiple Volume tape */ /* Close device so user can use autochanger if desired */ - if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { + if (dev->has_cap(CAP_OFFLINEUNMOUNT)) { dev->offline(); } autochanger = autoload_device(dcr, 1, NULL); @@ -2210,7 +2210,7 @@ static void do_unfill() /* Multiple Volume tape */ /* Close device so user can use autochanger if desired */ - if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { + if (dev->has_cap(CAP_OFFLINEUNMOUNT)) { dev->offline(); } @@ -2456,7 +2456,7 @@ static void qfillcmd() } printf("\n"); weofcmd(); - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { weofcmd(); } rewindcmd(); @@ -2699,7 +2699,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) set_volume_name("TestVolume2", 2); } /* Close device so user can use autochanger if desired */ - if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { + if (dev->has_cap(CAP_OFFLINEUNMOUNT)) { dev->offline(); } autochanger = autoload_device(dcr, 1, NULL); diff --git a/bacula/src/stored/butil.c b/bacula/src/stored/butil.c index 9405aab2d6..ab5f957aa1 100644 --- a/bacula/src/stored/butil.c +++ b/bacula/src/stored/butil.c @@ -89,7 +89,8 @@ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, jcr->bsr = bsr; jcr->VolSessionId = 1; jcr->VolSessionTime = (uint32_t)time(NULL); - jcr->NumVolumes = 0; + jcr->NumReadVolumes = 0; + jcr->NumWriteVolumes = 0; jcr->JobId = 0; jcr->JobType = JT_CONSOLE; jcr->JobLevel = L_FULL; diff --git a/bacula/src/stored/dev.c b/bacula/src/stored/dev.c index 459a9caa94..f265db0e58 100644 --- a/bacula/src/stored/dev.c +++ b/bacula/src/stored/dev.c @@ -204,6 +204,9 @@ init_dev(JCR *jcr, DEVRES *device) if (!device->write_part_command) { Jmsg0(jcr, M_ERROR_TERM, 0, _("Write part command must be defined for a device which requires mount.\n")); } + /* Don't let DVD do block positioning since it is not tested + * ***FIXME**** remove if this works */ + dev->clear_cap(CAP_POSITIONBLOCKS); } if (dev->max_block_size > 1000000) { @@ -1714,32 +1717,32 @@ void DEVICE::clrerror(int func) if (errno == ENOTTY || errno == ENOSYS) { /* Function not implemented */ switch (func) { case -1: - break; /* ignore message printed later */ + break; /* ignore message printed later */ case MTWEOF: msg = "WTWEOF"; - capabilities &= ~CAP_EOF; /* turn off feature */ + clear_cap(CAP_EOF); /* turn off feature */ break; #ifdef MTEOM case MTEOM: msg = "WTEOM"; - capabilities &= ~CAP_EOM; /* turn off feature */ + clear_cap(CAP_EOM); /* turn off feature */ break; #endif case MTFSF: msg = "MTFSF"; - capabilities &= ~CAP_FSF; /* turn off feature */ + clear_cap(CAP_FSF); /* turn off feature */ break; case MTBSF: msg = "MTBSF"; - capabilities &= ~CAP_BSF; /* turn off feature */ + clear_cap(CAP_BSF); /* turn off feature */ break; case MTFSR: msg = "MTFSR"; - capabilities &= ~CAP_FSR; /* turn off feature */ + clear_cap(CAP_FSR); /* turn off feature */ break; case MTBSR: msg = "MTBSR"; - capabilities &= ~CAP_BSR; /* turn off feature */ + clear_cap(CAP_BSR); /* turn off feature */ break; case MTREW: msg = "MTREW"; @@ -2371,7 +2374,7 @@ void set_os_device_parameters(DCR *dcr) /* Turn this on later when fully tested */ #if defined(xxxMTIOCSETEOTMODEL) uint32_t neof; - if (dev_cap(dev, CAP_TWOEOF)) { + if (dev->has_cap(CAP_TWOEOF)) { neof = 2; } else { neof = 1; diff --git a/bacula/src/stored/dev.h b/bacula/src/stored/dev.h index 1c77a3c8ae..0ff099dc4c 100644 --- a/bacula/src/stored/dev.h +++ b/bacula/src/stored/dev.h @@ -93,9 +93,6 @@ enum { #define BMT_IM_REP_EN (1<<9) /* immediate report enabled */ -/* Test capabilities */ -#define dev_cap(dev, cap) ((dev)->capabilities & (cap)) - /* Bits for device capabilities */ #define CAP_EOF (1<<0) /* has MTWEOF */ #define CAP_BSR (1<<1) /* has MTBSR */ @@ -285,6 +282,8 @@ public: /* Methods */ int has_cap(int cap) const { return capabilities & cap; } + void clear_cap(int cap) { capabilities &= ~cap; } + void set_cap(int cap) { capabilities |= cap; } int is_autochanger() const { return capabilities & CAP_AUTOCHANGER; } int requires_mount() const { return capabilities & CAP_REQMOUNT; } int is_removable() const { return capabilities & CAP_REM; } diff --git a/bacula/src/stored/device.c b/bacula/src/stored/device.c index e1d819f5ee..4884d3cc71 100644 --- a/bacula/src/stored/device.c +++ b/bacula/src/stored/device.c @@ -203,7 +203,7 @@ void set_new_volume_parameters(DCR *dcr) /* Reset indicies */ dcr->VolFirstIndex = 0; dcr->VolLastIndex = 0; - jcr->NumVolumes++; + jcr->NumWriteVolumes++; dcr->NewVol = false; dcr->WroteVol = false; } @@ -267,7 +267,7 @@ bool first_open_device(DCR *dcr) } int mode; - if (dev_cap(dev, CAP_STREAM)) { + if (dev->has_cap(CAP_STREAM)) { mode = OPEN_WRITE_ONLY; } else { mode = OPEN_READ_ONLY; @@ -293,7 +293,7 @@ bool open_device(DCR *dcr) DEVICE *dev = dcr->dev; /* Open device */ int mode; - if (dev_cap(dev, CAP_STREAM)) { + if (dev->has_cap(CAP_STREAM)) { mode = OPEN_WRITE_ONLY; } else { mode = OPEN_READ_WRITE; diff --git a/bacula/src/stored/label.c b/bacula/src/stored/label.c index 26db7b941d..b600a66ffc 100644 --- a/bacula/src/stored/label.c +++ b/bacula/src/stored/label.c @@ -122,7 +122,7 @@ int read_dev_volume_label(DCR *dcr) want_ansi_label = dcr->VolCatInfo.LabelType != B_BACULA_LABEL || dcr->device->label_type != B_BACULA_LABEL; - if (want_ansi_label || dev_cap(dev, CAP_CHECKLABELS)) { + if (want_ansi_label || dev->has_cap(CAP_CHECKLABELS)) { stat = read_ansi_ibm_label(dcr); /* If we want a label and didn't find it, return error */ if (want_ansi_label && stat != VOL_OK) { @@ -239,7 +239,7 @@ int read_dev_volume_label(DCR *dcr) } Dmsg0(30, "Leave read_volume_label() VOL_OK\n"); /* If we are a streaming device, we only get one chance to read */ - if (!dev_cap(dev, CAP_STREAM)) { + if (!dev->has_cap(CAP_STREAM)) { dev->rewind(dcr); if (have_ansi_label) { stat = read_ansi_ibm_label(dcr); @@ -436,7 +436,7 @@ bool rewrite_volume_label(DCR *dcr, bool recycle) * We do not write the block now if this is an ANSI label. This * avoids re-writing the ANSI label, which we do not want to do. */ - if (!dev_cap(dev, CAP_STREAM)) { + if (!dev->has_cap(CAP_STREAM)) { if (!dev->rewind(dcr)) { Jmsg2(jcr, M_FATAL, 0, _("Rewind error on device %s: ERR=%s\n"), dev->print_name(), dev->print_errmsg()); @@ -571,7 +571,7 @@ static void create_volume_label_record(DCR *dcr, DEV_RECORD *rec) rec->FileIndex = dev->VolHdr.LabelType; rec->VolSessionId = jcr->VolSessionId; rec->VolSessionTime = jcr->VolSessionTime; - rec->Stream = jcr->NumVolumes; + rec->Stream = jcr->NumWriteVolumes; Dmsg2(150, "Created Vol label rec: FI=%s len=%d\n", FI_to_ascii(buf, rec->FileIndex), rec->data_len); } diff --git a/bacula/src/stored/mac.c b/bacula/src/stored/mac.c index a36f6a3733..900701eba4 100644 --- a/bacula/src/stored/mac.c +++ b/bacula/src/stored/mac.c @@ -83,12 +83,12 @@ bool do_mac(JCR *jcr) create_restore_volume_list(jcr); - if (jcr->NumVolumes == 0) { + if (jcr->NumReadVolumes == 0) { Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type); goto bail_out; } - Dmsg3(200, "Found %d volumes names for %s. First=%s\n", jcr->NumVolumes, + Dmsg3(200, "Found %d volumes names for %s. First=%s\n", jcr->NumReadVolumes, jcr->VolList->VolumeName, Type); /* Ready devices for reading and writing */ diff --git a/bacula/src/stored/mount.c b/bacula/src/stored/mount.c index 65cc04e521..eb6a29bde6 100644 --- a/bacula/src/stored/mount.c +++ b/bacula/src/stored/mount.c @@ -172,7 +172,7 @@ mount_next_vol: } /* Ensure the device is open */ - if (dev_cap(dev, CAP_STREAM)) { + if (dev->has_cap(CAP_STREAM)) { mode = OPEN_WRITE_ONLY; } else { mode = OPEN_READ_WRITE; @@ -565,7 +565,7 @@ void release_volume(DCR *dcr) dev->label_type = B_BACULA_LABEL; dcr->VolumeName[0] = 0; - if (dev->is_open() && (!dev->is_tape() || !dev_cap(dev, CAP_ALWAYSOPEN))) { + if (dev->is_open() && (!dev->is_tape() || !dev->has_cap(CAP_ALWAYSOPEN))) { dev->close(); } @@ -584,11 +584,11 @@ bool mount_next_read_volume(DCR *dcr) { DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; - Dmsg2(90, "NumVolumes=%d CurVolume=%d\n", jcr->NumVolumes, jcr->CurVolume); + Dmsg2(90, "NumReadVolumes=%d CurReadVolume=%d\n", jcr->NumReadVolumes, jcr->CurReadVolume); /* * End Of Tape -- mount next Volume (if another specified) */ - if (jcr->NumVolumes > 1 && jcr->CurVolume < jcr->NumVolumes) { + if (jcr->NumReadVolumes > 1 && jcr->CurReadVolume < jcr->NumReadVolumes) { dev->close(); if (!acquire_device_for_read(dcr)) { Jmsg2(jcr, M_FATAL, 0, _("Cannot open Dev=%s, Vol=%s\n"), dev->print_name(), diff --git a/bacula/src/stored/parse_bsr.c b/bacula/src/stored/parse_bsr.c index f05e8c2b24..31cc8930f8 100755 --- a/bacula/src/stored/parse_bsr.c +++ b/bacula/src/stored/parse_bsr.c @@ -890,8 +890,8 @@ void create_restore_volume_list(JCR *jcr) /* * Build a list of volumes to be processed */ - jcr->NumVolumes = 0; - jcr->CurVolume = 0; + jcr->NumReadVolumes = 0; + jcr->CurReadVolume = 0; if (jcr->bsr) { BSR *bsr = jcr->bsr; if (!bsr->volume || !bsr->volume->VolumeName) { @@ -917,7 +917,7 @@ void create_restore_volume_list(JCR *jcr) vol->Slot = bsrvol->Slot; vol->start_file = sfile; if (add_restore_volume(jcr, vol)) { - jcr->NumVolumes++; + jcr->NumReadVolumes++; Dmsg2(400, "Added volume=%s mediatype=%s\n", vol->VolumeName, vol->MediaType); } else { @@ -938,7 +938,7 @@ void create_restore_volume_list(JCR *jcr) bstrncpy(vol->VolumeName, p, sizeof(vol->VolumeName)); bstrncpy(vol->MediaType, jcr->dcr->media_type, sizeof(vol->MediaType)); if (add_restore_volume(jcr, vol)) { - jcr->NumVolumes++; + jcr->NumReadVolumes++; } else { free((char *)vol); } diff --git a/bacula/src/stored/read.c b/bacula/src/stored/read.c index f23c71b02f..6f2c5b01c3 100644 --- a/bacula/src/stored/read.c +++ b/bacula/src/stored/read.c @@ -64,14 +64,14 @@ bool do_read_data(JCR *jcr) create_restore_volume_list(jcr); - if (jcr->NumVolumes == 0) { + if (jcr->NumReadVolumes == 0) { Jmsg(jcr, M_FATAL, 0, _("No Volume names found for restore.\n")); free_restore_volume_list(jcr); bnet_fsend(fd, FD_error); return false; } - Dmsg2(200, "Found %d volumes names to restore. First=%s\n", jcr->NumVolumes, + Dmsg2(200, "Found %d volumes names to restore. First=%s\n", jcr->NumReadVolumes, jcr->VolList->VolumeName); /* Ready device for reading */ diff --git a/bacula/src/version.h b/bacula/src/version.h index 29171ec4af..45fc78a3ae 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -4,8 +4,8 @@ #undef VERSION #define VERSION "1.39.31" -#define BDATE "12 December 2006" -#define LSMDATE "12Dec06" +#define BDATE "14 December 2006" +#define LSMDATE "14Dec06" #define PROG_COPYRIGHT "Copyright (C) %d-2006 Free Software Foundation Europe e.V.\n" #define BYEAR "2006" /* year for copyright messages in progs */ @@ -53,9 +53,9 @@ #define USE_BSNPRINTF 1 -/* Debug flags not normally turned on */ +/* Disk file seeking is now controled by CAP_POSITIONBLOCKS */ -#define FILE_SEEK 1 +/* Debug flags not normally turned on */ /* #define TRACE_JCR_CHAIN 1 */ /* #define TRACE_RES 1 */ diff --git a/bacula/src/win32/compat/winapi.c b/bacula/src/win32/compat/winapi.c index 0681c6c6dc..0de12dc822 100644 --- a/bacula/src/win32/compat/winapi.c +++ b/bacula/src/win32/compat/winapi.c @@ -6,19 +6,32 @@ * Kern Sibbald MMIII */ /* - Copyright (C) 2003-2006 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - 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 - the file LICENSE for additional details. - - */ + Bacula® - The Network Backup Solution + + Copyright (C) 2003-2006 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + 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 GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ #include "bacula.h" diff --git a/bacula/src/win32/patches/mt.patch b/bacula/src/win32/patches/mt.patch index d85840ab11..c9b1e51bec 100644 --- a/bacula/src/win32/patches/mt.patch +++ b/bacula/src/win32/patches/mt.patch @@ -490,7 +490,7 @@ diff -ru ..\release\mt-st-0.9b/stinit.def.examples ./stinit.def.examples + * + * Version $Id$ + * -+ * Copyright (C) 2006 Kern Sibbald ++ * Copyright (C) 2006 Free Software Foundation Europe e.V. + * + * This file was contributed to the Bacula project by Robert Nelson. + * @@ -506,7 +506,7 @@ diff -ru ..\release\mt-st-0.9b/stinit.def.examples ./stinit.def.examples + * Robert Nelson . + */ +/* -+ Copyright (C) 2006 Kern Sibbald ++ Copyright (C) 2006 Free Software Foundation Europe e.V. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License diff --git a/bacula/src/win32/stored/baculasd/winabout.h b/bacula/src/win32/stored/baculasd/winabout.h index 46a6e94e3d..5a67c64b7e 100644 --- a/bacula/src/win32/stored/baculasd/winabout.h +++ b/bacula/src/win32/stored/baculasd/winabout.h @@ -1,24 +1,34 @@ /* - Copyright (C) 2000-2004 Kern Sibbald and John Walker + This file was inspired by the VNC Win32 code by ATT + + Kern E. Sibbald, 2000 +*/ +/* + Bacula® - The Network Backup Solution - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + 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 GNU General Public License for more details. - You should have received a copy of the GNU General Public - License along with this program; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. - - This file was inspired by the VNC Win32 code by ATT + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - Kern E. Sibbald, 2000 + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. */ diff --git a/bacula/src/win32/stored/baculasd/winbacula.h b/bacula/src/win32/stored/baculasd/winbacula.h index b1674cc662..04572de8fc 100644 --- a/bacula/src/win32/stored/baculasd/winbacula.h +++ b/bacula/src/win32/stored/baculasd/winbacula.h @@ -25,7 +25,7 @@ // by Kern E. Sibbald. Many thanks to ATT and James Weatherall, // the original author, for providing an excellent template. // -// Copyright (2000) Kern E. Sibbald +// Copyright (C) 2000-2006 Free Software Foundation Europe e.V. // diff --git a/bacula/src/win32/stored/baculasd/winmain.cpp b/bacula/src/win32/stored/baculasd/winmain.cpp index 3230340c68..bbe76b091a 100644 --- a/bacula/src/win32/stored/baculasd/winmain.cpp +++ b/bacula/src/win32/stored/baculasd/winmain.cpp @@ -1,19 +1,36 @@ /* - Copyright (C) 2000-2006 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - 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 - the file LICENSE for additional details. + Kern Sibbald This file is patterned after the VNC Win32 code by ATT - */ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + 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 GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ + #include #include diff --git a/bacula/src/win32/stored/baculasd/winservice.cpp b/bacula/src/win32/stored/baculasd/winservice.cpp index 5e23337fcb..535d9bd9d5 100644 --- a/bacula/src/win32/stored/baculasd/winservice.cpp +++ b/bacula/src/win32/stored/baculasd/winservice.cpp @@ -25,7 +25,7 @@ // by Kern E. Sibbald. Many thanks to ATT and James Weatherall, // the original author, for providing an excellent template. // -// Copyright (C) 2000-2006 Kern E. Sibbald +// Copyright (C) 2000-2006 Free Software Foundataion Europe e.V. // diff --git a/bacula/src/win32/stored/baculasd/winservice.h b/bacula/src/win32/stored/baculasd/winservice.h index da21dcc561..36b31830db 100644 --- a/bacula/src/win32/stored/baculasd/winservice.h +++ b/bacula/src/win32/stored/baculasd/winservice.h @@ -25,7 +25,7 @@ // by Kern E. Sibbald. Many thanks to ATT and James Weatherall, // the original author, for providing an excellent template. // -// Copyright (C) 2000-2006 Kern E. Sibbald +// Copyright (C) 2000-2006 Free Software Foundation Europe e.V. // diff --git a/bacula/src/win32/stored/baculasd/winstat.cpp b/bacula/src/win32/stored/baculasd/winstat.cpp index 6d174da17b..97ce3f0b31 100644 --- a/bacula/src/win32/stored/baculasd/winstat.cpp +++ b/bacula/src/win32/stored/baculasd/winstat.cpp @@ -3,26 +3,35 @@ * * Inspired from the VNC code by ATT. * - * Copyright (2000) Kern E. Sibbald * */ /* - Copyright (C) 2000-2003 Kern Sibbald and John Walker + Bacula® - The Network Backup Solution - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. + Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - 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 - GNU General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + 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 GNU + General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ #include "bacula.h" #include "winbacula.h" diff --git a/bacula/src/win32/stored/baculasd/winstat.h b/bacula/src/win32/stored/baculasd/winstat.h index ffe22c41dd..12839ff3e7 100644 --- a/bacula/src/win32/stored/baculasd/winstat.h +++ b/bacula/src/win32/stored/baculasd/winstat.h @@ -3,24 +3,32 @@ * */ /* - Copyright (C) 2000-2003 Kern Sibbald and John Walker + Bacula® - The Network Backup Solution - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + 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 GNU General Public License for more details. - You should have received a copy of the GNU General Public - License along with this program; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - */ + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ class bacStatus; diff --git a/bacula/src/win32/stored/baculasd/wintray.cpp b/bacula/src/win32/stored/baculasd/wintray.cpp index 2b98efd935..f755d17eb1 100644 --- a/bacula/src/win32/stored/baculasd/wintray.cpp +++ b/bacula/src/win32/stored/baculasd/wintray.cpp @@ -25,7 +25,7 @@ // by Kern E. Sibbald. Many thanks to ATT and James Weatherall, // the original author, for providing an excellent template. // -// Copyright 2000-2004, Kern E. Sibbald +// Copyright (C) 2000-2006, Free Software Foundation Europe e.V. // diff --git a/bacula/src/win32/stored/baculasd/wintray.h b/bacula/src/win32/stored/baculasd/wintray.h index 44ad83c570..2853a83224 100644 --- a/bacula/src/win32/stored/baculasd/wintray.h +++ b/bacula/src/win32/stored/baculasd/wintray.h @@ -25,7 +25,7 @@ // by Kern E. Sibbald. Many thanks to ATT and James Weatherall, // the original author, for providing an excellent template. // -// Copyright (2000) Kern E. Sibbald +// Copyright (C) 2000-2006 Free Software Foundation Europe e.V. // diff --git a/bacula/technotes-1.39 b/bacula/technotes-1.39 index c98ffb5303..9ae6f0f733 100644 --- a/bacula/technotes-1.39 +++ b/bacula/technotes-1.39 @@ -1,6 +1,17 @@ Technical notes on version 1.39 General: +14Dec06 +kes Complete hopefully the last of the copyright transfer changes. +kes Separate NumVolumes in SD to NumReadVolumes and NumWrite volumes so + that migration writing to multiple volumes doesn't mess up reading + Volumes. This should fix bug #720 -- multivol migration fails. +kes Make migration SQL look only for Type='B' jobs to migrate. This should + fix bug #724 jobs getting migrated twice. +kes Convert remaining dev_cap(dev, ...) to use dev->has_cap(). +kes Implement dev->clear_cap() and dev->set_cap() methods. +kes Turn off disk seeking on restore for DVDs since I am not 100% + sure it works. 13Dec06 kes Implement code that should properly set that a job was migrated, if the migration was successful even if there were no file to -- 2.39.5