Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package os-autoinst for openSUSE:Factory 
checked in at 2026-09-28 10:44:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old)
 and      /work/SRC/openSUSE:Factory/.os-autoinst.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "os-autoinst"

Mon Sep 28 10:44:41 2026 rev:623 rq:1380737 version:5.1790352490.8968207

Changes:
--------
--- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes  2026-09-24 
22:58:11.091048238 +0200
+++ /work/SRC/openSUSE:Factory/.os-autoinst.new.383539/os-autoinst.changes      
2026-09-28 10:44:57.035176753 +0200
@@ -1,0 +2,32 @@
+Fri Sep 25 16:08:20 UTC 2026 - [email protected]
+
+- Update to version 5.1790352490.8968207:
+  * fix: remove redundant and invalid ruff selectors
+  * fix(test): Ignore flaky test on ppc64le as well
+  * fix(autotest): robustify find_script against undefined CASEDIR
+  * test(t/18-backend-qemu): mock IO::Socket::IP to fix port check race
+  * feat: support holding key for duration in send_key
+  * refactor: remove ProhibitExcessComplexity exclusion from read_json
+  * refactor: remove ProhibitManyArgs exclusions from sshVirtsh
+  * refactor: remove ProhibitManyArgs exclusion from add_existing_drive
+  * refactor: remove ProhibitManyArgs exclusion from clone_git
+  * refactor: remove ProhibitManyArgs exclusion from Dewebsockify
+  * style: remove redundant max_arguments override from perlcritic
+  * style: remove perlcritic cascading if-elsif override
+  * refactor: remove redundant perlcritic complexity overrides
+  * style: reduce perlcritic complexity and argument thresholds
+  * feat: Identify executed commands directly from timeline step boxes
+  * fix(git): remove leading slash from cache path
+
+-------------------------------------------------------------------
+Thu Sep 24 16:50:59 UTC 2026 - [email protected]
+
+- Update to version 5.1790268649.6700621:
+  * fix(test): Ignore flaky test on ppc64le as well
+  * fix(autotest): robustify find_script against undefined CASEDIR
+  * build(deps): bump codecov/codecov-action in the all-actions group (#3103)
+  * test(t/18-backend-qemu): mock IO::Socket::IP to fix port check race
+  * refactor: remove ProhibitExcessComplexity exclusion from read_json
+  * refactor: remove ProhibitManyArgs exclusions from sshVirtsh
+
+-------------------------------------------------------------------

Old:
----
  os-autoinst-5.1790145813.282ca44.obscpio

New:
----
  os-autoinst-5.1790352490.8968207.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ os-autoinst-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.pcaJgn/_old  2026-09-28 10:44:59.803292726 +0200
+++ /var/tmp/diff_new_pack.pcaJgn/_new  2026-09-28 10:44:59.807292894 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name os-autoinst-devel
 Name:           %{short_name}-test
-Version:        5.1790145813.282ca44
+Version:        5.1790352490.8968207
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ os-autoinst-openvswitch-test.spec ++++++
--- /var/tmp/diff_new_pack.pcaJgn/_old  2026-09-28 10:44:59.874295701 +0200
+++ /var/tmp/diff_new_pack.pcaJgn/_new  2026-09-28 10:44:59.880295952 +0200
@@ -19,7 +19,7 @@
 %define name_ext -test
 %define         short_name os-autoinst-openvswitch
 Name:           %{short_name}%{?name_ext}
-Version:        5.1790145813.282ca44
+Version:        5.1790352490.8968207
 Release:        0
 Summary:        test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ os-autoinst-test.spec ++++++
--- /var/tmp/diff_new_pack.pcaJgn/_old  2026-09-28 10:44:59.959299262 +0200
+++ /var/tmp/diff_new_pack.pcaJgn/_new  2026-09-28 10:44:59.965299514 +0200
@@ -19,7 +19,7 @@
 %define name_ext -test
 %define         short_name os-autoinst
 Name:           %{short_name}%{?name_ext}
-Version:        5.1790145813.282ca44
+Version:        5.1790352490.8968207
 Release:        0
 Summary:        test package for os-autoinst
 License:        GPL-2.0-or-later

++++++ os-autoinst.spec ++++++
--- /var/tmp/diff_new_pack.pcaJgn/_old  2026-09-28 10:45:00.044302824 +0200
+++ /var/tmp/diff_new_pack.pcaJgn/_new  2026-09-28 10:45:00.045302866 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           os-autoinst
-Version:        5.1790145813.282ca44
+Version:        5.1790352490.8968207
 Release:        0
 Summary:        OS-level test automation
 License:        GPL-2.0-or-later
@@ -281,7 +281,7 @@
 # https://progress.opensuse.org/issues/202836
 rm -f t/28-signalblocker.t
 %endif
-%ifarch aarch64 s390x
+%ifarch aarch64 s390x ppc64le
 # https://progress.opensuse.org/issues/200949
 rm -f t/26-video_stream.t
 %endif

++++++ os-autoinst-5.1790145813.282ca44.obscpio -> 
os-autoinst-5.1790352490.8968207.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Interface.pm 
new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Interface.pm
--- old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Interface.pm 
2026-09-23 08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Interface.pm 
2026-09-25 18:08:10.000000000 +0200
@@ -9,7 +9,7 @@
 # -> increment on every change of such APIs
 # -> never move that variable to another place (when refactoring)
 #    because it may be accessed by the tests itself
-our $version = 59;    ## no critic (Variables::ProhibitPackageVars)
+our $version = 60;    ## no critic (Variables::ProhibitPackageVars)
 
 # major version of the (web socket) API relevant to the developer mode
 # -> increment when making non-backward compatible changes to that API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Utils.pm 
new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Utils.pm
--- old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Utils.pm     
2026-09-23 08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Utils.pm     
2026-09-25 18:08:10.000000000 +0200
@@ -141,7 +141,7 @@
 sub _handle_caching ($clone_url, $clone_depth, $branch, $clone_cmd, 
$handle_output) {
     # determine cache directory and ensure its parent directory exists
     return undef unless my $git_cache_dir = $bmwqemu::vars{GIT_CACHE_DIR};
-    my $relative_cache_dir = $clone_url->path;
+    my $relative_cache_dir = $clone_url->path->clone->leading_slash(0);
     my $cache_dir = path($git_cache_dir, $relative_cache_dir);
     path($git_cache_dir, $relative_cache_dir->to_dir)->make_path;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/autotest.pm 
new/os-autoinst-5.1790352490.8968207/autotest.pm
--- old/os-autoinst-5.1790145813.282ca44/autotest.pm    2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/autotest.pm    2026-09-25 
18:08:10.000000000 +0200
@@ -58,19 +58,19 @@
 sub find_script ($script) {
     my $wheels_dir = $bmwqemu::vars{WHEELS_DIR} // Cwd::getcwd;
     if (defined(my $wheel = bsd_glob "$wheels_dir/*/tests/$script")) {
-        return $wheel;
+        return path($wheel);
     }
     my $casedir = $bmwqemu::vars{CASEDIR};
-    my $script_override_path = join '/', $bmwqemu::vars{ASSETDIR} // '', 
'other', $script;
+    my $script_override_path = path($bmwqemu::vars{ASSETDIR} // '', 'other', 
$script);
     if (-f $script_override_path) {
         bmwqemu::diag("Found override test module for $script: 
$script_override_path");
-        return path($script_override_path)->to_rel($casedir);
+        return defined $casedir ? $script_override_path->to_rel($casedir) : 
$script_override_path;
     }
-    elsif (!-f join '/', $casedir, $script) {
+    elsif (defined $casedir && !-f join '/', $casedir, $script) {
         warn "loadtest needs a script below $casedir - $script is not\n";
         return path($script)->to_rel($casedir);
     }
-    return "$casedir/$script";
+    return defined $casedir ? path($casedir, $script) : path($script);
 }
 
 =head2 loadtest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-autoinst-5.1790145813.282ca44/backend/baseclass.pm 
new/os-autoinst-5.1790352490.8968207/backend/baseclass.pm
--- old/os-autoinst-5.1790145813.282ca44/backend/baseclass.pm   2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/backend/baseclass.pm   2026-09-25 
18:08:10.000000000 +0200
@@ -780,6 +780,13 @@
 }
 
 sub send_key ($self, $args) {
+    if (ref $args eq 'HASH' && (my $hold_duration = $args->{hold_duration})) {
+        return undef unless $self->{current_screen};
+        $self->hold_key($args);
+        my $guard = scope_guard sub { $self->release_key($args) };
+        $self->run_capture_loop($hold_duration);
+        return {};
+    }
     return $self->bouncer('send_key', $args);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/basetest.pm 
new/os-autoinst-5.1790352490.8968207/basetest.pm
--- old/os-autoinst-5.1790145813.282ca44/basetest.pm    2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/basetest.pm    2026-09-25 
18:08:10.000000000 +0200
@@ -15,6 +15,9 @@
 use MIME::Base64 'decode_base64';
 use OpenQA::Exceptions;
 use Mojo::File 'path';
+use Encode qw(encode_utf8);
+
+use constant MAX_TITLE_LENGTH => 20;
 
 my $serial_file_pos = 0;
 my $autoinst_log_pos = 0;
@@ -478,6 +481,15 @@
     $output .= "# Command: $args{command}\n" if defined $args{command};
     $output .= "# wait_serial expected: $ref\n" unless $internal && $pretty;
     $output .= "# Result:\n";
+    if (defined $captured_val && $args{capture_name}) {
+        my $title = $args{command} // 'wait_serial';
+        $title =~ s/\n.*//s;
+        if (length($title) > MAX_TITLE_LENGTH) {
+            $title = substr($title, 0, MAX_TITLE_LENGTH - 1) . '…';
+        }
+        $title = encode_utf8($title);
+        $output .= "$title\n";
+    }
     $output .= "$output_string\n";
     if (defined $captured_val && $args{capture_name}) {
         $output .= "# $args{capture_name}: $captured_val\n";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-autoinst-5.1790145813.282ca44/dist/rpm/os-autoinst.spec 
new/os-autoinst-5.1790352490.8968207/dist/rpm/os-autoinst.spec
--- old/os-autoinst-5.1790145813.282ca44/dist/rpm/os-autoinst.spec      
2026-09-23 08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/dist/rpm/os-autoinst.spec      
2026-09-25 18:08:10.000000000 +0200
@@ -281,7 +281,7 @@
 # https://progress.opensuse.org/issues/202836
 rm -f t/28-signalblocker.t
 %endif
-%ifarch aarch64 s390x
+%ifarch aarch64 s390x ppc64le
 # https://progress.opensuse.org/issues/200949
 rm -f t/26-video_stream.t
 %endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/pyproject.toml 
new/os-autoinst-5.1790352490.8968207/pyproject.toml
--- old/os-autoinst-5.1790145813.282ca44/pyproject.toml 2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/pyproject.toml 2026-09-25 
18:08:10.000000000 +0200
@@ -9,8 +9,6 @@
 # PL: Pylint
 extend-select =[
     "E", "F", "D", "Q", "PL",
-    "debugger", # https://docs.astral.sh/ruff/rules/#flake8-debugger-t10
-    "T2", # https://docs.astral.sh/ruff/rules/#flake8-print-t20
     "TD", # https://docs.astral.sh/ruff/rules/#flake8-todos-td
     "W",
     "I", # https://docs.astral.sh/ruff/rules/#isort-i
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/03-testapi.t 
new/os-autoinst-5.1790352490.8968207/t/03-testapi.t
--- old/os-autoinst-5.1790145813.282ca44/t/03-testapi.t 2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/t/03-testapi.t 2026-09-25 
18:08:10.000000000 +0200
@@ -286,6 +286,10 @@
 is_deeply $cmds, [{cmd => 'backend_send_key', key => 'ret'}], 'send_key with 
no default arguments' or always_explain $cmds;
 $cmds = [];
 
+send_key 'f12', hold_duration => 2;
+is_deeply $cmds, [{cmd => 'backend_send_key', key => 'f12', hold_duration => 
2}], 'send_key forwards hold_duration parameter' or always_explain $cmds;
+$cmds = [];
+
 $mock_bmwqemu->redefine(result_dir => File::Temp->newdir());
 
 subtest 'send_key with wait_screen_change' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/17-basetest.t 
new/os-autoinst-5.1790352490.8968207/t/17-basetest.t
--- old/os-autoinst-5.1790145813.282ca44/t/17-basetest.t        2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/t/17-basetest.t        2026-09-25 
18:08:10.000000000 +0200
@@ -14,6 +14,7 @@
 use Mojo::JSON qw(decode_json);
 use Mojo::Util qw(scope_guard);
 use MIME::Base64 'encode_base64';
+use Encode 'encode_utf8';
 use cv;
 use basetest;
 
@@ -610,7 +611,21 @@
             name => 'Exit code is displayed when capture_name is provided',
             vars => {PRETTY_SERIAL_OUTPUT => 1},
             params => ['regex', 'ok', "command output\nOA:DONE-1234-0-\n", 
internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, 
capture_name => 'Exit code'],
-            expected => [qr/# Exit code: 0/, qr/command output\n\s*\n/],
+            expected => [qr/# Result:\nwait_serial\ncommand output/s, qr/# 
Exit code: 0/],
+            not_expected => [qr/# wait_serial expected: regex/],
+        },
+        {
+            name => 'command is truncated to MAX_TITLE_LENGTH with ellipsis 
when capture_name is provided',
+            vars => {PRETTY_SERIAL_OUTPUT => 1},
+            params => ['regex', 'ok', "command output\nOA:DONE-1234-0-\n", 
internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, 
capture_name => 'Exit code', command => 'systemctl status 
foo-bar-service.service'],
+            expected => [qr/# Result:\nsystemctl status 
fo@{[encode_utf8('…')]}\ncommand output/s, qr/# Exit code: 0/],
+            not_expected => [qr/# wait_serial expected: regex/],
+        },
+        {
+            name => 'multiline command uses only first line for title when 
capture_name is provided',
+            vars => {PRETTY_SERIAL_OUTPUT => 1},
+            params => ['regex', 'ok', "command output\nOA:DONE-1234-0-\n", 
internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, 
capture_name => 'Exit code', command => "echo 'hello'\necho 'second'"],
+            expected => [qr/# Result:\necho 'hello'\ncommand output/s, qr/# 
Exit code: 0/],
             not_expected => [qr/# wait_serial expected: regex/],
         },
         {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/23-baseclass.t 
new/os-autoinst-5.1790352490.8968207/t/23-baseclass.t
--- old/os-autoinst-5.1790145813.282ca44/t/23-baseclass.t       2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/t/23-baseclass.t       2026-09-25 
18:08:10.000000000 +0200
@@ -1121,6 +1121,40 @@
     is $baseclass->get_last_mouse_set('args'), 'last_mouse', 
'get_last_mouse_set forwarded';
 };
 
+subtest 'send_key with hold_duration' => sub {
+    my $mock_screen = Test::MockObject->new;
+    my @calls;
+    $mock_screen->mock(hold_key => sub { push @calls, ['hold', $_[1]] });
+    $mock_screen->mock(release_key => sub { push @calls, ['release', $_[1]] });
+    my $mock_base = Test::MockModule->new('backend::baseclass');
+    $mock_base->redefine(run_capture_loop => sub ($self, $timeout = undef) {
+            push @calls, ['capture', $timeout];
+    });
+
+    local $baseclass->{current_screen} = $mock_screen;
+    is_deeply $baseclass->send_key({key => 'ctrl', hold_duration => 2}), {}, 
'send_key with hold_duration returns empty hashref';
+    is_deeply \@calls, [
+        ['hold', {key => 'ctrl', hold_duration => 2}],
+        ['capture', 2],
+        ['release', {key => 'ctrl', hold_duration => 2}],
+    ], 'send_key with hold_duration executes hold_key, run_capture_loop, and 
release_key in order';
+
+    @calls = ();
+    $mock_base->redefine(run_capture_loop => sub ($self, $timeout = undef) {
+            push @calls, ['capture', $timeout];
+            die "capture loop failed\n";
+    });
+    throws_ok { $baseclass->send_key({key => 'ctrl', hold_duration => 2}) } 
qr/capture loop failed/, 'dies if capture loop fails';
+    is_deeply \@calls, [
+        ['hold', {key => 'ctrl', hold_duration => 2}],
+        ['capture', 2],
+        ['release', {key => 'ctrl', hold_duration => 2}],
+    ], 'release_key called even when run_capture_loop dies';
+
+    local $baseclass->{current_screen} = undef;
+    is $baseclass->send_key({key => 'ctrl', hold_duration => 2}), undef, 
'returns undef when current_screen is undefined';
+};
+
 subtest 'reload_needles' => sub {
     $baseclass_mock->unmock('reload_needles');
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/34-git.t 
new/os-autoinst-5.1790352490.8968207/t/34-git.t
--- old/os-autoinst-5.1790145813.282ca44/t/34-git.t     2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/t/34-git.t     2026-09-25 
18:08:10.000000000 +0200
@@ -182,6 +182,7 @@
         $index = decode_json($git_cache_dir->child('index.json')->slurp);
         is ref $index, 'HASH', 'index is hash' or return;
         my $repo_path = $ENV{OS_AUTOINST_TEST_GIT_ONLINE} ? 
"/$orga/$repo$suffix" : "$orga/$repo";
+        $repo_path =~ s{^/}{};
         my $repo_entry = $index->{$repo_path};
         is ref $repo_entry, 'HASH', "entry for '$repo_path' exists" or return;
         cmp_ok $repo_entry->{size}, '>', 0, 'valid size assigned';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/testapi.pm 
new/os-autoinst-5.1790352490.8968207/testapi.pm
--- old/os-autoinst-5.1790145813.282ca44/testapi.pm     2026-09-23 
08:43:33.000000000 +0200
+++ new/os-autoinst-5.1790352490.8968207/testapi.pm     2026-09-25 
18:08:10.000000000 +0200
@@ -1310,10 +1310,11 @@
 
 =head2 send_key
 
-  send_key($key [, wait_screen_change => $wait_screen_change]);
+  send_key($key [, hold_duration => $seconds] [, wait_screen_change => 
$wait_screen_change]);
 
-Send one C<$key> to SUT keyboard input. Waits for the screen to change when
-C<$wait_screen_change> is true.
+Send one C<$key> to SUT keyboard input. If C<hold_duration> in seconds
+is specified, the key is held for that duration before being released. Waits 
for
+the screen to change when C<$wait_screen_change> is true.
 
 Special characters naming:
 
@@ -1327,11 +1328,13 @@
     my ($key, %args) = @_;
     $args{wait_screen_change} //= 0;
     bmwqemu::log_call(key => $key, %args);
+    my %backend_args = (key => $key);
+    $backend_args{hold_duration} = $args{hold_duration} if defined 
$args{hold_duration};
     if ($args{wait_screen_change}) {
-        wait_screen_change { query_isotovideo('backend_send_key', {key => 
$key}) };
+        wait_screen_change { query_isotovideo('backend_send_key', 
\%backend_args) };
     }
     else {
-        query_isotovideo('backend_send_key', {key => $key});
+        query_isotovideo('backend_send_key', \%backend_args);
     }
 }
 

++++++ os-autoinst.obsinfo ++++++
--- /var/tmp/diff_new_pack.pcaJgn/_old  2026-09-28 10:45:03.686455416 +0200
+++ /var/tmp/diff_new_pack.pcaJgn/_new  2026-09-28 10:45:03.692455667 +0200
@@ -1,5 +1,5 @@
 name: os-autoinst
-version: 5.1790145813.282ca44
-mtime: 1790145813
-commit: 282ca44441fdf0dfd37891bdf1d73c35bfc152de
+version: 5.1790352490.8968207
+mtime: 1790352490
+commit: 89682075eaef1bb69db68f9a024b539d29bceed6
 

Reply via email to