Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Mojolicious-Plugin-OpenAPI for
openSUSE:Factory checked in at 2026-06-15 19:50:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious-Plugin-OpenAPI (Old)
and /work/SRC/openSUSE:Factory/.perl-Mojolicious-Plugin-OpenAPI.new.1981
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Mojolicious-Plugin-OpenAPI"
Mon Jun 15 19:50:05 2026 rev:2 rq:1359508 version:5.120.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Mojolicious-Plugin-OpenAPI/perl-Mojolicious-Plugin-OpenAPI.changes
2025-09-10 20:23:00.947175573 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Mojolicious-Plugin-OpenAPI.new.1981/perl-Mojolicious-Plugin-OpenAPI.changes
2026-06-15 19:53:36.524992579 +0200
@@ -1,0 +2,10 @@
+Sun Jun 7 00:40:58 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 5.120.0 (5.12)
+ see /usr/share/doc/packages/perl-Mojolicious-Plugin-OpenAPI/Changes
+
+ 5.12 2026-06-06T21:34:00
+ - Combine body_params and uploads on multipart/form-data requests #267
+ Contributor: Archey Barrell
+
+-------------------------------------------------------------------
Old:
----
Mojolicious-Plugin-OpenAPI-5.11.tar.gz
New:
----
Mojolicious-Plugin-OpenAPI-5.12.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Mojolicious-Plugin-OpenAPI.spec ++++++
--- /var/tmp/diff_new_pack.17PcOT/_old 2026-06-15 19:53:38.025055491 +0200
+++ /var/tmp/diff_new_pack.17PcOT/_new 2026-06-15 19:53:38.029055658 +0200
@@ -1,7 +1,7 @@
#
# spec file for package perl-Mojolicious-Plugin-OpenAPI
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,10 +18,10 @@
%define cpan_name Mojolicious-Plugin-OpenAPI
Name: perl-Mojolicious-Plugin-OpenAPI
-Version: 5.110.0
+Version: 5.120.0
Release: 0
-# 5.11 -> normalize -> 5.110.0
-%define cpan_version 5.11
+# 5.12 -> normalize -> 5.120.0
+%define cpan_version 5.12
License: Artistic-2.0
Summary: OpenAPI / Swagger plugin for Mojolicious
URL: https://metacpan.org/release/%{cpan_name}
@@ -30,10 +30,10 @@
BuildArch: noarch
BuildRequires: perl
BuildRequires: perl-macros
-BuildRequires: perl(JSON::Validator) >= 5.130
+BuildRequires: perl(JSON::Validator) >= 5.170
BuildRequires: perl(Mojolicious) >= 9.0
BuildRequires: perl(Test::More) >= 0.88
-Requires: perl(JSON::Validator) >= 5.130
+Requires: perl(JSON::Validator) >= 5.170
Requires: perl(Mojolicious) >= 9.0
Provides: perl(Mojolicious::Plugin::OpenAPI) = %{version}
Provides: perl(Mojolicious::Plugin::OpenAPI::Cors)
++++++ Mojolicious-Plugin-OpenAPI-5.11.tar.gz ->
Mojolicious-Plugin-OpenAPI-5.12.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/Changes
new/Mojolicious-Plugin-OpenAPI-5.12/Changes
--- old/Mojolicious-Plugin-OpenAPI-5.11/Changes 2025-03-18 15:27:40.000000000
+0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/Changes 2026-06-06 14:36:21.000000000
+0200
@@ -1,5 +1,9 @@
Revision history for perl distribution Mojolicious-Plugin-OpenAPI
+5.12 2026-06-06T21:34:00
+ - Combine body_params and uploads on multipart/form-data requests #267
+ Contributor: Archey Barrell
+
5.11 2025-03-18T23:24:00
- Fix bad commit from Github
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/MANIFEST
new/Mojolicious-Plugin-OpenAPI-5.12/MANIFEST
--- old/Mojolicious-Plugin-OpenAPI-5.11/MANIFEST 2025-03-18
15:27:55.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/MANIFEST 2026-06-06
14:36:37.000000000 +0200
@@ -69,6 +69,7 @@
t/v3-file.t
t/v3-invalid_file_refs.t
t/v3-invalid_file_refs_no_path.t
+t/v3-multipart.t
t/v3-nullable.t
t/v3-style-array.t
t/v3-style-object.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/META.json
new/Mojolicious-Plugin-OpenAPI-5.12/META.json
--- old/Mojolicious-Plugin-OpenAPI-5.11/META.json 2025-03-18
15:27:54.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/META.json 2026-06-06
14:36:37.000000000 +0200
@@ -37,7 +37,7 @@
"Text::Markdown" : "v1.0.31"
},
"requires" : {
- "JSON::Validator" : "5.13",
+ "JSON::Validator" : "5.17",
"Mojolicious" : "9.00",
"perl" : "5.016"
}
@@ -67,7 +67,7 @@
"web" : "https://web.libera.chat/#perl-openapi"
}
},
- "version" : "5.11",
+ "version" : "5.12",
"x_contributors" : [
"Bernhard Graf <[email protected]>",
"Doug Bell <[email protected]>",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/META.yml
new/Mojolicious-Plugin-OpenAPI-5.12/META.yml
--- old/Mojolicious-Plugin-OpenAPI-5.11/META.yml 2025-03-18
15:27:54.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/META.yml 2026-06-06
14:36:37.000000000 +0200
@@ -23,7 +23,7 @@
recommends:
Text::Markdown: v1.0.31
requires:
- JSON::Validator: '5.13'
+ JSON::Validator: '5.17'
Mojolicious: '9.00'
perl: '5.016'
resources:
@@ -34,7 +34,7 @@
homepage: https://github.com/jhthorsen/mojolicious-plugin-openapi
license: http://www.opensource.org/licenses/artistic-license-2.0
repository: https://github.com/jhthorsen/mojolicious-plugin-openapi.git
-version: '5.11'
+version: '5.12'
x_contributors:
- 'Bernhard Graf <[email protected]>'
- 'Doug Bell <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/Makefile.PL
new/Mojolicious-Plugin-OpenAPI-5.12/Makefile.PL
--- old/Mojolicious-Plugin-OpenAPI-5.11/Makefile.PL 2025-03-18
15:27:40.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/Makefile.PL 2026-06-06
14:36:21.000000000 +0200
@@ -12,7 +12,7 @@
ABSTRACT_FROM => 'lib/Mojolicious/Plugin/OpenAPI.pm',
VERSION_FROM => 'lib/Mojolicious/Plugin/OpenAPI.pm',
TEST_REQUIRES => {'Test::More' => '0.88'},
- PREREQ_PM => {'JSON::Validator' => '5.13', 'Mojolicious' => '9.00'},
+ PREREQ_PM => {'JSON::Validator' => '5.17', 'Mojolicious' => '9.00'},
META_MERGE => {
'dynamic_config' => 0,
'meta-spec' => {version => 2},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Mojolicious-Plugin-OpenAPI-5.11/lib/Mojolicious/Plugin/OpenAPI/Parameters.pm
new/Mojolicious-Plugin-OpenAPI-5.12/lib/Mojolicious/Plugin/OpenAPI/Parameters.pm
---
old/Mojolicious-Plugin-OpenAPI-5.11/lib/Mojolicious/Plugin/OpenAPI/Parameters.pm
2025-03-18 15:27:54.000000000 +0100
+++
new/Mojolicious-Plugin-OpenAPI-5.12/lib/Mojolicious/Plugin/OpenAPI/Parameters.pm
2026-06-06 14:36:36.000000000 +0200
@@ -127,9 +127,21 @@
eval {
$res->{value} //= $c->req->body_params->to_hash
- if grep { $content_type eq $_ } qw(application/x-www-form-urlencoded
multipart/form-data);
+ if $content_type =~ /^application\/x-www-form-urlencoded\s*(;|$)/i;
- # Trying to use the already parsed json() or fallback to manually decoding
the request
+ if ($content_type =~ /^multipart\/form-data\s*(;|$)/i) {
+ # body_params only includes non-file parameters, so we need to fetch the
+ # uploads separately and append them as Mojo::Upload objects.
+ #
+ # we also have to clone body_params before we merge in the file uploads
+ # because it's used as a cache by other helpers that expect it to
+ # only contain body parameters
+ my $params = $c->req->body_params->clone;
+ $params->append($_->name => $_) for @{$c->req->uploads};
+ $res->{value} = $params->to_hash;
+ }
+
+ # Try to use the already parsed json() or fallback to manually decoding
the request
# since it will make the eval {} fail on invalid json.
$res->{value} //= $c->req->json // decode_json $c->req->body;
1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Mojolicious-Plugin-OpenAPI-5.11/lib/Mojolicious/Plugin/OpenAPI.pm
new/Mojolicious-Plugin-OpenAPI-5.12/lib/Mojolicious/Plugin/OpenAPI.pm
--- old/Mojolicious-Plugin-OpenAPI-5.11/lib/Mojolicious/Plugin/OpenAPI.pm
2025-03-18 15:27:54.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/lib/Mojolicious/Plugin/OpenAPI.pm
2026-06-06 14:36:36.000000000 +0200
@@ -8,7 +8,7 @@
use constant DEBUG => $ENV{MOJO_OPENAPI_DEBUG} || 0;
-our $VERSION = '5.11';
+our $VERSION = '5.12';
has route => sub {undef};
has validator => sub { JSON::Validator::Schema->new; };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/t/v3-file.t
new/Mojolicious-Plugin-OpenAPI-5.12/t/v3-file.t
--- old/Mojolicious-Plugin-OpenAPI-5.11/t/v3-file.t 2025-03-18
15:27:40.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/t/v3-file.t 2026-06-06
14:36:21.000000000 +0200
@@ -23,6 +23,14 @@
form => {id => 1, image => {file => $image}}
)->content_like(qr{"size"})->status_is(200);
+$image = Mojo::Asset::Memory->new->add_chunk('smileyface');
+$t->post_ok(
+ '/api/upload',
+ {Accept => 'application/json'},
+ form => {id => 1, image => [{file => $image}, 'unhappy face']}
+)->status_is(400)
+ ->json_is('/errors/0', {message => 'Expected string - got array.', path =>
'/body/image'});
+
done_testing;
__DATA__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Mojolicious-Plugin-OpenAPI-5.11/t/v3-multipart.t
new/Mojolicious-Plugin-OpenAPI-5.12/t/v3-multipart.t
--- old/Mojolicious-Plugin-OpenAPI-5.11/t/v3-multipart.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Mojolicious-Plugin-OpenAPI-5.12/t/v3-multipart.t 2026-06-06
14:36:21.000000000 +0200
@@ -0,0 +1,222 @@
+use Mojo::Base -strict;
+use Test::Mojo;
+use Test::More;
+
+use Mojolicious::Lite;
+
+post '/formdata' => sub {
+ my $c = shift;
+ $c->openapi->valid_input or return;
+
+ my $name = $c->param('name');
+
+ $c->render(json => {name => $name}, status => 200);
+ },
+ 'formdata';
+
+post '/formdata_array' => sub {
+ my $c = shift;
+ $c->openapi->valid_input or return;
+
+ my $names = $c->req->body_params->every_param('name');
+
+ $c->render(json => {name => $names, count => scalar @$names}, status =>
200);
+ },
+ 'formdata_array';
+
+post '/upload' => sub {
+ my $c = shift;
+ $c->openapi->valid_input or return;
+
+ $c->render(openapi => {size => $c->req->upload('image')->size});
+ },
+ 'upload';
+
+post '/upload_array' => sub {
+ my $c = shift;
+ $c->openapi->valid_input or return;
+
+ my $sizes = [map { $_->size } @{$c->req->every_upload('image')}];
+
+ $c->render(openapi => {size => $sizes, count => scalar @$sizes});
+ },
+ 'upload_array';
+
+plugin OpenAPI => {url => 'data://main/openapi.yaml'};
+
+my $t = Test::Mojo->new;
+
+# Basic data validation
+
+$t->post_ok('/api/formdata', {'Content-Type' => 'application/json'}, json =>
{foo => 42})
+ ->status_is(400)
+ ->json_is('/errors/0', {message => 'Expected multipart/form-data - got
application/json.', path => '/body'});
+
+$t->post_ok('/api/formdata', {'Content-Type' => 'multipart/form-data'}, form
=> {foo => 42})
+ ->status_is(400)
+ ->json_is('/errors/0', {message => 'Missing property.', path =>
'/body/name'});
+
+$t->post_ok('/api/formdata', {'Content-Type' => 'multipart/form-data'}, form
=> {name => 'John'})
+ ->status_is(200)
+ ->json_is('/name', 'John');
+
+$t->post_ok('/api/formdata', {'Content-Type' => 'multipart/form-data'}, form
=> {name => ['John', 'Jane']})
+ ->status_is(400)
+ ->json_is('/errors/0', {message => 'Expected string - got array.', path =>
'/body/name'});
+
+$t->post_ok('/api/formdata_array', {'Content-Type' => 'multipart/form-data'},
form => {name => 'John'})
+ ->status_is(200)
+ ->json_is('/name', ['John'])
+ ->json_is('/count', 1);
+
+$t->post_ok('/api/formdata_array', {'Content-Type' => 'multipart/form-data'},
form => {name => ['John', 'Jane']})
+ ->status_is(200)
+ ->json_is('/name', ['John', 'Jane'])
+ ->json_is('/count', 2);
+
+# File upload
+
+my $image = Mojo::Asset::Memory->new->add_chunk('smileyface');
+
+$t->post_ok('/api/upload', {'Content-Type' => 'multipart/form-data'}, form =>
{image => {file => $image}})
+ ->status_is(200)
+ ->json_has('/size');
+
+$t->post_ok('/api/upload', {'Content-Type' => 'multipart/form-data'}, form =>
{picture => {file => $image}})
+ ->status_is(400)
+ ->json_is('/errors/0', {message => 'Missing property.', path =>
'/body/image'});
+
+$t->post_ok('/api/upload', {'Content-Type' => 'multipart/form-data'}, form =>
{image => [{file => $image}, {file => $image}]})
+ ->status_is(400)
+ ->json_is('/errors/0', {message => 'Expected string - got array.', path =>
'/body/image'});
+
+$t->post_ok('/api/upload_array', {'Content-Type' => 'multipart/form-data'},
form => {image => {file => $image}})
+ ->status_is(200)
+ ->json_has('/size')
+ ->json_is('/count', 1);
+
+$t->post_ok('/api/upload_array', {'Content-Type' => 'multipart/form-data'},
form => {image => [{file => $image}, {file => $image}]})
+ ->status_is(200)
+ ->json_has('/size')
+ ->json_is('/count', 2);
+
+done_testing;
+
+__DATA__
+@@ openapi.yaml
+---
+openapi: 3.0.0
+info:
+ title: Upload test
+ version: 1.0.0
+servers:
+- url: http://example.com/api
+paths:
+ /formdata:
+ post:
+ x-mojo-name: formdata
+ requestBody:
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ responses:
+ 200:
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ required: [ name ]
+ properties:
+ name:
+ type: string
+ /formdata_array:
+ post:
+ x-mojo-name: formdata_array
+ requestBody:
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ name:
+ type: array
+ items:
+ type: string
+ required:
+ - name
+ responses:
+ 200:
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ required: [ name ]
+ properties:
+ name:
+ type: array
+ items:
+ type: string
+ count:
+ type: integer
+ /upload:
+ post:
+ operationId: upload
+ requestBody:
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ required: [ image ]
+ properties:
+ image:
+ type: string
+ format: binary
+ responses:
+ 200:
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ required: [ size ]
+ properties:
+ size:
+ type: integer
+ /upload_array:
+ post:
+ operationId: upload_array
+ requestBody:
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ required: [ image ]
+ properties:
+ image:
+ type: array
+ items:
+ type: string
+ format: binary
+ responses:
+ 200:
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ required: [ size ]
+ properties:
+ size:
+ type: array
+ items:
+ type: integer
+ count:
+ type: integer
\ No newline at end of file
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.17PcOT/_old 2026-06-15 19:53:38.273065892 +0200
+++ /var/tmp/diff_new_pack.17PcOT/_new 2026-06-15 19:53:38.285066395 +0200
@@ -1,6 +1,6 @@
-mtime: 1755015337
-commit: f7712c169d6f7a2d18935c9b91642cdf00231ceafc9ae16b4921ae6b2f273c56
-url: https://src.opensuse.org/perl/perl-Mojolicious-Plugin-OpenAPI.git
-revision: f7712c169d6f7a2d18935c9b91642cdf00231ceafc9ae16b4921ae6b2f273c56
+mtime: 1780792858
+commit: f32cab17df3e90a9905f5cb65d221b57b76138dbeb69227fdb2e2134b728c47f
+url: https://src.opensuse.org/perl/perl-Mojolicious-Plugin-OpenAPI
+revision: f32cab17df3e90a9905f5cb65d221b57b76138dbeb69227fdb2e2134b728c47f
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ build.specials.obscpio ++++++
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-06-07 02:40:58.000000000 +0200
@@ -0,0 +1 @@
+.osc