Diff for /foxridge-archiver/unarchiver.pl between versions 1.2 and 1.3

version 1.2, 2004/09/23 19:55:44 version 1.3, 2005/01/21 14:33:26
Line 18  $|=1; Line 18  $|=1;
 #  #
   
 # program version  # program version
 my $version = "0.2 (23.9.2004)";  my $version = "0.3 (20.1.2004)";
   
 # read command line parameters  # read command line parameters
 my $args = parseargs;  my $args = parseargs;
Line 79  if (! -f $metafile) { Line 79  if (! -f $metafile) {
     exit 1;      exit 1;
 }  }
   
 # construct document's parent dir  
 my $docparent = $docdir;  
 $docparent =~ s!/[^/]+$!!;  
   
 #######################################################  #######################################################
 # internal variables  # internal variables
 #  #
Line 96  my $warncnt = 0; Line 92  my $warncnt = 0;
 # subroutines  # subroutines
 #  #
   
   # construct document's parent dir
   sub get_parent {
       my ($dirname) = @_;
       my $dirparent = $dirname;
       $dirparent =~ s!/[^/]+$!!;
       return $dirparent;
   }
   
   
 #  #
 # $files = read_resource_meta($rootnode)  # $files = read_resource_meta($rootnode)
Line 172  sub read_resource_meta { Line 176  sub read_resource_meta {
   
   
 #  #
 # $%files = run_retrieve  # $num_files = run_retrieve($docdir, $docmount, \%files)
 #  #
 # runs the retriever program on $docdir and returns a list of archived files  # Runs the retriever program on $docdir and returns the number of unarchived files.
   # All filenames are put in %files. 
   # $docmount is the mount point of the doc partition in cases when the new mount point
   # is different.
 #  #
 # Sample output:  # Sample output:
 # (old!) Retrieving          17,234 /mpiwg/archive/data/test/auto_titit_123/pageimg/essen-wind1.jpg [Done]  # (old!) Retrieving          17,234 /mpiwg/archive/data/test/auto_titit_123/pageimg/essen-wind1.jpg [Done]
 # Retrieving      42,406,326 /mpiwg/archive/data/library/B980G582/raw/00015.tif --> /mpiwg/archive/data/library/B980G582/raw/00015.tif [Done]  # Retrieving      42,406,326 /mpiwg/archive/data/library/B980G582/raw/00015.tif --> /mpiwg/archive/data/library/B980G582/raw/00015.tif [Done]
 sub run_retrieve {  sub run_retrieve {
     my %files;      my ($archdir, $archmount, $files) = @_;
       my $archparent;
       if ($archmount eq $archdir) {
       # no explicit mount point
       $archparent = get_parent($archdir);
       } else {
       # destination dir is mount point
       $archparent = $archmount;
       }
   
     print LOG "START unarchive $version on ", scalar localtime, "\n";      print LOG "START unarchive $version on ", scalar localtime, "\n";
     my $archcmd = $archprog;      my $archcmd = $archprog;
     $archcmd .= " retrieve -subdir=yes -replace=all";      $archcmd .= " retrieve -subdir=yes -replace=all";
     $archcmd .= " -description='$archname'";      $archcmd .= " -description='$archname'"; # archive name
     $archcmd .= " '$docdir/'"; # archive name      $archcmd .= " '$archmount/'"; # archive mount point
     $archcmd .= " '$docparent/'"; # destination dir name      $archcmd .= " '$archparent/'"; # destination dir name
   
     my $archcnt = 0;      my $archcnt = 0;
       my $numfiles = 0;
     print LOG "CMD: $archcmd\n";      print LOG "CMD: $archcmd\n";
     if (open ARCH, "$archcmd 2>&1 |") {      if (open ARCH, "$archcmd 2>&1 |") {
     while (<ARCH>) {      while (<ARCH>) {
Line 207  sub run_retrieve { Line 224  sub run_retrieve {
         $size =~ s/,//g;          $size =~ s/,//g;
         logger("DEBUG", "  RETRIEVE: file '$file'");          logger("DEBUG", "  RETRIEVE: file '$file'");
         $archcnt++;          $archcnt++;
         if ($files{$file}) {          if ($$files{$file}) {
             logger("WARNING", "file $file seems to be archived multiple times.");              logger("WARNING", "file $file seems to be archived multiple times.");
             $warncnt++;              $warncnt++;
         }           } 
         $files{$file} = [$size];          $$files{$file} = [$size];
         }          }
     }      }
     logger("INFO", "$archcnt archives of " . (scalar keys %files) . " files.");      $numfiles =  (scalar keys %$files);
       logger("INFO", "$archcnt archives of $numfiles files (in $archmount).");
     } else {      } else {
     logger("ABORT", "unable to start archive command '$archcmd'!!");      logger("ABORT", "unable to start archive command '$archcmd'!!");
     exit 1;      exit 1;
     }      }
     return \%files;      return $numfiles;
 }  }
   
   
Line 286  if (($user)&&($user ne "archive")&&($use Line 304  if (($user)&&($user ne "archive")&&($use
   
 # use checkarchive first  # use checkarchive first
 if (system("$checkprog $docdir >/dev/null") == 0) {  if (system("$checkprog $docdir >/dev/null") == 0) {
     logger("INFO", "archive '$docdir' check OK");      logger("INFO", "archive \"$docdir\" check OK");
 } else {  } else {
     logger("ABORT", "archive '$docdir' check failed!!");      logger("ABORT", "archive \"$docdir\" check failed!!");
     exit 1;      exit 1;
 }  }
   
Line 309  if (-f "$docdir/.archived") { Line 327  if (-f "$docdir/.archived") {
   
 logger("INFO", "$num_archived_files files to retrieve.");  logger("INFO", "$num_archived_files files to retrieve.");
   
   # save current index.meta
   park_file($metafile); 
   
 # retrieve  # retrieve
 my $retrieved_files = run_retrieve;  my %retrieved_files = ();
   my $archcnt = 0;
   
   if ($docdir =~ /\/mpiwg\/archive\/data\/(.*)/) {
       # TSM needs two different paths because of historical mount points :-(
       # try the new one first
       $archcnt = run_retrieve($docdir, "/mpiwg/archive", \%retrieved_files);
       if ($archcnt == 0) {
       # and then the old one
       $archcnt = run_retrieve($docdir, "/mpiwg/archive/data", \%retrieved_files);
       }
   } else {
       # otherwise we assume that it works
       $archcnt += run_retrieve($docdir, $docdir, \%retrieved_files);
   }
   
   # restore current index.meta
   unpark_file($metafile);
   
 my $num_arch_files = (scalar keys %$retrieved_files);  if ($archcnt == 0) {
 if ($num_arch_files == 0) {  
     logger("ABORT", "no files retrieved!!");      logger("ABORT", "no files retrieved!!");
     exit 1;      exit 1;
 }  }
 logger("INFO", "$num_arch_files files retrieved");  logger("INFO", "$archcnt files retrieved");
   
 # check list of archived files  # check list of archived files
 check_files($archived_files, $retrieved_files);  check_files($archived_files, \%retrieved_files);
   
 # rewrite index.meta file  # rewrite index.meta file
 write_xml($document, $metafile);  write_xml($document, $metafile);
Line 328  write_xml($document, $metafile); Line 365  write_xml($document, $metafile);
 logger("INFO", "$warncnt warnings");  logger("INFO", "$warncnt warnings");
 logger("INFO", "$errcnt errors");  logger("INFO", "$errcnt errors");
 if ($errcnt == 0) {  if ($errcnt == 0) {
     logger("DONE", "" . (scalar keys %$retrieved_files) . " archived files retrieved");      logger("DONE", "$archcnt archived files retrieved");
 } else {  } else {
     logger("ABORT", "there were $errcnt errors!!");      logger("ABORT", "there were $errcnt errors!!");
     exit 1;      exit 1;

Removed from v.1.2  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>