Imported Upstream version 3.3.0
[debian/amanda] / perl / Amanda / Tapelist.swg
index 84eeee6df103a819c923abb8db53d3e898edc6b2..d15217abfc8d09f90f2912153ca261db30a4e5ec 100644 (file)
@@ -125,17 +125,35 @@ sub remove_tapelabel {
 sub add_tapelabel {
     my $self = shift;
     my ($datestamp, $label, $comment, $reuse, $meta, $barcode) = @_;
-    # $meta is unused
     $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,
+        '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 +171,9 @@ 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 $comment = (defined $tle->{'comment'})? (" #" . $tle->{'comment'}) : '';
-       $result &&= print $fhn "$datestamp $label $reuse$barcode$comment\n";
+       $result &&= print $fhn "$datestamp $label $reuse$barcode$meta$comment\n";
     }
     my $result_close = close($fhn);
     $result &&= $result_close;
@@ -206,14 +225,15 @@ 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, $comment)
+           = $line =~ m/^([0-9]*)\s([^\s]*)\s(reuse|no-reuse)\s*(?:BARCODE:([^\s]*))?\s*(?:META:([^\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,
            'comment' => $comment,
        };
     }