Randy Kobes wrote:

In the effort to remove some of the Win32 noise, I was
thinking that we can write a generic function which gets a
path as an argument and figures out internally if it needs
to keep the argument as passed or mangle it. So it'll do
something like:

   my $cwd =  Apache::TestUtil::path(cwd);

probably need a more intuitive name for this function.


That'd be nice - a version that does this appears below.
I named it win32_long_path - it'll just return what was
passed into it if not on Win32.

But my idea was to eliminate any os-specific words win32. I think it should just be long_path... Think of it as File::Spec function.


OK, I'll do that. I put in the win32_ to indicate that it'll
do something for Win32, and otherwise just return what was
passed in.


I'm still not quite happy about the naming of the function, what exactly
GetLongPathName($file) does?
can this be done using some File::Spec function?


I haven't found an equivalent one in File::Spec ... The
problem here is that cwd (or any file/directory name) on
Win32 has two representations - a long path name (that can
include spaces) and a short path name, limited to 6
characters (this is a holdout from early days), plus 3 if an
extension is present.  Here we want to match cwd to
/Apache-Test/, but cwd may return the short path name (eg,
Apache~1.0), depending on if, for example, you have
different Apache-Test* directories at the same level. So
GetLongPathName can be used to get the full long path name.

The thing with naming it, eg, just long_path, is that
Unix users (the majority) wouldn't know what it does.

Thanks Randy. Call it 'expand_path' and add the above explanation to that function? for unix it won't do anything, since there is nothing to expand, but for win32 it will expand the shrinkwrapped name.


+        if (-e $candidate) {
+            $sys_config = $candidate;
+            last;
+        }
+    }
+    if ($sys_config) {
+        eval {require $sys_config};
+        return $sys_config if (not $@ and IN_APACHE_TEST);
+        $sys_config = undef if $@;
+    }

Hmm, I thought we agreed that eval {require $sys_config} will always succeed, since that file is always available. so this code should be needed:

+ die 'Could not find a suitable Apache::TestConfigData'
+    unless defined CONFIG_DATA;


I was thinking here if someone, after installation, had
mis-edited Apache::TestConfigData, either the system one or
one found in some path in @INC being added thru, eg, use
lib). But this might be overkill - not worrying about this
at this time will simplify things here.

Yup, just die then...

I was also thinking about the problem of $ENV{HOME} not
being available in mod_perl. As Apache::TestConfigData is
being loaded in order to configure things, shouldn't
this not be a problem, because at this point one isn't
yet in a mod_perl environment?

It can be used at run time just as well, I think we do that in several places in the test suite. However for now we can cheat, by documenting:


  add:

    PerlPassEnv HOME

to httpd.conf if you want to read ~/.apache-test/ config from within a running mod_perl server. Another possible alternative is to use: getpwent() to ask the os for the home dir instead of relying on $ENV{HOME}. Does this work under win32?



__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com



Reply via email to