Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-19 Thread Randy Kobes
On Tue, 17 Feb 2004, Stas Bekman wrote:

 Randy Kobes wrote:
  On Tue, 3 Feb 2004, Christopher H. Laco wrote:
 
 
 I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
 build 630 and am trying to make test scripts for a pile of
 pages in a package I'm workin on.
 
 If I pass in an -httpd path that has spaces in the path,
 it fails.
 
 use ExtUtils::MakeMaker;
 use Apache::TestMM qw(test clean);
 
 push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
 
  [ .. ]
 
 Is this an Apache::Test problem, or possible an nmake issue?
 
 
  This case should be handled I'd think on the Apache::Test
  side. Does
 my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
 $exe = Win32::GetShortPathName($exe);
 push @ARGV, '-httpd', $exe;
  work? If so, I'll look at seeing where this could be added
  within Apache::Test.

 This patch should probably take care of it. It's untested.

Thanks, Stas - it looks good (applied manually, and
informally tested, as I don't have Perl in a place with
spaces in the directory name). A couple of comments below:

 Index: lib/Apache/TestConfig.pm
 ===
 RCS file:
 /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
 retrieving revision 1.205
 diff -u -r1.205 TestConfig.pm
 --- lib/Apache/TestConfig.pm  18 Feb 2004 00:30:57 -  1.205
 +++ lib/Apache/TestConfig.pm  18 Feb 2004 04:40:21 -
 @@ -67,6 +67,16 @@
  (map { $_ . '_module_name', $_ module name} qw(cgi ssl thread access
 auth)),
   );

 +my %filepath_conf_opts = map { $_ = 1 }
 +qw(top_dir t_dir t_conf t_logs t_conf_file src_dir serverroot
 +   documentroot bindir sbindir httpd apxs httpd_conf perlpod sslca
 +   libmodperl);
 +
 +sub conf_opt_is_a_filepath {
 +my $opt = shift;
 +$opt  exists $filepath_conf_opts{$opt};
 +}
 +
   sub usage {
   for my $hash (\%Usage) {
   for (sort keys %$hash){
 Index: lib/Apache/TestRun.pm
 ===
 RCS file: 
 /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
 retrieving revision 1.149
 diff -u -r1.149 TestRun.pm
 --- lib/Apache/TestRun.pm 18 Feb 2004 04:09:08 -  1.149
 +++ lib/Apache/TestRun.pm 18 Feb 2004 04:40:21 -
 @@ -238,6 +238,15 @@
   push @argv, $val;
   }

 +# fixup the filepath options on win32 (spaces, short names, etc.)
 +if (Apache::TestConfig::WIN32) {
 +require Win32::GetShortPathName;
   

The require isn't required, as Win32::GetShortPathName is
a core function.

 +for my $key (keys %conf_opts) {
 +next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
 +$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
  ^^^
I think if one calls Win32::GetShortPathName
on something that has no short path name, then
nothing is returned. For example,
==
use strict;
use warnings;
for ('C:\Program Files', 'C:\ProgramFiles') {
my $x = Win32::GetShortPathName($_);
if ($x) {
print $_ has a short name of $x\n;
}
else {
print $_ has no short name\n;
}
}
===
prints
===
C:\Program Files has a short name of C:\PROGRA~1
C:\ProgramFiles has no short name


Thus, the above should probably include

 +for my $key (keys %conf_opts) {
 +next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
 + +  next unless $conf_opts{$key} =~ / /;
 +$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});

-- 
best regards,
randy


Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-19 Thread Stas Bekman
Randy Kobes wrote:
Thanks for testing, Randy
+for my $key (keys %conf_opts) {
+next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
+$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
  ^^^
I think if one calls Win32::GetShortPathName
on something that has no short path name, then
nothing is returned. For example,
==
use strict;
use warnings;
for ('C:\Program Files', 'C:\ProgramFiles') {
my $x = Win32::GetShortPathName($_);
if ($x) {
print $_ has a short name of $x\n;
}
else {
print $_ has no short name\n;
}
}
===
prints
===
C:\Program Files has a short name of C:\PROGRA~1
C:\ProgramFiles has no short name

Thus, the above should probably include

+for my $key (keys %conf_opts) {
+next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
+ +  next unless $conf_opts{$key} =~ / /;
+$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
ay, that's so incredibly place your favorite swear word here. there is no a 
core function that will take any given path and return a usable path?

do you need to run this transform only if /\s/? What about long names (8.3), 
don't they have short names too?

For god's sake, can someone patch File::Spec to handle that win32 ridicule? 
Just think how much time every project wastes to deal with the same issues, 
again and again if they need to work with win32... not talking about making 
the source code cluttered with unneeded noise. that's just disgusting.

Shouldn't canonfile() know how to deal with this GetShortPathName thingy?
/of course none of these flattering comments are directed at Randy and other 
brave and helpful folks ;)/

__
Stas BekmanJAm_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


Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-19 Thread Stas Bekman
Randy Kobes wrote:
On Wed, 18 Feb 2004, Stas Bekman wrote:

Randy Kobes wrote:
Thanks for testing, Randy

+for my $key (keys %conf_opts) {
+next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
+$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
[ ... ]
ay, that's so incredibly place your favorite swear word
here. there is no a core function that will take any
given path and return a usable path?
do you need to run this transform only if /\s/? What about
long names (8.3), don't they have short names too?

Yes, they do have short names. And it is a pain ... I should
have expanded - Win32::GetShortPathName() will return a
usable path if the file/directory physically exists - if a
conversion to 8.3 components is needed, then that is done,
otherwise, the original is returned. However, at this stage
I don't think (?) we can assume the file/directory yet
exists, at least for all the ones that this is being applied
to, so calling Win32::GetShortPathName on them will cause
the given values to be lost if they don't yet exist.
Why not? All these arguments should be existing. (I think sans -libmodperl 
which may not exist)

So, actually, I take that back about applying
Win32::GetSHortPathName($f) only if $f =~ /\s/, as that
was a red herring - doing it like
for my $key (keys %conf_opts) {
next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
next unless -e $conf_opts{$key};
$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
should be OK when the entry (physically) exists, whether
that's a short or long name, and if it doesn't exist,
presumably it will either be created or tested for later.
One might have to do a Win32::GetShortPathName() if such an
entry does get created later on, but we could wait and see.
cool. In any case, please take the ownership of the patch I posted and once 
you guys are happy with it, please go ahead and commit it. Otherwise it's a 
broken phone. Thanks.

For god's sake, can someone patch File::Spec to handle
that win32 ridicule?  Just think how much time every
project wastes to deal with the same issues, again and
again if they need to work with win32... not talking about
making the source code cluttered with unneeded noise.
that's just disgusting.
Shouldn't canonfile() know how to deal with this
GetShortPathName thingy?
I guess it could, but that would involve somewhat of a
departure from the philosophy of File::Spec. File::Spec can
handle any combination of files/directories, whether or not
they actually exist on the system, whereas things like
Win32::GetShortPathName() only makes sense for
files/directories that physically exist. So incorporating
the short path name stuff in File::Spec would lead to a
branch in what gets returned, depending on whether or not
the entry physically exists.
before you implement this ;) what would you expect canonfile to do under 
win32? is GetShortPathName is the thing you'd expect? As it will always work?

BTW, does it make sure that two similar long names will never collapse into 
one short name? Meaning that the short name is not deterministic but depends 
on other the existence of other files with similar names? If it was 
deterministic, you could go and create the non-existing file, get its short 
name and delete the file, no?

__
Stas BekmanJAm_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


Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-03 Thread Randy Kobes
On Tue, 3 Feb 2004, Christopher H. Laco wrote:

 I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
 build 630 and am trying to make test scripts for a pile of
 pages in a package I'm workin on.

 If I pass in an -httpd path that has spaces in the path,
 it fails.

 use ExtUtils::MakeMaker;
 use Apache::TestMM qw(test clean);

 push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
[ .. ]
 Is this an Apache::Test problem, or possible an nmake issue?

This case should be handled I'd think on the Apache::Test
side. Does
   my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
   $exe = Win32::GetShortPathName($exe);
   push @ARGV, '-httpd', $exe;
work? If so, I'll look at seeing where this could be added
within Apache::Test.

-- 
best regards,
randy kobes


Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-03 Thread Christopher H. Laco
This case should be handled I'd think on the Apache::Test
side. Does
   my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
   $exe = Win32::GetShortPathName($exe);
   push @ARGV, '-httpd', $exe;
work? If so, I'll look at seeing where this could be added
within Apache::Test.
--
best regards,
randy kobes
That fixes the problem. I guess the same would need to be applied to the -d 
and -f parameters passed to apache in the event that the test and config 
directories are also in directory with spaces in the names.

Thanks,
-=Chris
_
Find high-speed ‘net deals — comparison-shop your local providers here. 
https://broadband.msn.com



Re: Apache::TestMM::generate_script vs. Win32 Paths

2004-02-03 Thread Christopher H. Laco
And just for the curious person in me, calling:
Win32::GetShortPathName(
   Win32::GetShortPathName( $path_to_exe )
);
yields the same result as
Win32::GetShortPathName( $path_to_exe );
So no worries about adding this to my Makefile.PL AND having Apache::Test 
possibly call it again further down the process in the event someone doesn't 
want to check $Apache::Test::VERSION. :-)

-=Chris
_
Let the new MSN Premium Internet Software make the most of your high-speed 
experience. http://join.msn.com/?pgmarket=en-uspage=byoa/premST=1