X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=perl%2FAmanda%2FTapelist.swg;h=0ce1987bb8e94e4ec189a154180649ed1f6662a3;hb=949b8910a5e23c4285d0b1aedacfc82a14dc97a5;hp=84eeee6df103a819c923abb8db53d3e898edc6b2;hpb=011a59f5a54864108a16af570a6b287410597cc2;p=debian%2Famanda diff --git a/perl/Amanda/Tapelist.swg b/perl/Amanda/Tapelist.swg index 84eeee6..0ce1987 100644 --- a/perl/Amanda/Tapelist.swg +++ b/perl/Amanda/Tapelist.swg @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Zmanda, Inc. All Rights Reserved. + * Copyright (c) 2008-2012 Zmanda, Inc. All Rights Reserved. * * 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 published @@ -124,18 +124,37 @@ sub remove_tapelabel { sub add_tapelabel { my $self = shift; - my ($datestamp, $label, $comment, $reuse, $meta, $barcode) = @_; - # $meta is unused + my ($datestamp, $label, $comment, $reuse, $meta, $barcode, $blocksize) = @_; $reuse = 1 if !defined $reuse; # prepend this (presumably new) volume to the beginning of the list - unshift @{$self->{'tles'}}, { - 'datestamp' => $datestamp, - 'label' => $label, - 'reuse' => $reuse, - 'barcode' => $barcode, - 'comment' => $comment, + my $tle = { + 'datestamp' => $datestamp, + 'label' => $label, + 'reuse' => $reuse, + 'barcode' => $barcode, + 'meta' => $meta, + 'blocksize' => $blocksize, + 'comment' => $comment, }; + my $tles = $self->{'tles'}; + if (!defined $tles->[0] || + $tles->[0]->{'datestamp'} le $datestamp) { + unshift @{$tles}, $tle; + } elsif (defined $tles->[0] && + $tles->[@$tles-1]->{'datestamp'} gt $datestamp) { + push @{$tles}, $tle; + } else { + my $added = 0; + for my $i (0..(@$tles-1)) { + if ($tles->[$i]->{'datestamp'} le $datestamp) { + splice @{$tles}, $i, 0, $tle; + $added = 1; + last; + } + } + push @{$tles}, $tle if !$added; + } $self->_update_positions(); } @@ -153,8 +172,10 @@ sub write { my $label = $tle->{'label'}; my $reuse = $tle->{'reuse'} ? 'reuse' : 'no-reuse'; my $barcode = (defined $tle->{'barcode'})? (" BARCODE:" . $tle->{'barcode'}) : ''; + my $meta = (defined $tle->{'meta'})? (" META:" . $tle->{'meta'}) : ''; + my $blocksize = (defined $tle->{'blocksize'})? (" BLOCKSIZE:" . $tle->{'blocksize'}) : ''; my $comment = (defined $tle->{'comment'})? (" #" . $tle->{'comment'}) : ''; - $result &&= print $fhn "$datestamp $label $reuse$barcode$comment\n"; + $result &&= print $fhn "$datestamp $label $reuse$barcode$meta$blocksize$comment\n"; } my $result_close = close($fhn); $result &&= $result_close; @@ -206,14 +227,16 @@ sub _read_tapelist { my @tles; open(my $fh, "<", $self->{'filename'}) or return $self; while (my $line = <$fh>) { - my ($datestamp, $label, $reuse, $barcode, $comment) - = $line =~ m/^([0-9]*)\s([^\s]*)\s(reuse|no-reuse)\s*(?:BARCODE:([^\s]*))?\s*(?:\#(.*))?$/mx; + my ($datestamp, $label, $reuse, $barcode, $meta, $blocksize, $comment) + = $line =~ m/^([0-9]*)\s([^\s]*)\s(reuse|no-reuse)\s*(?:BARCODE:([^\s]*))?\s*(?:META:([^\s]*))?\s*(?:BLOCKSIZE:([^\s]*))?\s*(?:\#(.*))?$/mx; next if !defined $datestamp; # silently filter out bogus lines push @tles, { 'datestamp' => $datestamp, 'label' => $label, 'reuse' => ($reuse eq 'reuse'), 'barcode' => $barcode, + 'meta' => $meta, + 'blocksize' => $blocksize, 'comment' => $comment, }; } @@ -246,6 +269,7 @@ sub _update_positions { %} char *get_last_reusable_tape_label(int skip); +%newobject list_new_tapes; char *list_new_tapes(int nb); /* C functions -- should be called *only* from within this module */