At 12:10 AM -0500 8/31/07, John E. Malmberg wrote: >This patch makes the following changes: > >In lib/Archive/Tar.pm, currently Perl on VMS can not fully deal with directory >specifications that have C<.> characters in them. Internally the VMS.C module >currently translates them to C<_> characters.
I'm not seeing any Archive::Tar failures in blead, so I'd like to know a bit more about what this patch actually fixes before applying it. Does it fix any of the CPANPLUS failures? Is it necessary when building on ODS-2 but not ODS-5? >In the future as Perl on VMS learns how to handle this, this module will need >another patch, as current versions of VMS support directories with C<.> >characters in them. Partial support is already there. At least File::Spec->splitdir will handle dots in directory names if properly escaped: $ perl -"MFile::Spec" -e "print join qq/\n/, File::Spec->splitdir('[foo.bar^.baz]');" foo bar^.baz > >File::Spec on VMS can not currently handle the UNIX pathnames that are showing >up here, so use the UNIX routines and keep everything in UNIX syntax. One of >the failures is handling empty path elements. > > >In lib/Archive/Tar/t/02_methods.t, File::Spec->catfile was being used where a >directory path was needed. There is a significant difference between catpath >and catfile on VMS, and catpath must be used if the result is intended to be a >path. But you replaced catfile with catdir, not catpath. In any case, catfile looks right to me as it appears to be generating a file name, not a directory name. >-John >[EMAIL PROTECTED] >Personal Opinion Only > > >--- /rsync_root/perl/lib/Archive/Tar.pm Wed Aug 15 10:03:08 2007 >+++ lib/Archive/Tar.pm Thu Aug 30 23:48:31 2007 >@@ -547,9 +547,24 @@ > ### it's a relative path ### > } else { > my $cwd = (defined $self->{cwd} ? $self->{cwd} : cwd()); >+ $cwd = VMS::Filespec::unixify($cwd) if $^O eq 'VMS'; > my @dirs = File::Spec::Unix->splitdir( $dirs ); >- my @cwd = File::Spec->splitdir( $cwd ); >+ my @cwd; >+ if ($^O eq 'VMS') { >+ >+ # VMS ODS-2 can not handle dots in directory >+ # ODS-5 can, except File::Spec::VMS does not yet know that >+ # This will need to be changed after File::Spec::VMS is updated. >+ >+ map tr/\./_/, @dirs; >+ >+ # splitdir on VMS can not handle UNIX paths right now >+ $cwd = File::Spec::Unix->splitdir( $cwd ); >+ $dir = File::Spec::Unix->catdir( @cwd, @dirs ); >+ } else { >+ $cwd = File::Spec->splitdir( $cwd ); > $dir = File::Spec->catdir( @cwd, @dirs ); >+ } > > # catdir() returns undef if the path is longer than 255 chars on VMS > unless ( defined $dir ) { >--- /rsync_root/perl/lib/Archive/Tar/t/02_methods.t Sun May 20 07:56:42 2007 >+++ lib/Archive/Tar/t/02_methods.t Thu Aug 30 22:27:44 2007 >@@ -732,7 +732,7 @@ > ) > ) { > >- my $outfile = File::Spec->catfile( $outpath, $$ ); >+ my $outfile = File::Spec->catdir( $outpath, $$ ); > > ok( $tar->extract_file( $file->full_path, $outfile ), > " Extracted file '$path' to $outfile" ); -- ________________________________________ Craig A. Berry mailto:[EMAIL PROTECTED] "... getting out of a sonnet is much more difficult than getting in." Brad Leithauser