cygwin: look harder for a C: mapping and skip if we don't find it
authorTony Cook <tony@develop-help.com>
Mon, 12 Oct 2015 03:02:33 +0000 (14:02 +1100)
committerTony Cook <tony@develop-help.com>
Sun, 8 Nov 2015 22:16:25 +0000 (09:16 +1100)
Some recent update to df on cygwin changed the output from listing
all mappings for the drive with cygwin installed on it to listing
only the root directory, eg from:

$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
C:/cygwin/bin   76943280 45410396  31532884  60% /usr/bin
C:/cygwin/lib   76943280 45410396  31532884  60% /usr/lib
C:/cygwin       76943280 45410396  31532884  60% /
C:              76943280 45410396  31532884  60% /cygdrive/c

to:

$ df
Filesystem      1K-blocks       Used  Available Use% Mounted on
C:/cygwin      1953411068 1261572900  691838168  65% /

which meant the test used an incorrect fallback value.

So force df to display all the mappings, handle the differently
formatted mapping correctly, and if all that fails, skip the test.

t/lib/cygwin.t

index 9033d3f..a619e40 100644 (file)
@@ -53,12 +53,17 @@ is(Cygwin::mount_flags("/cygdrive") =~ /,cygdrive/,  1, "check cygdrive mount_fl
 my @flags = split(/,/, Cygwin::mount_flags('/cygdrive'));
 my $prefix = pop(@flags);
 ok($prefix, "cygdrive mount prefix = " . (($prefix) ? $prefix : '<none>'));
-chomp(my $prefix2 = `df | grep -i '^c: ' | cut -d% -f2 | xargs`);
+chomp(my $prefix2 = `df -a | grep -i '^c: ' | cut -d% -f2 | xargs`);
+# we get something like "C: - - - - /cygdrive" if this isn't the entry
+# df displays free space info for
+$prefix2 =~ s/.* //;
 $prefix2 =~ s/\/c$//i;
-if (! $prefix2) {
-    $prefix2 = '/';
+SKIP:
+{
+    $prefix2
+       or skip("No C: entry found in df output", 1);
+    is($prefix, $prefix2, 'cygdrive mount prefix');
 }
-is($prefix, $prefix2, 'cygdrive mount prefix');
 
 my @mnttbl = Cygwin::mount_table();
 ok(@mnttbl > 0, "non empty mount_table");