Paul Cochrane wrote:
>> > But if we convert what MANIFEST provides (i.e. Unix directory
>> > separators) into whatever the current platform needs (i.e. what
>> > canonpath() does) then it should agree with whatever svn spits out.
>> > Or am I missing something?
>>
>> No, that's exactly what I think needs to be done. In the patch
>> canonpath is used with the result of the svn execution only. That's not
>> enough. @manifest_files would need to be changed too, otherwise it
>> contains the file names with forward slashes from MANIFEST. There's
>> also a regex $lf_files_regexp that seems to filter files, and the part
>> that uses it would need to be aware of the changed separator, too.
>>
>> > Essentially my patch is just a less fragile version of the patch you
>> > submitted to get this test to work on Windows. (at least, I don't
>> > think I'm changing the functionality that much).
>>
>> I simple changed the backward slashes to forward slashes, thus forward
>> slashes everywhere.
>
> Which was what *I* intended to do with my patch, but after staring at
> it long enough, I realised that's not what *it* was saying! :-)
> Ooops.
Oh, I see. Sorry I didn't get this right.
> I'd like to avoid converting the entire MANIFEST from Unix to Windows
> directory separators just so that we can have the hash we're
> generating in t/distro/file_metadata.t has consistent keys;
> converting to explicitly Unix should be enough (and converting the
> whole MANIFEST would make the test even slower than it already is).
> Even more so considering that there is a ticket in RT trying to get
> rid of MANIFEST. Anyway, attached is another patch, which hopefully
> does the right thing now. If everyone's happy with the patch, I'll
> apply and commit it to trunk.
>
> Ron, would it be ok if you could check the patch to see if it works on
> Win32? Thanks heaps in advance.
There's one piece missing: You'd need to splitdir/catdir $directories
too, otherwise it's left as-is.
I have attached a modified patch, and prove-ed it works with r18945 on
Win32.
Ron
Index: t/distro/file_metadata.t
===================================================================
--- t/distro/file_metadata.t (revision 18945)
+++ t/distro/file_metadata.t (working copy)
@@ -8,7 +8,8 @@
use Test::More;
use File::Basename qw( fileparse );
-use File::Spec::Functions qw( catfile );
+use File::Spec::Functions qw( catfile splitpath splitdir );
+use File::Spec::Unix;
use Parrot::Config;
use Parrot::Revision;
use ExtUtils::Manifest qw( maniread );
@@ -270,13 +271,22 @@
# This RE may be a little wonky.
if ( $result =~ m{(.*) - (.*)} ) {
- my ( $file, $attribute ) = ( $1, $2 );
+ my ( $full_path, $attribute ) = ( $1, $2 );
- # file names are reported with backslashes on Windows,
- # but we want forward slashes
- $file =~ s!\\!/!g if $^O eq 'MSWin32';
+ # split the path
+ my ( $volume, $directories, $file ) =
+ splitpath $full_path;
+ my @directories = splitdir $directories;
- $results{$file} = $attribute;
+ # put it back together as a unix path (to match MANIFEST)
+ $full_path = File::Spec::Unix->catpath(
+ $volume,
+ File::Spec::Unix->catdir(@directories),
+ $file
+ );
+
+ # store the attribute into the results hash
+ $results{$full_path} = $attribute;
}
}