You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@perl.apache.org by "Philippe M. Chiasson" <go...@ectoplasm.org> on 2004/11/14 00:59:15 UTC

[cpan #8418] Apache::Test Makefile enters infinite loop when running without a connected terminal

Max Maischein via RT wrote:

>This message about Apache-Test was sent to you by corion@corion.net <co...@corion.net> via rt.cpan.org
>
>Full context and any attached attachments can be found at:
><URL: https://rt.cpan.org/Ticket/Display.html?id=8418 >
>
>Hello,
>
>the Apache::Test Makefile.PL enters an infinite loop when it is running 
>without a connected terminal and can't find the path to httpd. This is 
>very bad for CPAN testers who maybe don't have a httpd binary somewhere 
>to be found, and where the testing runs unattended. Please use the 
>prompt() function in ExtUtils::MakeMaker and don't enter a loop if the 
>default is accepted, or detect that Makefile.PL is run in unattended 
>mode and don't enter the loop at all.
>  
>
We are already using ExtUtils::MakeMaker::prompt(), but the problem is 
that we don't quite
handle non-console TTYs proprely and do indeed loop infinitely. Easy to 
reproduce on a
system without httpd/apxs

Following patch fixes the problem for me.

Re: [cpan #8418] Apache::Test Makefile enters infinite loop when running without a connected terminal

Posted by Stas Bekman <st...@stason.org>.
Stas Bekman wrote:
>>> Max Maischein via RT wrote:

>>>> the Apache::Test Makefile.PL enters an infinite loop when it is 
>>>> running without a connected terminal and can't find the path to 
>>>> httpd. This is very bad for CPAN testers who maybe don't have a 
>>>> httpd binary somewhere to be found, and where the testing runs 
>>>> unattended. Please use the prompt() function in ExtUtils::MakeMaker 
>>>> and don't enter a loop if the default is accepted, or detect that 
>>>> Makefile.PL is run in unattended mode and don't enter the loop at all.
[...]
> Index: lib/Apache/TestRun.pm
> ===================================================================
> --- lib/Apache/TestRun.pm       (revision 106304)
> +++ lib/Apache/TestRun.pm       (working copy)
> @@ -1284,6 +1284,9 @@
>  sub skip_test_suite {
>      my $no_doubt = shift;
> 
> +    # we can't prompt when there is no STDIN;
> +    $no_doubt = 1 unless -t STDIN;
> +
>      print qq[
> 
>  Running the test suite is important to make sure that the module that
> Index: lib/Apache/TestConfig.pm
> ===================================================================
> --- lib/Apache/TestConfig.pm    (revision 106304)
> +++ lib/Apache/TestConfig.pm    (working copy)
> @@ -2090,6 +2090,11 @@
>      my $self = shift;
>      my $conf_opts = shift;
> 
> +    unless (-t STDIN) {
> +        error "STDIN is closed, can't run interactive config";
> +        Apache::TestRun::skip_test_suite();
> +    }
> +
>      my $vars = $self->{vars};
> 
>      print qq[

In any case, it's in. Let me know if you still have problems with it.


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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: [cpan #8418] Apache::Test Makefile enters infinite loop when running without a connected terminal

Posted by Stas Bekman <st...@stason.org>.
Stas Bekman wrote:
> Philippe M. Chiasson wrote:
> 
>> Max Maischein via RT wrote:
>>
>>> This message about Apache-Test was sent to you by corion@corion.net 
>>> <co...@corion.net> via rt.cpan.org
>>>
>>> Full context and any attached attachments can be found at:
>>> <URL: https://rt.cpan.org/Ticket/Display.html?id=8418 >
>>>
>>> Hello,
>>>
>>> the Apache::Test Makefile.PL enters an infinite loop when it is 
>>> running without a connected terminal and can't find the path to 
>>> httpd. This is very bad for CPAN testers who maybe don't have a httpd 
>>> binary somewhere to be found, and where the testing runs unattended. 
>>> Please use the prompt() function in ExtUtils::MakeMaker and don't 
>>> enter a loop if the default is accepted, or detect that Makefile.PL 
>>> is run in unattended mode and don't enter the loop at all.
> 
> 
> for the future, this belongs to the httpd-test list, not here :)
> 
>> We are already using ExtUtils::MakeMaker::prompt(), but the problem is 
>> that we don't quite
>> handle non-console TTYs proprely and do indeed loop infinitely. Easy 
>> to reproduce on a
>> system without httpd/apxs
>>
>> Following patch fixes the problem for me.
> 
> 
> -t STDOUT should work just as well, no need for \*. we already use that 
> in TestTrace.pm.
> 
>> +        if ((lc($ans) eq 'skip' || !-t \*STDIN) && !$optional) {
>>              Apache::TestRun::skip_test_suite();
>>              next; # in case they change their mind
> 
> 
>>          my $ans = ExtUtils::MakeMaker::prompt($prompt, $default);
>> -        return if lc($ans) =~ /no/;
>> +        return if lc($ans) =~ /no/ && -t \*STDIN;
>>      }
> 
> 
> but why entering these functions at all, in the !-t mode? makes the 
> logic complicated.

Max, how about this patch?

Index: lib/Apache/TestRun.pm
===================================================================
--- lib/Apache/TestRun.pm       (revision 106304)
+++ lib/Apache/TestRun.pm       (working copy)
@@ -1284,6 +1284,9 @@
  sub skip_test_suite {
      my $no_doubt = shift;

+    # we can't prompt when there is no STDIN;
+    $no_doubt = 1 unless -t STDIN;
+
      print qq[

  Running the test suite is important to make sure that the module that
Index: lib/Apache/TestConfig.pm
===================================================================
--- lib/Apache/TestConfig.pm    (revision 106304)
+++ lib/Apache/TestConfig.pm    (working copy)
@@ -2090,6 +2090,11 @@
      my $self = shift;
      my $conf_opts = shift;

+    unless (-t STDIN) {
+        error "STDIN is closed, can't run interactive config";
+        Apache::TestRun::skip_test_suite();
+    }
+
      my $vars = $self->{vars};

      print qq[


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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: [cpan #8418] Apache::Test Makefile enters infinite loop when running without a connected terminal

Posted by Stas Bekman <st...@stason.org>.
Philippe M. Chiasson wrote:
> Max Maischein via RT wrote:
> 
>> This message about Apache-Test was sent to you by corion@corion.net 
>> <co...@corion.net> via rt.cpan.org
>>
>> Full context and any attached attachments can be found at:
>> <URL: https://rt.cpan.org/Ticket/Display.html?id=8418 >
>>
>> Hello,
>>
>> the Apache::Test Makefile.PL enters an infinite loop when it is 
>> running without a connected terminal and can't find the path to httpd. 
>> This is very bad for CPAN testers who maybe don't have a httpd binary 
>> somewhere to be found, and where the testing runs unattended. Please 
>> use the prompt() function in ExtUtils::MakeMaker and don't enter a 
>> loop if the default is accepted, or detect that Makefile.PL is run in 
>> unattended mode and don't enter the loop at all.

for the future, this belongs to the httpd-test list, not here :)

> We are already using ExtUtils::MakeMaker::prompt(), but the problem is 
> that we don't quite
> handle non-console TTYs proprely and do indeed loop infinitely. Easy to 
> reproduce on a
> system without httpd/apxs
> 
> Following patch fixes the problem for me.

-t STDOUT should work just as well, no need for \*. we already use that in 
TestTrace.pm.

> +        if ((lc($ans) eq 'skip' || !-t \*STDIN) && !$optional) {
>              Apache::TestRun::skip_test_suite();
>              next; # in case they change their mind

>          my $ans = ExtUtils::MakeMaker::prompt($prompt, $default);
> -        return if lc($ans) =~ /no/;
> +        return if lc($ans) =~ /no/ && -t \*STDIN;
>      }

but why entering these functions at all, in the !-t mode? makes the logic 
complicated.

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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org