Changeset 37200 for main


Ignore:
Timestamp:
2023-01-28T23:08:43+13:00 (15 months ago)
Author:
davidb
Message:

New minus option added in to allow control over whether hardlinking or copying of files is used; also removed some deprecated functions from FileUtils.pm

Location:
main/trunk/greenstone2/perllib
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/perllib/FileUtils.pm

    r37194 r37200  
    244244}
    245245
    246 sub copyFilesDEPRECATED
    247 {
    248   my $dest = pop (@_);
    249   my (@srcfiles) = @_;
    250 
    251   # remove trailing slashes from source and destination files
    252   $dest =~ s/[\\\/]+$//;
    253   map {$_ =~ s/[\\\/]+$//;} @srcfiles;
    254 
    255   # a few sanity checks
    256   if (scalar (@srcfiles) == 0)
    257   {
    258     print STDERR "FileUtils::copyFiles() no destination directory given\n";
    259     return 0;
    260   }
    261   elsif ((scalar(@srcfiles) > 1) && (!-d $dest))
    262   {
    263     print STDERR "FileUtils::copyFiles() if multiple source files are given the destination must be a directory\n";
    264     return 0;
    265   }
    266 
    267   my $had_an_error = 0;
    268  
    269   # copy the files
    270   foreach my $file (@srcfiles)
    271   {
    272     my $tempdest = $dest;
    273     if (-d $tempdest)
    274     {
    275       my ($filename) = $file =~ /([^\\\/]+)$/;
    276       $tempdest .= "/$filename";
    277     }
    278     if (!-e $file)
    279     {
    280     print STDERR "FileUtils::copyFiles() $file does not exist\n";
    281     $had_an_error = 1;
    282     }
    283     elsif (!-f $file)
    284     {
    285     print STDERR "FileUtils::copyFiles() $file is not a regular file\n";
    286     $had_an_error = 1;
    287     }
    288     else
    289     {
    290     my $success = &File::Copy::copy ($file, $tempdest);
    291     if (!$success) {
    292         $had_an_error = 1;
    293     }
    294     }
    295   }
    296 
    297   if ($had_an_error) {
    298       return 0;
    299   }
    300   else {
    301       # true => everything OK
    302       return 1;
    303   }
    304 
    305 }
    306246## copyFiles()
    307247
     
    391331    return ($ret_val_success,$fullpath_files_and_dirs);
    392332}
    393 
    394 sub readdirFullpathDEPRECATED
    395 {
    396     my ($src_dir_fullpath,$options) = @_;
    397    
    398     my $ret_val_success = 1; # default (true) is to assume things will work out!
    399    
    400     my $fullpath_files_and_dirs = [];
    401 
    402     my $exclude_filter_re = undef;
    403     my $include_filter_re = undef;
    404     if (defined $options) {
    405     $exclude_filter_re = $options->{'exclude_filter_re'};
    406     $include_filter_re = $options->{'include_filter_re'};
    407     }
    408    
    409     # get the contents of this directory
    410     if (!opendir(INDIR, $src_dir_fullpath))
    411     {
    412     print STDERR "FileUtils::readdirFullpath() could not open directory $src_dir_fullpath\n";
    413     $ret_val_success = 0;   
    414     }
    415     else
    416     {
    417     my @next_files_and_dirs = readdir(INDIR);
    418     closedir (INDIR);
    419 
    420     foreach my $f_or_d (@next_files_and_dirs)
    421     {
    422         next if $f_or_d =~ /^\.\.?$/;
    423         next if (defined $exclude_filter_re && ($f_or_d =~ m/$exclude_filter_re/));
    424        
    425         if ((!defined $include_filter_re) || ($f_or_d =~ m/$include_filter_re/)) {
    426         my $ff_or_dd = &filenameConcatenate($src_dir_fullpath, $f_or_d);
    427         push(@$fullpath_files_and_dirs,$ff_or_dd);
    428         }
    429     }
    430 
    431     }
    432 
    433     return ($ret_val_success,$fullpath_files_and_dirs);
    434 }
    435 
    436333
    437334           
     
    646543}
    647544
    648 sub copyFilesRecursiveDEPRECATED
    649 {
    650   my $dest = pop (@_);
    651   my (@srcfiles) = @_;
    652 
    653   # a few sanity checks
    654   if (scalar (@srcfiles) == 0)
    655   {
    656     print STDERR "FileUtils::copyFilesRecursive() no destination directory given\n";
    657     return;
    658   }
    659   elsif (-f $dest)
    660   {
    661     print STDERR "FileUtils::copyFilesRecursive() destination must be a directory\n";
    662     return;
    663   }
    664 
    665   # create destination directory if it doesn't exist already
    666   if (! -d $dest)
    667   {
    668     my $store_umask = umask(0002);
    669     mkdir ($dest, 0777);
    670     umask($store_umask);
    671   }
    672 
    673   # copy the files
    674   foreach my $file (@srcfiles)
    675   {
    676 
    677     if (!-e $file)
    678     {
    679       print STDERR "FileUtils::copyFilesRecursive() $file does not exist\n";
    680     }
    681     elsif (-d $file)
    682     {
    683       # make the new directory
    684       my ($filename) = $file =~ /([^\\\/]*)$/;
    685       $dest = &filenameConcatenate($dest, $filename);
    686       my $store_umask = umask(0002);
    687       mkdir ($dest, 0777);
    688       umask($store_umask);
    689 
    690       # get the contents of this directory
    691       if (!opendir (INDIR, $file))
    692       {
    693         print STDERR "FileUtils::copyFilesRecursive() could not open directory $file\n";
    694       }
    695       else
    696       {
    697         my @filedir = readdir (INDIR);
    698         closedir (INDIR);
    699         foreach my $f (@filedir)
    700         {
    701           next if $f =~ /^\.\.?$/;
    702           # copy all the files in this directory
    703           my $ff = &filenameConcatenate($file, $f);
    704           &copyFilesRecursiveDEPRECATED($ff ,$dest);
    705         }
    706       }
    707 
    708     }
    709     else
    710     {
    711       &copyFiles($file, $dest);
    712     }
    713   }
    714 }
    715545## copyFilesRecursive()
    716546
     
    733563}
    734564
    735 sub copyFilesRecursiveNoSVNDEPRECATED
     565## copyFilesRecursiveNoSVN()
     566
     567
     568## @function copyFilesRecursiveTopLevel()
     569#
     570# copies a directory and its contents, excluding subdirectories, into a new directory
     571#
     572# another candidate for merging in with copyFilesRecursive() - jmt12
     573#
     574sub copyFilesRecursiveTopLevel
    736575{
    737576  my $dest = pop (@_);
    738577  my (@srcfiles) = @_;
    739578
    740   # a few sanity checks
    741   if (scalar (@srcfiles) == 0)
    742   {
    743     print STDERR "FileUtils::copyFilesRecursiveNoSVN() no destination directory given\n";
    744     return;
    745   }
    746   elsif (-f $dest)
    747   {
    748     print STDERR "FileUtils::copyFilesRecursiveNoSVN() destination must be a directory\n";
    749     return;
    750   }
    751 
    752   # create destination directory if it doesn't exist already
    753   if (! -d $dest)
    754   {
    755     my $store_umask = umask(0002);
    756     mkdir ($dest, 0777);
    757     umask($store_umask);
    758   }
    759 
    760   # copy the files
    761   foreach my $file (@srcfiles)
    762   {
    763     if (!-e $file)
    764     {
    765       print STDERR "copyFilesRecursiveNoSVN() $file does not exist\n";
    766     }
    767     elsif (-d $file)
    768     {
    769       # make the new directory
    770       my ($filename) = $file =~ /([^\\\/]*)$/;
    771       $dest = &filenameConcatenate($dest, $filename);
    772       my $store_umask = umask(0002);
    773       mkdir ($dest, 0777);
    774       umask($store_umask);
    775 
    776       # get the contents of this directory
    777       if (!opendir (INDIR, $file))
    778       {
    779         print STDERR "copyFilesRecursiveNoSVN() could not open directory $file\n";
    780       }
    781       else
    782       {
    783         my @filedir = readdir (INDIR);
    784         closedir (INDIR);
    785         foreach my $f (@filedir)
    786         {
    787           next if $f =~ /^\.\.?$/;
    788           next if $f =~ /^\.svn$/;
    789           # copy all the files in this directory
    790           my $ff = &filenameConcatenate($file, $f);
    791           # util.pm version incorrectly called cp_r here - jmt12
    792           &copyFilesRecursiveNoSVNDEPRECATED($ff ,$dest);
    793         }
    794       }
    795     }
    796     else
    797     {
    798       &copyFiles($file, $dest);
    799     }
    800   }
    801 }
    802 ## copyFilesRecursiveNoSVN()
    803 
    804 
    805 ## @function copyFilesRecursiveTopLevel()
    806 #
    807 # copies a directory and its contents, excluding subdirectories, into a new directory
    808 #
    809 # another candidate for merging in with copyFilesRecursive() - jmt12
    810 #
    811 sub copyFilesRecursiveTopLevel
    812 {
    813   my $dest = pop (@_);
    814   my (@srcfiles) = @_;
    815 
    816579  return _copyFilesRecursiveGeneral(\@srcfiles,$dest, 0, { 'copytype' => "toplevel" } );
    817580}
    818581
    819 sub copyFilesRecursiveTopLevelDEPRECATED
    820 {
    821   my $dest = pop (@_);
    822   my (@srcfiles) = @_;
    823 
    824   # a few sanity checks
    825   if (scalar (@srcfiles) == 0)
    826   {
    827     print STDERR "FileUtils::copyFilesRecursiveTopLevel() no destination directory given\n";
    828     return;
    829   }
    830   elsif (-f $dest)
    831   {
    832     print STDERR "FileUtils::copyFilesRecursiveTopLevel() destination must be a directory\n";
    833     return;
    834   }
    835 
    836   # create destination directory if it doesn't exist already
    837   if (! -d $dest)
    838   {
    839     my $store_umask = umask(0002);
    840     mkdir ($dest, 0777);
    841     umask($store_umask);
    842   }
    843 
    844   # copy the files
    845   foreach my $file (@srcfiles)
    846   {
    847     if (!-e $file)
    848     {
    849       print STDERR "FileUtils::copyFilesRecursiveTopLevel() $file does not exist\n";
    850     }
    851     elsif (-d $file)
    852     {
    853       # make the new directory
    854       my ($filename) = $file =~ /([^\\\/]*)$/;
    855       $dest = &filenameConcatenate($dest, $filename);
    856       my $store_umask = umask(0002);
    857       mkdir ($dest, 0777);
    858       umask($store_umask);
    859 
    860       # get the contents of this directory
    861       if (!opendir (INDIR, $file))
    862       {
    863         print STDERR "FileUtils::copyFilesRecursiveTopLevel() could not open directory $file\n";
    864       }
    865       else
    866       {
    867         my @filedir = readdir (INDIR);
    868         closedir (INDIR);
    869         foreach my $f (@filedir)
    870         {
    871           next if $f =~ /^\.\.?$/;
    872 
    873           # copy all the files in this directory, but not directories
    874           my $ff = &filenameConcatenate($file, $f);
    875           if (-f $ff)
    876           {
    877             &copyFiles($ff, $dest);
    878             #&cp_r ($ff, $dest);
    879           }
    880         }
    881       }
    882     }
    883     else
    884     {
    885       &copyFiles($file, $dest);
    886     }
    887   }
    888 }
    889582## copyFilesRecursiveTopLevel()
    890583
     
    15991292    return $files_and_dirs;
    16001293}
    1601 
    1602 
    1603 sub readDirectoryDEPRECATED
    1604 {
    1605   my $path = shift(@_);
    1606   my @files;
    1607   if (opendir(DH, $path))
    1608   {
    1609     @files = readdir(DH);
    1610     close(DH);
    1611   }
    1612   else
    1613   {
    1614     die("Error! Failed to open directory list files: " . $path . "\n");
    1615   }
    1616   return \@files;
    1617 }
    16181294## readDirectory()
    16191295
  • main/trunk/greenstone2/perllib/inexport.pm

    r37194 r37200  
    134134       'reqd' => "no",
    135135       'hiddengli' => "yes" },
     136     { 'name' => 'assocfile_copymode',
     137       'desc' => "{import.assocfile_copymode}",
     138       'type' => 'enum',
     139       'list' => [ { 'name' => "copy",      'desc' => "{import.assocfile_copymode_copy}"     },
     140            { 'name' => "hardlink",  'desc' => "{import.assocfile_copymode_hardlink}" } ],
     141       'deft' => 'copy',
     142       'reqd' => 'yes',
     143       'hiddengli' => 'no'},     
    136144     { 'name' => "language",
    137145       'desc' => "{scripts.language}",
     
    787795    if (defined $collectcfg->{'plugout'} && $collectcfg->{'plugout'} =~ /^(GreenstoneXML|.*METS|DSpace|MARCXML)Plugout/) {
    788796        $plugout = $collectcfg->{'plugout'};
    789         print STDERR "Using plugout specified in collect.cfg: $collectcfg->{'plugout'}\n";
     797        print STDERR "Using plugout specified in collect.cfg/collectionConfig.xml: $collectcfg->{'plugout'}\n";
    790798    }
    791799    else {
     
    805813    push @$plugout,("-gzip_output")                if ($gzip);
    806814    push @$plugout,("-output_handle",$out)         if (defined $out);
    807     push @$plugout,("-site",$self->{'site'})  if (defined $self->{'site'});
    808 
     815    push @$plugout,("-site",$self->{'site'})       if (defined $self->{'site'});
    809816    push @$plugout,("-xslt_file",$xsltfile)        if (defined $xsltfile && $xsltfile ne "");
     817
     818    push @$plugout,("-assocfile_copymode",$self->{'assocfile_copymode'})  if (defined $self->{'assocfile_copymode'});
    810819    push @$plugout, ("-no_auxiliary_databases") if ($generate_auxiliary_files == 0);
     820   
    811821    if ($inexport_mode eq "import") {
    812822    if ($plugout_name =~ m/^GreenstoneXMLPlugout$/) {
  • main/trunk/greenstone2/perllib/plugouts/BasePlugout.pm

    r36106 r37200  
    4545
    4646my $arguments = [
    47         { 'name' => "site",
    48       'desc' => "{BasPlugout.site}",
    49       'type' => "string",
    50       'reqd' => "no",
    51       'hiddengli' => "yes" },
     47       { 'name' => "site",
     48    'desc' => "{BasPlugout.site}",
     49    'type' => "string",
     50    'reqd' => "no",
     51    'hiddengli' => "yes" },
    5252       { 'name' => "xslt_file",
    5353    'desc' => "{BasPlugout.xslt_file}",
    5454    'type' => "string",
    5555    'reqd' => "no",
    56      'deft' => "",
     56    'deft' => "",
    5757    'hiddengli' => "no"},
    5858       { 'name' => "subdir_split_length",
    59      'desc' => "{BasPlugout.subdir_split_length}",
    60      'type' => "int",
    61      'reqd' => "no",
    62          'deft' => "8",
    63      'hiddengli' => "no"},
     59    'desc' => "{BasPlugout.subdir_split_length}",
     60    'type' => "int",
     61    'reqd' => "no",
     62        'deft' => "8",
     63    'hiddengli' => "no"},
    6464       { 'name' => "subdir_hash_prefix",
    65      'desc' => "{BasPlugout.subdir_hash_prefix}",
    66      'type' => "flag",
    67      'reqd' => "no",
    68          'deft' => "0",
    69      'hiddengli' => "no"},
     65    'desc' => "{BasPlugout.subdir_hash_prefix}",
     66    'type' => "flag",
     67    'reqd' => "no",
     68        'deft' => "0",
     69    'hiddengli' => "no"},
    7070       { 'name' => "gzip_output",
    7171    'desc' => "{BasPlugout.gzip_output}",
     
    7373    'reqd' => "no", 
    7474        'hiddengli' => "no"},
    75         { 'name' => "verbosity",
     75       { 'name' => "verbosity",
    7676    'desc' => "{BasPlugout.verbosity}",
    7777    'type' => "int",
     
    7979    'reqd' => "no", 
    8080        'hiddengli' => "no"},
    81       { 'name' => "output_info",
     81       { 'name' => "output_info",
    8282    'desc' => "{BasPlugout.output_info}",
    8383    'type' => "string",   
     
    9191    'hiddengli' => "yes"},
    9292       { 'name' => "debug",
    93      'desc' => "{BasPlugout.debug}",
    94      'type' => "flag",
    95      'reqd' => "no",
    96      'hiddengli' => "yes"},
     93    'desc' => "{BasPlugout.debug}",
     94    'type' => "flag",
     95    'reqd' => "no",
     96    'hiddengli' => "yes"},
    9797       { 'name' => 'no_rss',
    98          'desc' => "{BasPlugout.no_rss}",
    99          'type' => 'flag',
    100          'reqd' => 'no',
    101          'hiddengli' => 'yes'},
     98        'desc' => "{BasPlugout.no_rss}",
     99        'type' => 'flag',
     100        'reqd' => 'no',
     101        'hiddengli' => 'yes'},
    102102       { 'name' => 'rss_title',
    103          'desc' => "{BasPlugout.rss_title}",
    104          'type' => 'string',
    105      'deft' => 'dc.Title',
    106          'reqd' => 'no',
    107          'hiddengli' => 'yes'},
    108     { 'name' => "no_auxiliary_databases",
    109       'desc' => "{BasPlugout.no_auxiliary_databases}",
    110       'type' => "flag",
    111       'reqd' => "no",
    112       'hiddengli' => "yes"}
     103        'desc' => "{BasPlugout.rss_title}",
     104        'type' => 'string',
     105    'deft' => 'dc.Title',
     106        'reqd' => 'no',
     107        'hiddengli' => 'yes'},
     108       { 'name' => 'assocfile_copymode',
     109        'desc' => "{import.assocfile_copymode}",
     110    'type' => 'enum',
     111    'list' => [ { 'name' => "copy",      'desc' => "{import.assocfile_copymode_copy}"     },
     112            { 'name' => "hardlink",  'desc' => "{import.assocfile_copymode_hardlink}" } ],
     113    'deft' => 'copy',
     114        'reqd' => 'yes',
     115        'hiddengli' => 'no'},
     116       { 'name' => "no_auxiliary_databases",
     117    'desc' => "{BasPlugout.no_auxiliary_databases}",
     118        'type' => "flag",
     119        'reqd' => "no",
     120        'hiddengli' => "yes"}
    113121
    114122];
     
    169177    }
    170178
    171  
     179    
    172180    if(defined $self->{'xslt_file'} &&  $self->{'xslt_file'} ne "")
    173181    {
     
    812820        $filename = &FileUtils::filenameConcatenate($working_dir, $afile);
    813821
    814             &FileUtils::hardLink($real_filename, $filename, $self->{'verbosity'});
     822        if ($self->{'assocfile_copymode'} eq "hardlink") {
     823        &FileUtils::hardLink($real_filename, $filename, $self->{'verbosity'}); # Consider adding in 'strict' option??
     824        }
     825        else {
     826        &FileUtils::copyFilesGeneral([$real_filename], $filename); # Consider adding in 'strict' option??
     827        }
    815828
    816829        $doc_obj->add_utf8_metadata ($doc_obj->get_top_section(),
  • main/trunk/greenstone2/perllib/plugouts/DSpacePlugout.pm

    r32511 r37200  
    290290   
    291291    $filename = &FileUtils::filenameConcatenate($working_dir, $tail_filename);
    292     &FileUtils::hardLink ($source_filename, $filename, $self->{'verbosity'});
     292    if ($self->{'assocfile_copymode'} eq "hardlink") {
     293    &FileUtils::hardLink ($source_filename, $filename, $self->{'verbosity'}); # Consider adding in 'strict' option??
     294    }
     295    else {
     296    &FileUtils::copyFilesGeneral([$source_filename], $filename); # Consider adding in 'strict' option??
     297    }
    293298             
    294299    # set the assocfile path (even if we have no assoc files - need this for lucene)
     
    326331       
    327332        if ($afile ne "cover.jpg") {
    328             &FileUtils::hardLink ($real_filename, $filename, $self->{'verbosity'});
    329             $doc_obj->add_utf8_metadata ($doc_obj->get_top_section(),
    330                  "gsdlassocfile",
    331                  "$afile:$assoc_file_rec->[2]:$dir");
     333            if ($self->{'assocfile_copymode'} eq "hardlink") {
     334            &FileUtils::hardLink($real_filename, $filename, $self->{'verbosity'}); # Consider adding in 'strict' option??
     335            }
     336            else {
     337            &FileUtils::copyFilesGeneral([$real_filename], $filename); # Consider adding in 'strict' option??
     338            }
     339            $doc_obj->add_utf8_metadata ($doc_obj->get_top_section(),
     340                         "gsdlassocfile",
     341                         "$afile:$assoc_file_rec->[2]:$dir");
    332342        }
    333343    } elsif ($self->{'verbosity'} > 2) {
Note: See TracChangeset for help on using the changeset viewer.