Re: regression test filesystem assumptions
[email protected] (Nicholas Clark) Thu, 8 Aug 2013 08:31:16 +0100
| Newsgroups | perl.vmsperl |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Aug 07, 2013 at 10:03:17PM -0500, Craig A. Berry wrote: > > On Aug 7, 2013, at 12:23 PM, Nicholas Clark <[email protected]> wrote: > > > I have this commit pushed to a smoke-me branch. It doesn't cause any test > > failures on the HP VMS testdrive system. Am I making bad assumptions? > > > > Specifically, is it filesystem dependant whether this code as-is will pass? > > > > open(H,'run/fresh_perl.t'); # must be in the 't' directory > > stat(H); > > print "ok\n" if (-e _ and -f _ and -r _); > > > > I can't think of any reason that would be different on different filesystems. OK, good. I wasn't totally sure, and wanted to avoid making a mistake that caused someone else more work. > > I infer that it must have failed 12 years ago, because the last line was > > "corrected" to > > > > print "ok\n" if (-e _ and -f _); > > > > > > But what changed to cause it to work now? > > > > There have been various fixes to stat as well as to Perl_cando_by_name in vms/vms.c. None I've managed to stumble on in the archives pops out as obviously "the one," and it would be arduous to do a manual bisect without git. OK. I was curious if it was obvious to someone else, and it's not. > > commit 219b23a016e4d19b9fc29d2cb6aad7c8f485e7bc > > Author: Nicholas Clark <[email protected]> > > Date: Wed Aug 7 11:57:09 2013 +0200 > > open TEST, ">$tmpfile" or die "Cannot open $tmpfile: $!"; > > - > > - # VMS adjustments > > - if( $is_vms ) { > > - $prog =~ s#/dev/null#NL:#; > > - > > - # VMS file locking > > - $prog =~ s{if \(-e _ and -f _ and -r _\)} > > - {if (-e _ and -f _)} > > - } > > - > > print TEST $prog; > > close TEST or die "Cannot close $tmpfile: $!"; > > > > I think these changes are sane. Once upon a time, the CRTL did not support /dev/null as an alias for the native _NLA0:. I forget when /dev/null became supported; possibly v7.0, which was about 1995 or so. I remember Chuck Lane, who wrote the misc.t patch, saying at some point that he was running v6.2, which was already somewhat old at the time. I explicitly removed support for pre-7.0 VMS systems in Perl 5.16.x, so the /dev/null workaround seems safe to remove. > > I think I disagree about whether these belonged in the test runner; that actually was the general place to solve a general problem, even if there weren't other extant tests that exercised the problem. But those problems don't seem to be there now, so thanks for cleaning up after us. Yes, to be fair I'm in two minds about the /dev/null one, as it might show up in other places. But it was bugging me that it's only VMS - surely other platforms need similar fixes? But as George Greer observed, Win32 has a special case: DllExport FILE * win32_freopen(const char *path, const char *mode, FILE *stream) { dTHXa(NULL); if (stricmp(path, "/dev/null")==0) path = "NUL"; aTHXa(PERL_GET_THX); return freopen(PerlDir_mapA(path), mode, stream); } (and similar code in 2 other places) But I think that the pattern match for qr/if \(-e _ and -f _ and -r _\)/ was so specific that it was only ever going to match one test. Nicholas Clark