Hello community, here is the log from the commit of package perl-Mojolicious for openSUSE:Factory checked in at 2018-02-21 14:13:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious (Old) and /work/SRC/openSUSE:Factory/.perl-Mojolicious.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Mojolicious" Wed Feb 21 14:13:54 2018 rev:90 rq:578618 version:7.67 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Mojolicious/perl-Mojolicious.changes 2018-02-16 21:45:27.953370434 +0100 +++ /work/SRC/openSUSE:Factory/.perl-Mojolicious.new/perl-Mojolicious.changes 2018-02-21 14:13:57.512815527 +0100 @@ -1,0 +2,6 @@ +Wed Feb 21 06:37:46 UTC 2018 - co...@suse.com + +- updated to 7.67 + see /usr/share/doc/packages/perl-Mojolicious/Changes + +------------------------------------------------------------------- Old: ---- Mojolicious-7.66.tar.gz New: ---- Mojolicious-7.67.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Mojolicious.spec ++++++ --- /var/tmp/diff_new_pack.zE22N8/_old 2018-02-21 14:13:58.576777211 +0100 +++ /var/tmp/diff_new_pack.zE22N8/_new 2018-02-21 14:13:58.576777211 +0100 @@ -17,7 +17,7 @@ Name: perl-Mojolicious -Version: 7.66 +Version: 7.67 Release: 0 %define cpan_name Mojolicious Summary: Real-time web framework ++++++ Mojolicious-7.66.tar.gz -> Mojolicious-7.67.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/.perltidyrc new/Mojolicious-7.67/.perltidyrc --- old/Mojolicious-7.66/.perltidyrc 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/.perltidyrc 2018-02-19 00:56:16.000000000 +0100 @@ -9,4 +9,5 @@ -pt=2 # High parenthesis tightness -bt=2 # High brace tightness -sbt=2 # High square bracket tightness +-wn # Weld nested containers -isbc # Don't indent comments without leading space diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/Changes new/Mojolicious-7.67/Changes --- old/Mojolicious-7.66/Changes 2018-02-13 18:03:58.000000000 +0100 +++ new/Mojolicious-7.67/Changes 2018-02-19 12:12:21.000000000 +0100 @@ -1,4 +1,9 @@ +7.67 2018-02-19 + - Modernized ".perltidyrc". + - Fixed a bug in Mojo::Asset::File where forked processes could delete + temporary files prematurely. + 7.66 2018-02-13 - This release contains fixes for security issues, everybody should upgrade! - Removed origin attribute of Mojo::Cookie::Response. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/META.json new/Mojolicious-7.67/META.json --- old/Mojolicious-7.66/META.json 2018-02-14 09:54:38.000000000 +0100 +++ new/Mojolicious-7.67/META.json 2018-02-20 00:10:29.000000000 +0100 @@ -4,7 +4,7 @@ "Sebastian Riedel <s...@cpan.org>" ], "dynamic_config" : 0, - "generated_by" : "ExtUtils::MakeMaker version 7.3, CPAN::Meta::Converter version 2.150010", + "generated_by" : "ExtUtils::MakeMaker version 7.32, CPAN::Meta::Converter version 2.150010", "license" : [ "artistic_2" ], @@ -58,6 +58,6 @@ }, "x_IRC" : "irc://irc.perl.org/#mojo" }, - "version" : "7.66", + "version" : "7.67", "x_serialization_backend" : "JSON::PP version 2.97001" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/META.yml new/Mojolicious-7.67/META.yml --- old/Mojolicious-7.66/META.yml 2018-02-14 09:54:38.000000000 +0100 +++ new/Mojolicious-7.67/META.yml 2018-02-20 00:10:28.000000000 +0100 @@ -7,7 +7,7 @@ configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 0 -generated_by: 'ExtUtils::MakeMaker version 7.3, CPAN::Meta::Converter version 2.150010' +generated_by: 'ExtUtils::MakeMaker version 7.32, CPAN::Meta::Converter version 2.150010' license: artistic_2 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -31,5 +31,5 @@ homepage: http://mojolicious.org license: http://www.opensource.org/licenses/artistic-license-2.0 repository: https://github.com/kraih/mojo.git -version: '7.66' +version: '7.67' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojo/Asset/File.pm new/Mojolicious-7.67/lib/Mojo/Asset/File.pm --- old/Mojolicious-7.66/lib/Mojo/Asset/File.pm 2018-01-03 13:49:43.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojo/Asset/File.pm 2018-02-19 12:26:00.000000000 +0100 @@ -29,9 +29,12 @@ sub DESTROY { my $self = shift; + return unless $self->cleanup && defined(my $path = $self->path); if (my $handle = $self->handle) { close $handle } - unlink $path if -w $path; + + # Only the process that created the file is allowed to remove it + unlink $path if -w $path && ($self->{pid} // $$) == $$; } sub add_chunk { @@ -109,6 +112,12 @@ sub mtime { (stat shift->handle)[9] } +sub new { + my $file = shift->SUPER::new(@_); + $file->{pid} = $$; + return $file; +} + sub size { -s shift->handle } sub slurp { @@ -228,6 +237,14 @@ Modification time of asset. +=head2 new + + my $file = Mojo::Asset::File->new; + my $file = Mojo::Asset::File->new(path => '/home/sri/test.txt'); + my $file = Mojo::Asset::File->new({path => '/home/sri/test.txt'}); + +Construct a new L<Mojo::Asset::File> object. + =head2 size my $size = $file->size; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojo/Log.pm new/Mojolicious-7.67/lib/Mojo/Log.pm --- old/Mojolicious-7.66/lib/Mojo/Log.pm 2018-02-07 10:51:20.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojo/Log.pm 2018-02-19 00:56:32.000000000 +0100 @@ -15,8 +15,8 @@ # File return Mojo::File->new($path)->open('>>'); }; -has history => sub { [] }; -has level => 'debug'; +has history => sub { [] }; +has level => 'debug'; has max_history_size => 10; has 'path'; has short => sub { $ENV{MOJO_LOG_SHORT} }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojo/Message.pm new/Mojolicious-7.67/lib/Mojo/Message.pm --- old/Mojolicious-7.66/lib/Mojo/Message.pm 2018-01-03 13:49:47.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojo/Message.pm 2018-02-19 00:56:38.000000000 +0100 @@ -11,11 +11,11 @@ use Mojo::Upload; use Mojo::Util 'decode'; -has content => sub { Mojo::Content::Single->new }; -has default_charset => 'UTF-8'; -has max_line_size => sub { $ENV{MOJO_MAX_LINE_SIZE} || 8192 }; +has content => sub { Mojo::Content::Single->new }; +has default_charset => 'UTF-8'; +has max_line_size => sub { $ENV{MOJO_MAX_LINE_SIZE} || 8192 }; has max_message_size => sub { $ENV{MOJO_MAX_MESSAGE_SIZE} // 16777216 }; -has version => '1.1'; +has version => '1.1'; sub body { my $self = shift; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojo/UserAgent.pm new/Mojolicious-7.67/lib/Mojo/UserAgent.pm --- old/Mojolicious-7.66/lib/Mojo/UserAgent.pm 2018-01-03 13:49:44.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojo/UserAgent.pm 2018-02-19 00:56:33.000000000 +0100 @@ -23,9 +23,9 @@ has ioloop => sub { Mojo::IOLoop->new }; has key => sub { $ENV{MOJO_KEY_FILE} }; has max_connections => 5; -has max_redirects => sub { $ENV{MOJO_MAX_REDIRECTS} || 0 }; -has proxy => sub { Mojo::UserAgent::Proxy->new }; -has request_timeout => sub { $ENV{MOJO_REQUEST_TIMEOUT} // 0 }; +has max_redirects => sub { $ENV{MOJO_MAX_REDIRECTS} || 0 }; +has proxy => sub { Mojo::UserAgent::Proxy->new }; +has request_timeout => sub { $ENV{MOJO_REQUEST_TIMEOUT} // 0 }; has server => sub { Mojo::UserAgent::Server->new(ioloop => shift->ioloop) }; has transactor => sub { Mojo::UserAgent::Transactor->new }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojolicious/Command/get.pm new/Mojolicious-7.67/lib/Mojolicious/Command/get.pm --- old/Mojolicious-7.66/lib/Mojolicious/Command/get.pm 2018-02-01 22:46:09.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojolicious/Command/get.pm 2018-02-19 00:56:53.000000000 +0100 @@ -28,12 +28,12 @@ 'f|form=s' => sub { _form(\%form) if $_[1] =~ /^(.+)=(\@?)(.+)$/ }, 'H|header=s' => \my @headers, 'i|inactivity-timeout=i' => sub { $ua->inactivity_timeout($_[1]) }, - 'M|method=s' => \(my $method = 'GET'), - 'o|connect-timeout=i' => sub { $ua->connect_timeout($_[1]) }, - 'r|redirect' => \my $redirect, - 'S|response-size=i' => sub { $ua->max_response_size($_[1]) }, - 'u|user=s' => \my $user, - 'v|verbose' => \my $verbose; + 'M|method=s' => \(my $method = 'GET'), + 'o|connect-timeout=i' => sub { $ua->connect_timeout($_[1]) }, + 'r|redirect' => \my $redirect, + 'S|response-size=i' => sub { $ua->max_response_size($_[1]) }, + 'u|user=s' => \my $user, + 'v|verbose' => \my $verbose; @args = map { decode 'UTF-8', $_ } @args; die $self->usage unless my $url = shift @args; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojolicious/Guides/Rendering.pod new/Mojolicious-7.67/lib/Mojolicious/Guides/Rendering.pod --- old/Mojolicious-7.66/lib/Mojolicious/Guides/Rendering.pod 2017-12-17 14:30:03.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojolicious/Guides/Rendering.pod 2018-02-15 00:59:02.000000000 +0100 @@ -1291,6 +1291,40 @@ Hello World! +Instead of providing a C<Content-Length> header you can also call +L<Mojolicious::Controller/"finish"> and close the connection manually once you +are done. + + use Mojolicious::Lite; + + get '/' => sub { + my $c = shift; + + # Prepare body + my $body = 'Hello World!'; + + # Start writing directly with a drain callback + my $drain; + $drain = sub { + my $c = shift; + my $chunk = substr $body, 0, 1, ''; + length $chunk ? $c->write($chunk, $drain) : $c->finish; + }; + $c->$drain; + }; + + app->start; + +While this is rather inefficient, as it prevents keep-alive, it is sometimes +necessary for EventSource and similar applications. + + HTTP/1.1 200 OK + Date: Sat, 13 Sep 2014 16:48:29 GMT + Connection: close + Server: Mojolicious (Perl) + + Hello World! + =head2 Chunked transfer encoding For very dynamic content you might not know the response content length in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojolicious/Plugin/DefaultHelpers.pm new/Mojolicious-7.67/lib/Mojolicious/Plugin/DefaultHelpers.pm --- old/Mojolicious-7.66/lib/Mojolicious/Plugin/DefaultHelpers.pm 2018-02-11 16:12:05.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojolicious/Plugin/DefaultHelpers.pm 2018-02-19 00:56:48.000000000 +0100 @@ -107,11 +107,11 @@ my $renderer = $app->renderer; my $options = { exception => $page eq 'exception' ? $e : undef, - format => $stash->{format} || $renderer->default_format, - handler => undef, - snapshot => \%snapshot, - status => $page eq 'exception' ? 500 : 404, - template => "$page.$mode" + format => $stash->{format} || $renderer->default_format, + handler => undef, + snapshot => \%snapshot, + status => $page eq 'exception' ? 500 : 404, + template => "$page.$mode" }; my $bundled = 'mojo/' . ($mode eq 'development' ? 'debug' : $page); return $c if _fallbacks($c, $options, $page, $bundled); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/Mojolicious.pm new/Mojolicious-7.67/lib/Mojolicious.pm --- old/Mojolicious-7.66/lib/Mojolicious.pm 2018-02-13 18:04:20.000000000 +0100 +++ new/Mojolicious-7.67/lib/Mojolicious.pm 2018-02-19 00:56:30.000000000 +0100 @@ -40,7 +40,7 @@ return $mode eq 'development' ? $log : $log->level('info'); }; has 'max_request_size'; -has mode => sub { $ENV{MOJO_MODE} || $ENV{PLACK_ENV} || 'development' }; +has mode => sub { $ENV{MOJO_MODE} || $ENV{PLACK_ENV} || 'development' }; has moniker => sub { Mojo::Util::decamelize ref shift }; has plugins => sub { Mojolicious::Plugins->new }; has renderer => sub { Mojolicious::Renderer->new }; @@ -65,7 +65,7 @@ has validator => sub { Mojolicious::Validator->new }; our $CODENAME = 'Doughnut'; -our $VERSION = '7.66'; +our $VERSION = '7.67'; sub AUTOLOAD { my $self = shift; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/lib/ojo.pm new/Mojolicious-7.67/lib/ojo.pm --- old/Mojolicious-7.66/lib/ojo.pm 2018-01-03 13:49:41.000000000 +0100 +++ new/Mojolicious-7.67/lib/ojo.pm 2018-02-19 00:56:29.000000000 +0100 @@ -35,8 +35,8 @@ h => sub { $ua->head(@_)->result }, j => \&j, n => sub (&@) { say STDERR timestr timeit($_[1] // 1, $_[0]) }, - o => sub { $ua->options(@_)->result }, - p => sub { $ua->post(@_)->result }, + o => sub { $ua->options(@_)->result }, + p => sub { $ua->post(@_)->result }, r => \&dumper, t => sub { $ua->patch(@_)->result }, u => sub { $ua->put(@_)->result }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/asset.t new/Mojolicious-7.67/t/mojo/asset.t --- old/Mojolicious-7.66/t/mojo/asset.t 2018-01-03 13:49:05.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/asset.t 2018-02-19 12:27:08.000000000 +0100 @@ -1,6 +1,8 @@ use Mojo::Base -strict; use Test::More; +use Carp 'croak'; +use Config; use Mojo::Asset::File; use Mojo::Asset::Memory; use Mojo::File qw(path tempdir); @@ -243,6 +245,22 @@ like $@, qr/Can't write to asset: .*/, 'right error'; } +# Forked process +SKIP: { + skip 'Real fork is required!', 5 if $Config{d_pseudofork}; + $file = Mojo::Asset::File->new->add_chunk('Fork test!'); + $path = $file->path; + ok -e $path, 'file exists'; + is $file->slurp, 'Fork test!', 'right content'; + croak "Can't fork: $!" unless defined(my $pid = fork); + exit 0 unless $pid; + waitpid $pid, 0 if $pid; + ok -e $path, 'file still exists'; + is $file->slurp, 'Fork test!', 'right content'; + undef $file; + ok !-e $path, 'file has been cleaned up'; +} + # Abstract methods eval { Mojo::Asset->add_chunk }; like $@, qr/Method "add_chunk" not implemented by subclass/, 'right error'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/cookiejar.t new/Mojolicious-7.67/t/mojo/cookiejar.t --- old/Mojolicious-7.66/t/mojo/cookiejar.t 2018-02-13 18:07:32.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/cookiejar.t 2018-02-19 00:42:47.000000000 +0100 @@ -188,28 +188,24 @@ # Switch between secure and normal cookies $jar = Mojo::UserAgent::CookieJar->new; -$jar->add( - Mojo::Cookie::Response->new( - domain => 'example.com', - path => '/foo', - name => 'foo', - value => 'foo', - secure => 1 - ) -); +$jar->add(Mojo::Cookie::Response->new( + domain => 'example.com', + path => '/foo', + name => 'foo', + value => 'foo', + secure => 1 +)); $cookies = $jar->find(Mojo::URL->new('https://example.com/foo')); is $cookies->[0]->name, 'foo', 'right name'; is $cookies->[0]->value, 'foo', 'right value'; $cookies = $jar->find(Mojo::URL->new('http://example.com/foo')); is scalar @$cookies, 0, 'no insecure cookie'; -$jar->add( - Mojo::Cookie::Response->new( - domain => 'example.com', - path => '/foo', - name => 'foo', - value => 'bar' - ) -); +$jar->add(Mojo::Cookie::Response->new( + domain => 'example.com', + path => '/foo', + name => 'foo', + value => 'bar' +)); $cookies = $jar->find(Mojo::URL->new('http://example.com/foo')); is $cookies->[0]->name, 'foo', 'right name'; is $cookies->[0]->value, 'bar', 'right value'; @@ -220,14 +216,12 @@ # "(" in path $jar = Mojo::UserAgent::CookieJar->new; -$jar->add( - Mojo::Cookie::Response->new( - domain => 'example.com', - path => '/foo(bar', - name => 'foo', - value => 'bar' - ) -); +$jar->add(Mojo::Cookie::Response->new( + domain => 'example.com', + path => '/foo(bar', + name => 'foo', + value => 'bar' +)); $cookies = $jar->find(Mojo::URL->new('http://example.com/foo(bar')); is $cookies->[0]->name, 'foo', 'right name'; is $cookies->[0]->value, 'bar', 'right value'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/daemon.t new/Mojolicious-7.67/t/mojo/daemon.t --- old/Mojolicious-7.66/t/mojo/daemon.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/daemon.t 2018-02-19 00:42:45.000000000 +0100 @@ -298,12 +298,10 @@ $acceptor->on( accept => sub { my $acceptor = shift; - $loop->next_tick( - sub { - push @accepting, $acceptor->is_accepting; - shift->stop if @accepting == 2; - } - ); + $loop->next_tick(sub { + push @accepting, $acceptor->is_accepting; + shift->stop if @accepting == 2; + }); } ); $loop->client({port => $acceptor->port} => sub { }) for 1 .. 2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/delay.t new/Mojolicious-7.67/t/mojo/delay.t --- old/Mojolicious-7.66/t/mojo/delay.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/delay.t 2018-02-19 00:43:01.000000000 +0100 @@ -199,12 +199,10 @@ $delay->steps( sub { my $end = shift->begin; - Mojo::IOLoop->next_tick( - sub { - $result = 'pass'; - $end->(); - } - ); + Mojo::IOLoop->next_tick(sub { + $result = 'pass'; + $end->(); + }); }, sub { die 'Second step!' }, sub { $result = 'failed' } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/dom.t new/Mojolicious-7.67/t/mojo/dom.t --- old/Mojolicious-7.66/t/mojo/dom.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/dom.t 2018-02-19 00:42:50.000000000 +0100 @@ -2066,21 +2066,17 @@ </c> EOF my @results; -$dom->find('b')->each( - sub { - $_->find('a')->each(sub { push @results, $_->text }); - } -); +$dom->find('b')->each(sub { + $_->find('a')->each(sub { push @results, $_->text }); +}); is_deeply \@results, [qw(bar baz yada)], 'right results'; @results = (); $dom->find('a')->each(sub { push @results, $_->text }); is_deeply \@results, [qw(foo bar baz yada)], 'right results'; @results = (); -$dom->find('b')->each( - sub { - $_->find('c a')->each(sub { push @results, $_->text }); - } -); +$dom->find('b')->each(sub { + $_->find('c a')->each(sub { push @results, $_->text }); +}); is_deeply \@results, [qw(baz yada)], 'right results'; is $dom->at('b')->at('a')->text, 'bar', 'right text'; is $dom->at('c > b > a')->text, 'bar', 'right text'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/ioloop.t new/Mojolicious-7.67/t/mojo/ioloop.t --- old/Mojolicious-7.66/t/mojo/ioloop.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/ioloop.t 2018-02-19 00:42:51.000000000 +0100 @@ -17,26 +17,22 @@ # Double start my $err; -Mojo::IOLoop->next_tick( - sub { - my $loop = shift; - eval { $loop->start }; - $err = $@; - $loop->stop; - } -); +Mojo::IOLoop->next_tick(sub { + my $loop = shift; + eval { $loop->start }; + $err = $@; + $loop->stop; +}); Mojo::IOLoop->start; like $err, qr/^Mojo::IOLoop already running/, 'right error'; # Double one_tick $err = undef; -Mojo::IOLoop->next_tick( - sub { - my $loop = shift; - eval { $loop->one_tick }; - $err = $@; - } -); +Mojo::IOLoop->next_tick(sub { + my $loop = shift; + eval { $loop->one_tick }; + $err = $@; +}); Mojo::IOLoop->one_tick; like $err, qr/^Mojo::IOLoop already running/, 'right error'; @@ -94,12 +90,10 @@ $count = 0; Mojo::IOLoop->recurring(10 => sub { $timer++ }); my $running; -Mojo::IOLoop->next_tick( - sub { - Mojo::IOLoop->reset; - $running = Mojo::IOLoop->is_running; - } -); +Mojo::IOLoop->next_tick(sub { + Mojo::IOLoop->reset; + $running = Mojo::IOLoop->is_running; +}); Mojo::IOLoop->start; ok !$running, 'not running'; is $count, 0, 'no recurring events'; @@ -294,13 +288,11 @@ my @accepting; $id = $loop->server( {address => '127.0.0.1', single_accept => 1} => sub { - shift->next_tick( - sub { - my $loop = shift; - push @accepting, $loop->acceptor($id)->is_accepting; - $loop->stop if @accepting == 2; - } - ); + shift->next_tick(sub { + my $loop = shift; + push @accepting, $loop->acceptor($id)->is_accepting; + $loop->stop if @accepting == 2; + }); } ); $port = $loop->acceptor($id)->port; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/json.t new/Mojolicious-7.67/t/mojo/json.t --- old/Mojolicious-7.66/t/mojo/json.t 2018-01-03 13:48:59.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/json.t 2018-02-19 00:42:54.000000000 +0100 @@ -268,8 +268,8 @@ # Blessed reference with TO_JSON method $bytes = encode_json(JSONTest->new); is_deeply decode_json($bytes), {}, 'successful roundtrip'; -$bytes = encode_json( - JSONTest->new(something => {just => 'works'}, else => {not => 'working'})); +$bytes = encode_json(JSONTest->new( + something => {just => 'works'}, else => {not => 'working'})); is_deeply decode_json($bytes), {just => 'works'}, 'successful roundtrip'; # Boolean shortcut diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/lib/Mojo/LoaderException.pm new/Mojolicious-7.67/t/mojo/lib/Mojo/LoaderException.pm --- old/Mojolicious-7.66/t/mojo/lib/Mojo/LoaderException.pm 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/lib/Mojo/LoaderException.pm 2018-02-19 00:44:57.000000000 +0100 @@ -2,7 +2,7 @@ use Mojo::Base -base; -sub new {} +sub new { } foo { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/loader.t new/Mojolicious-7.67/t/mojo/loader.t --- old/Mojolicious-7.66/t/mojo/loader.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/loader.t 2018-02-19 00:47:03.000000000 +0100 @@ -24,16 +24,16 @@ my $e = load_class 'Mojo::LoaderException'; isa_ok $e, 'Mojo::Exception', 'right exception'; like $e->message, qr/Missing right curly/, 'right message'; -is $e->lines_before->[0][0], 4, 'right number'; -is $e->lines_before->[0][1], '', 'right line'; -is $e->lines_before->[1][0], 5, 'right number'; -is $e->lines_before->[1][1], 'sub new {}', 'right line'; -is $e->lines_before->[2][0], 6, 'right number'; -is $e->lines_before->[2][1], '', 'right line'; -is $e->lines_before->[3][0], 7, 'right number'; -is $e->lines_before->[3][1], 'foo {', 'right line'; -is $e->lines_before->[4][0], 8, 'right number'; -is $e->lines_before->[4][1], '', 'right line'; +is $e->lines_before->[0][0], 4, 'right number'; +is $e->lines_before->[0][1], '', 'right line'; +is $e->lines_before->[1][0], 5, 'right number'; +is $e->lines_before->[1][1], 'sub new { }', 'right line'; +is $e->lines_before->[2][0], 6, 'right number'; +is $e->lines_before->[2][1], '', 'right line'; +is $e->lines_before->[3][0], 7, 'right number'; +is $e->lines_before->[3][1], 'foo {', 'right line'; +is $e->lines_before->[4][0], 8, 'right number'; +is $e->lines_before->[4][1], '', 'right line'; is $e->line->[0], 9, 'right number'; is $e->line->[1], "1;", 'right line'; like "$e", qr/Missing right curly/, 'right message'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/log.t new/Mojolicious-7.67/t/mojo/log.t --- old/Mojolicious-7.66/t/mojo/log.t 2018-02-07 10:46:27.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/log.t 2018-02-19 00:42:55.000000000 +0100 @@ -41,12 +41,10 @@ qr/^\[.*\] \[debug\] Test\n1\n2\n3\n$/, 'right format'; like $log->format->(time, 'error', 'I ♥ Mojolicious'), qr/^\[.*\] \[error\] I ♥ Mojolicious\n$/, 'right format'; -$log->format( - sub { - my ($time, $level, @lines) = @_; - return join ':', $level, $time, @lines; - } -); +$log->format(sub { + my ($time, $level, @lines) = @_; + return join ':', $level, $time, @lines; +}); like $log->format->(time, 'debug', qw(Test 1 2 3)), qr/^debug:\d+:Test:1:2:3$/, 'right format'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/request_cgi.t new/Mojolicious-7.67/t/mojo/request_cgi.t --- old/Mojolicious-7.66/t/mojo/request_cgi.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/request_cgi.t 2018-02-19 00:42:47.000000000 +0100 @@ -7,18 +7,16 @@ my $req = Mojo::Message::Request->new; my $body; $req->content->on(body => sub { $body++ }); -$req->parse( - { - HTTP_CONTENT_LENGTH => 11, - HTTP_DNT => 1, - PATH_INFO => '/te+st/index.cgi/foo/bar', - QUERY_STRING => 'lalala=23&bar=baz', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/te+st/index.cgi', - HTTP_HOST => 'localhost:8080', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + HTTP_CONTENT_LENGTH => 11, + HTTP_DNT => 1, + PATH_INFO => '/te+st/index.cgi/foo/bar', + QUERY_STRING => 'lalala=23&bar=baz', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/te+st/index.cgi', + HTTP_HOST => 'localhost:8080', + SERVER_PROTOCOL => 'HTTP/1.0' +}); is $body, 1, 'body event has been emitted once'; $req->parse('Hello '); is $body, 1, 'body event has been emitted once'; @@ -40,19 +38,17 @@ # Parse Lighttpd CGI environment variables and body (behind reverse proxy) $req = Mojo::Message::Request->new; -$req->parse( - { - HTTP_CONTENT_LENGTH => 11, - HTTP_DNT => 1, - HTTP_X_FORWARDED_FOR => '127.0.0.1', - PATH_INFO => '/test/index.cgi/foo/bar', - QUERY_STRING => 'lalala=23&bar=baz', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'mojolicious.org', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + HTTP_CONTENT_LENGTH => 11, + HTTP_DNT => 1, + HTTP_X_FORWARDED_FOR => '127.0.0.1', + PATH_INFO => '/test/index.cgi/foo/bar', + QUERY_STRING => 'lalala=23&bar=baz', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'mojolicious.org', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('Hello World'); ok $req->is_finished, 'request is finished'; is $req->method, 'POST', 'right method'; @@ -70,19 +66,17 @@ # Parse Apache CGI environment variables and body $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 11, - CONTENT_TYPE => 'application/x-www-form-urlencoded', - HTTP_DNT => 1, - PATH_INFO => '/test/index.cgi/foo/bar', - QUERY_STRING => 'lalala=23&bar=baz', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'localhost:8080', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + CONTENT_LENGTH => 11, + CONTENT_TYPE => 'application/x-www-form-urlencoded', + HTTP_DNT => 1, + PATH_INFO => '/test/index.cgi/foo/bar', + QUERY_STRING => 'lalala=23&bar=baz', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'localhost:8080', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'POST', 'right method'; @@ -105,19 +99,17 @@ $req = Mojo::Message::Request->new; is $req->content->asset->max_memory_size, 10, 'right size'; ok !$req->content->is_parsing_body, 'is not parsing body'; - $req->parse( - { - CONTENT_LENGTH => 12, - CONTENT_TYPE => 'text/plain', - HTTP_DNT => 1, - PATH_INFO => '/test/index.cgi/foo/bar', - QUERY_STRING => 'lalala=23&bar=baz', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'localhost:8080', - SERVER_PROTOCOL => 'HTTP/1.1' - } - ); + $req->parse({ + CONTENT_LENGTH => 12, + CONTENT_TYPE => 'text/plain', + HTTP_DNT => 1, + PATH_INFO => '/test/index.cgi/foo/bar', + QUERY_STRING => 'lalala=23&bar=baz', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'localhost:8080', + SERVER_PROTOCOL => 'HTTP/1.1' + }); ok $req->content->is_parsing_body, 'is parsing body'; is $req->content->progress, 0, 'right progress'; $req->parse('Hello '); @@ -148,21 +140,19 @@ # Parse Apache CGI environment variables with basic authentication $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 11, - HTTP_Authorization => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', - HTTP_Proxy_Authorization => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', - CONTENT_TYPE => 'application/x-www-form-urlencoded', - HTTP_DNT => 1, - PATH_INFO => '/test/index.cgi/foo/bar', - QUERY_STRING => 'lalala=23&bar=baz', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'localhost:8080', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + CONTENT_LENGTH => 11, + HTTP_Authorization => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', + HTTP_Proxy_Authorization => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', + CONTENT_TYPE => 'application/x-www-form-urlencoded', + HTTP_DNT => 1, + PATH_INFO => '/test/index.cgi/foo/bar', + QUERY_STRING => 'lalala=23&bar=baz', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'localhost:8080', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'POST', 'right method'; @@ -191,18 +181,16 @@ ok !$finished, 'not finished'; ok !$progress, 'no progress'; is $req->content->progress, 0, 'right progress'; -$req->parse( - { - CONTENT_LENGTH => 87, - CONTENT_TYPE => 'application/x-www-form-urlencoded; charset=UTF-8', - PATH_INFO => '', - QUERY_STRING => '', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/index.pl', - HTTP_HOST => 'test1', - SERVER_PROTOCOL => 'HTTP/1.1' - } -); +$req->parse({ + CONTENT_LENGTH => 87, + CONTENT_TYPE => 'application/x-www-form-urlencoded; charset=UTF-8', + PATH_INFO => '', + QUERY_STRING => '', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/index.pl', + HTTP_HOST => 'test1', + SERVER_PROTOCOL => 'HTTP/1.1' +}); ok !$finished, 'not finished'; ok $progress, 'made progress'; $progress = 0; @@ -235,18 +223,16 @@ # Parse Apache 2.2 (win32) CGI environment variables and body $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 87, - CONTENT_TYPE => 'application/x-www-form-urlencoded; charset=UTF-8', - PATH_INFO => '', - QUERY_STRING => '', - REQUEST_METHOD => 'POST', - SCRIPT_NAME => '/index.pl', - HTTP_HOST => 'test1', - SERVER_PROTOCOL => 'HTTP/1.1' - } -); +$req->parse({ + CONTENT_LENGTH => 87, + CONTENT_TYPE => 'application/x-www-form-urlencoded; charset=UTF-8', + PATH_INFO => '', + QUERY_STRING => '', + REQUEST_METHOD => 'POST', + SCRIPT_NAME => '/index.pl', + HTTP_HOST => 'test1', + SERVER_PROTOCOL => 'HTTP/1.1' +}); $req->parse('request=&ajax=true&login=test&password=111&'); $req->parse('edition=db6d8b30-16df-4ecd-be2f-c8194f94e1f4'); ok $req->is_finished, 'request is finished'; @@ -268,33 +254,31 @@ # Parse Apache 2.2.14 CGI environment variables and body (root) $req = Mojo::Message::Request->new; -$req->parse( - { - SCRIPT_NAME => '/upload', - SERVER_NAME => '127.0.0.1', - SERVER_ADMIN => '[no address given]', - PATH_INFO => '/upload', - HTTP_CONNECTION => 'Keep-Alive', - REQUEST_METHOD => 'POST', - CONTENT_LENGTH => '11', - SCRIPT_FILENAME => '/tmp/SnLu1cQ3t2/test.fcgi', - SERVER_SOFTWARE => 'Apache/2.2.14 (Unix) mod_fastcgi/2.4.2', - QUERY_STRING => '', - REMOTE_PORT => '58232', - HTTP_USER_AGENT => 'Mojolicious (Perl)', - SERVER_PORT => '13028', - SERVER_SIGNATURE => '', - REMOTE_ADDR => '127.0.0.1', - CONTENT_TYPE => 'application/x-www-form-urlencoded; charset=UTF-8', - SERVER_PROTOCOL => 'HTTP/1.1', - REQUEST_URI => '/upload', - GATEWAY_INTERFACE => 'CGI/1.1', - SERVER_ADDR => '127.0.0.1', - DOCUMENT_ROOT => '/tmp/SnLu1cQ3t2', - PATH_TRANSLATED => '/tmp/test.fcgi/upload', - HTTP_HOST => '127.0.0.1:13028' - } -); +$req->parse({ + SCRIPT_NAME => '/upload', + SERVER_NAME => '127.0.0.1', + SERVER_ADMIN => '[no address given]', + PATH_INFO => '/upload', + HTTP_CONNECTION => 'Keep-Alive', + REQUEST_METHOD => 'POST', + CONTENT_LENGTH => '11', + SCRIPT_FILENAME => '/tmp/SnLu1cQ3t2/test.fcgi', + SERVER_SOFTWARE => 'Apache/2.2.14 (Unix) mod_fastcgi/2.4.2', + QUERY_STRING => '', + REMOTE_PORT => '58232', + HTTP_USER_AGENT => 'Mojolicious (Perl)', + SERVER_PORT => '13028', + SERVER_SIGNATURE => '', + REMOTE_ADDR => '127.0.0.1', + CONTENT_TYPE => 'application/x-www-form-urlencoded; charset=UTF-8', + SERVER_PROTOCOL => 'HTTP/1.1', + REQUEST_URI => '/upload', + GATEWAY_INTERFACE => 'CGI/1.1', + SERVER_ADDR => '127.0.0.1', + DOCUMENT_ROOT => '/tmp/SnLu1cQ3t2', + PATH_TRANSLATED => '/tmp/test.fcgi/upload', + HTTP_HOST => '127.0.0.1:13028' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'POST', 'right method'; @@ -311,19 +295,17 @@ # Parse Apache 2.2.11 CGI environment variables and body (HTTPS=ON) $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 11, - CONTENT_TYPE => 'application/x-www-form-urlencoded', - PATH_INFO => '/foo/bar', - QUERY_STRING => '', - REQUEST_METHOD => 'GET', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'localhost', - HTTPS => 'ON', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + CONTENT_LENGTH => 11, + CONTENT_TYPE => 'application/x-www-form-urlencoded', + PATH_INFO => '/foo/bar', + QUERY_STRING => '', + REQUEST_METHOD => 'GET', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'localhost', + HTTPS => 'ON', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'GET', 'right method'; @@ -339,18 +321,16 @@ # Parse Apache 2.2.11 CGI environment variables and body (trailing slash) $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 11, - CONTENT_TYPE => 'application/x-www-form-urlencoded', - PATH_INFO => '/foo/bar/', - QUERY_STRING => '', - REQUEST_METHOD => 'GET', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'localhost', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + CONTENT_LENGTH => 11, + CONTENT_TYPE => 'application/x-www-form-urlencoded', + PATH_INFO => '/foo/bar/', + QUERY_STRING => '', + REQUEST_METHOD => 'GET', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'localhost', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'GET', 'right method'; @@ -365,17 +345,15 @@ # Parse Apache 2.2.11 CGI environment variables and body (no SCRIPT_NAME) $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 11, - CONTENT_TYPE => 'application/x-www-form-urlencoded', - PATH_INFO => '/foo/bar', - QUERY_STRING => '', - REQUEST_METHOD => 'GET', - HTTP_HOST => 'localhost', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + CONTENT_LENGTH => 11, + CONTENT_TYPE => 'application/x-www-form-urlencoded', + PATH_INFO => '/foo/bar', + QUERY_STRING => '', + REQUEST_METHOD => 'GET', + HTTP_HOST => 'localhost', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'GET', 'right method'; @@ -390,17 +368,15 @@ # Parse Apache 2.2.11 CGI environment variables and body (no PATH_INFO) $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 11, - CONTENT_TYPE => 'application/x-www-form-urlencoded', - QUERY_STRING => '', - REQUEST_METHOD => 'GET', - SCRIPT_NAME => '/test/index.cgi', - HTTP_HOST => 'localhost', - SERVER_PROTOCOL => 'HTTP/1.0' - } -); +$req->parse({ + CONTENT_LENGTH => 11, + CONTENT_TYPE => 'application/x-www-form-urlencoded', + QUERY_STRING => '', + REQUEST_METHOD => 'GET', + SCRIPT_NAME => '/test/index.cgi', + HTTP_HOST => 'localhost', + SERVER_PROTOCOL => 'HTTP/1.0' +}); $req->parse('hello=world'); ok $req->is_finished, 'request is finished'; is $req->method, 'GET', 'right method'; @@ -415,17 +391,15 @@ # Parse Apache 2.2.9 CGI environment variables (root without PATH_INFO) $req = Mojo::Message::Request->new; -$req->parse( - { - SCRIPT_NAME => '/cgi-bin/myapp/myapp.pl', - HTTP_CONNECTION => 'keep-alive', - HTTP_HOST => 'getmyapp.org', - REQUEST_METHOD => 'GET', - QUERY_STRING => '', - REQUEST_URI => '/cgi-bin/myapp/myapp.pl', - SERVER_PROTOCOL => 'HTTP/1.1', - } -); +$req->parse({ + SCRIPT_NAME => '/cgi-bin/myapp/myapp.pl', + HTTP_CONNECTION => 'keep-alive', + HTTP_HOST => 'getmyapp.org', + REQUEST_METHOD => 'GET', + QUERY_STRING => '', + REQUEST_URI => '/cgi-bin/myapp/myapp.pl', + SERVER_PROTOCOL => 'HTTP/1.1', +}); ok $req->is_finished, 'request is finished'; is $req->method, 'GET', 'right method'; is $req->url->base->host, 'getmyapp.org', 'right base host'; @@ -438,34 +412,32 @@ # Parse Apache mod_fastcgi CGI environment variables (multipart file upload) $req = Mojo::Message::Request->new; is $req->content->progress, 0, 'right progress'; -$req->parse( - { - SCRIPT_NAME => '', - SERVER_NAME => '127.0.0.1', - SERVER_ADMIN => '[no address given]', - PATH_INFO => '/upload', - HTTP_CONNECTION => 'Keep-Alive', - REQUEST_METHOD => 'POST', - CONTENT_LENGTH => '139', - SCRIPT_FILENAME => '/tmp/SnLu1cQ3t2/test.fcgi', - SERVER_SOFTWARE => 'Apache/2.2.14 (Unix) mod_fastcgi/2.4.2', - QUERY_STRING => '', - REMOTE_PORT => '58232', - HTTP_USER_AGENT => 'Mojolicious (Perl)', - SERVER_PORT => '13028', - SERVER_SIGNATURE => '', - REMOTE_ADDR => '127.0.0.1', - CONTENT_TYPE => 'multipart/form-data; boundary=8jXGX', - SERVER_PROTOCOL => 'HTTP/1.1', - PATH => '/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin', - REQUEST_URI => '/upload', - GATEWAY_INTERFACE => 'CGI/1.1', - SERVER_ADDR => '127.0.0.1', - DOCUMENT_ROOT => '/tmp/SnLu1cQ3t2', - PATH_TRANSLATED => '/tmp/test.fcgi/upload', - HTTP_HOST => '127.0.0.1:13028' - } -); +$req->parse({ + SCRIPT_NAME => '', + SERVER_NAME => '127.0.0.1', + SERVER_ADMIN => '[no address given]', + PATH_INFO => '/upload', + HTTP_CONNECTION => 'Keep-Alive', + REQUEST_METHOD => 'POST', + CONTENT_LENGTH => '139', + SCRIPT_FILENAME => '/tmp/SnLu1cQ3t2/test.fcgi', + SERVER_SOFTWARE => 'Apache/2.2.14 (Unix) mod_fastcgi/2.4.2', + QUERY_STRING => '', + REMOTE_PORT => '58232', + HTTP_USER_AGENT => 'Mojolicious (Perl)', + SERVER_PORT => '13028', + SERVER_SIGNATURE => '', + REMOTE_ADDR => '127.0.0.1', + CONTENT_TYPE => 'multipart/form-data; boundary=8jXGX', + SERVER_PROTOCOL => 'HTTP/1.1', + PATH => '/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin', + REQUEST_URI => '/upload', + GATEWAY_INTERFACE => 'CGI/1.1', + SERVER_ADDR => '127.0.0.1', + DOCUMENT_ROOT => '/tmp/SnLu1cQ3t2', + PATH_TRANSLATED => '/tmp/test.fcgi/upload', + HTTP_HOST => '127.0.0.1:13028' +}); is $req->content->progress, 0, 'right progress'; $req->parse("--8jXGX\x0d\x0a"); is $req->content->progress, 9, 'right progress'; @@ -492,19 +464,17 @@ # Parse IIS 7.5 like CGI environment (HTTPS=off) $req = Mojo::Message::Request->new; -$req->parse( - { - CONTENT_LENGTH => 0, - PATH_INFO => '/index.pl/', - SERVER_SOFTWARE => 'Microsoft-IIS/7.5', - QUERY_STRING => '', - REQUEST_METHOD => 'GET', - SCRIPT_NAME => '/index.pl', - HTTP_HOST => 'test', - HTTPS => 'off', - SERVER_PROTOCOL => 'HTTP/1.1' - } -); +$req->parse({ + CONTENT_LENGTH => 0, + PATH_INFO => '/index.pl/', + SERVER_SOFTWARE => 'Microsoft-IIS/7.5', + QUERY_STRING => '', + REQUEST_METHOD => 'GET', + SCRIPT_NAME => '/index.pl', + HTTP_HOST => 'test', + HTTPS => 'off', + SERVER_PROTOCOL => 'HTTP/1.1' +}); ok $req->is_finished, 'request is finished'; is $req->method, 'GET', 'right method'; is $req->url->path, '', 'right URL'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/transactor.t new/Mojolicious-7.67/t/mojo/transactor.t --- old/Mojolicious-7.66/t/mojo/transactor.t 2018-01-03 13:49:03.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/transactor.t 2018-02-19 00:42:59.000000000 +0100 @@ -185,7 +185,7 @@ $tx = $t->tx(POST => 'http://example.com/foo' => {'Content-Type' => 'multipart/form-data'} => form => - {'♥' => '☃', nothing => undef}); + {'♥' => '☃', nothing => undef}); is $tx->req->url->to_abs, 'http://example.com/foo', 'right URL'; is $tx->req->method, 'POST', 'right method'; is $tx->req->headers->content_type, 'multipart/form-data', @@ -223,7 +223,7 @@ $tx = $t->tx(POST => 'http://example.com/foo' => {'Content-Type' => 'multipart/form-data'} => form => - {a => [1, 2, 3], b => 4}); + {a => [1, 2, 3], b => 4}); is $tx->req->url->to_abs, 'http://example.com/foo', 'right URL'; is $tx->req->method, 'POST', 'right method'; is $tx->req->headers->content_type, 'multipart/form-data', @@ -265,7 +265,7 @@ $tx = $t->tx(POST => 'http://example.com/foo' => {'Content-Type' => 'multipart/mojo-form'} => form => - {mytext => {file => Mojo::Asset::File->new(path => __FILE__)}}); + {mytext => {file => Mojo::Asset::File->new(path => __FILE__)}}); is $tx->req->url->to_abs, 'http://example.com/foo', 'right URL'; is $tx->req->method, 'POST', 'right method'; is $tx->req->headers->content_type, 'multipart/mojo-form', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/user_agent.t new/Mojolicious-7.67/t/mojo/user_agent.t --- old/Mojolicious-7.66/t/mojo/user_agent.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/user_agent.t 2018-02-19 00:43:04.000000000 +0100 @@ -136,12 +136,10 @@ my @results; my $p1 = $ua->get_p('/'); my $p2 = $ua->get_p('/'); -Mojo::Promise->all($p1, $p2)->then( - sub { - my ($first, $second) = @_; - push @results, $first, $second; - } -)->wait; +Mojo::Promise->all($p1, $p2)->then(sub { + my ($first, $second) = @_; + push @results, $first, $second; +})->wait; ok $results[0][0]->success, 'successful'; is $results[0][0]->res->code, 200, 'right status'; is $results[0][0]->res->body, 'works!', 'right content'; @@ -607,16 +605,14 @@ $ua->get( '/' => sub { push @kept_alive, pop->kept_alive; - Mojo::IOLoop->next_tick( - sub { - $ua->get( - '/' => sub { - push @kept_alive, pop->kept_alive; - Mojo::IOLoop->next_tick(sub { Mojo::IOLoop->stop }); - } - ); - } - ); + Mojo::IOLoop->next_tick(sub { + $ua->get( + '/' => sub { + push @kept_alive, pop->kept_alive; + Mojo::IOLoop->next_tick(sub { Mojo::IOLoop->stop }); + } + ); + }); } ); Mojo::IOLoop->start; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/websocket.t new/Mojolicious-7.67/t/mojo/websocket.t --- old/Mojolicious-7.66/t/mojo/websocket.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/websocket.t 2018-02-19 00:42:46.000000000 +0100 @@ -336,16 +336,14 @@ # Promises $result = undef; -$ua->websocket_p('/trim')->then( - sub { - my $tx = shift; - my $promise = Mojo::Promise->new; - $tx->on(finish => sub { $promise->resolve }); - $tx->on(message => sub { shift->finish; $result = pop }); - $tx->send(' also works! '); - return $promise; - } -)->wait; +$ua->websocket_p('/trim')->then(sub { + my $tx = shift; + my $promise = Mojo::Promise->new; + $tx->on(finish => sub { $promise->resolve }); + $tx->on(message => sub { shift->finish; $result = pop }); + $tx->send(' also works! '); + return $promise; +})->wait; is $result, 'also works!', 'right result'; $result = undef; $ua->websocket_p('/foo')->then(sub { $result = 'test failed' }) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojo/websocket_proxy_tls.t new/Mojolicious-7.67/t/mojo/websocket_proxy_tls.t --- old/Mojolicious-7.66/t/mojo/websocket_proxy_tls.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojo/websocket_proxy_tls.t 2018-02-19 00:43:00.000000000 +0100 @@ -206,14 +206,10 @@ is $tx->res->body, "https://127.0.0.1:$port/proxy", 'right content'; # Failed TLS handshake through proxy -my $close = Mojo::IOLoop->acceptor( - Mojo::IOLoop->server( - sub { - my ($loop, $stream) = @_; - $stream->on(read => sub { shift->close }); - } - ) -)->port; +my $close = Mojo::IOLoop->acceptor(Mojo::IOLoop->server(sub { + my ($loop, $stream) = @_; + $stream->on(read => sub { shift->close }); +}))->port; $id = Mojo::TestConnectProxy::proxy({address => '127.0.0.1'}, {address => '127.0.0.1', port => $close}); my $proxy2 = Mojo::IOLoop->acceptor($id)->port; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojolicious/group_lite_app.t new/Mojolicious-7.67/t/mojolicious/group_lite_app.t --- old/Mojolicious-7.66/t/mojolicious/group_lite_app.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojolicious/group_lite_app.t 2018-02-19 00:43:16.000000000 +0100 @@ -34,13 +34,11 @@ under '/suspended' => sub { my $c = shift; - Mojo::IOLoop->next_tick( - sub { - return $c->render(text => 'stopped!') unless $c->param('ok'); - $c->stash(suspended => 'suspended!'); - $c->continue; - } - ); + Mojo::IOLoop->next_tick(sub { + return $c->render(text => 'stopped!') unless $c->param('ok'); + $c->stash(suspended => 'suspended!'); + $c->continue; + }); return 0; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojolicious/lib/MojoliciousTest/Foo.pm new/Mojolicious-7.67/t/mojolicious/lib/MojoliciousTest/Foo.pm --- old/Mojolicious-7.66/t/mojolicious/lib/MojoliciousTest/Foo.pm 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojolicious/lib/MojoliciousTest/Foo.pm 2018-02-19 00:44:22.000000000 +0100 @@ -65,12 +65,10 @@ my $self = shift; $self->res->headers->append('X-Suspended' => $self->match->position); - Mojo::IOLoop->next_tick( - sub { - $self->res->headers->append('X-Suspended' => $self->match->position); - $self->continue; - } - ); + Mojo::IOLoop->next_tick(sub { + $self->res->headers->append('X-Suspended' => $self->match->position); + $self->continue; + }); return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojolicious/lite_app.t new/Mojolicious-7.67/t/mojolicious/lite_app.t --- old/Mojolicious-7.66/t/mojolicious/lite_app.t 2018-02-11 16:56:55.000000000 +0100 +++ new/Mojolicious-7.67/t/mojolicious/lite_app.t 2018-02-19 00:43:14.000000000 +0100 @@ -263,13 +263,11 @@ get '/session_cookie' => sub { my $c = shift; $c->render(text => 'Cookie set!'); - $c->res->cookies( - Mojo::Cookie::Response->new( - path => '/session_cookie', - name => 'session', - value => '23' - ) - ); + $c->res->cookies(Mojo::Cookie::Response->new( + path => '/session_cookie', + name => 'session', + value => '23' + )); }; get '/session_cookie/2' => sub { @@ -374,13 +372,11 @@ get '/redirect_callback' => sub { my $c = shift; - Mojo::IOLoop->next_tick( - sub { - $c->res->code(301); - $c->res->body('Whatever!'); - $c->redirect_to('http://127.0.0.1/foo'); - } - ); + Mojo::IOLoop->next_tick(sub { + $c->res->code(301); + $c->res->body('Whatever!'); + $c->redirect_to('http://127.0.0.1/foo'); + }); }; get '/static' => sub { shift->reply->static('hello.txt') }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojolicious/restful_lite_app.t new/Mojolicious-7.67/t/mojolicious/restful_lite_app.t --- old/Mojolicious-7.66/t/mojolicious/restful_lite_app.t 2018-01-03 13:49:16.000000000 +0100 +++ new/Mojolicious-7.67/t/mojolicious/restful_lite_app.t 2018-02-19 00:43:16.000000000 +0100 @@ -39,7 +39,7 @@ json => {json => {just => 'works too'}}, html => {text => '<html><body>works too'}, xml => {data => '<just>works too</just>'}, - any => {text => 'works too', status => 201} + any => {text => 'works too', status => 201} ); }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojolicious/routes.t new/Mojolicious-7.67/t/mojolicious/routes.t --- old/Mojolicious-7.66/t/mojolicious/routes.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojolicious/routes.t 2018-02-19 00:43:06.000000000 +0100 @@ -522,8 +522,8 @@ $m = Mojolicious::Routes::Match->new(root => $r); $m->find($c => {method => 'GET', path => '/wildcards/4/hello/there/foo'}); is_deeply $m->stack, - [{controller => 'somewhat', action => 'dangerous', wildcard => 'hello/there'} - ], 'right structure'; + [{controller => 'somewhat', action => 'dangerous', wildcard => 'hello/there' + }], 'right structure'; is $m->path_for->{path}, '/wildcards/4/hello/there/foo', 'right path'; # Special characters diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.66/t/mojolicious/validation_lite_app.t new/Mojolicious-7.67/t/mojolicious/validation_lite_app.t --- old/Mojolicious-7.66/t/mojolicious/validation_lite_app.t 2018-01-03 14:03:42.000000000 +0100 +++ new/Mojolicious-7.67/t/mojolicious/validation_lite_app.t 2018-02-19 00:43:05.000000000 +0100 @@ -164,13 +164,11 @@ is_deeply $validation->error('yada'), [qw(size 1 5 10)], 'right error'; # Upload -$validation = $t->app->validation->input( - { - foo => Mojo::Upload->new, - bar => [Mojo::Upload->new, Mojo::Upload->new], - baz => [Mojo::Upload->new, 'test'] - } -); +$validation = $t->app->validation->input({ + foo => Mojo::Upload->new, + bar => [Mojo::Upload->new, Mojo::Upload->new], + baz => [Mojo::Upload->new, 'test'] +}); ok $validation->required('foo')->upload->is_valid, 'valid'; ok $validation->required('bar')->upload->is_valid, 'valid'; ok $validation->required('baz')->is_valid, 'valid'; @@ -181,18 +179,15 @@ is_deeply $validation->failed, ['baz'], 'right names'; # Upload size -$validation = $t->app->validation->input( - { - foo => [ - Mojo::Upload->new(asset => Mojo::Asset::Memory->new->add_chunk('valid')) - ], - bar => [ - Mojo::Upload->new( - asset => Mojo::Asset::Memory->new->add_chunk('not valid') - ) - ] - } -); +$validation = $t->app->validation->input({ + foo => + [Mojo::Upload->new(asset => Mojo::Asset::Memory->new->add_chunk('valid'))], + bar => [ + Mojo::Upload->new( + asset => Mojo::Asset::Memory->new->add_chunk('not valid') + ) + ] +}); ok $validation->required('foo')->upload->size(1, 6)->is_valid, 'valid'; ok !$validation->has_error, 'no error'; ok !$validation->required('bar')->upload->size(1, 6)->is_valid, 'not valid';