Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package opi for openSUSE:Factory checked in 
at 2025-09-04 17:59:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/opi (Old)
 and      /work/SRC/openSUSE:Factory/.opi.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "opi"

Thu Sep  4 17:59:41 2025 rev:71 rq:1302701 version:5.8.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/opi/opi.changes  2025-06-02 22:01:15.794969694 
+0200
+++ /work/SRC/openSUSE:Factory/.opi.new.1977/opi.changes        2025-09-04 
18:02:24.302348725 +0200
@@ -1,0 +2,11 @@
+Thu Sep  4 09:23:42 UTC 2025 - Dominik Heidler <[email protected]>
+
+- Version 5.8.7
+  * Fix ocenaudio url
+  * Add LocalSend plugin
+  * Run all tests in verbose mode
+  * Print written repo files in verbose mode
+  * Increase timeouts in test/06_install_non_interactive.py
+  * Remove DNF references from README.md
+
+-------------------------------------------------------------------

Old:
----
  opi-5.8.5.tar.gz

New:
----
  opi-5.8.7.tar.gz

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

Other differences:
------------------
++++++ opi.spec ++++++
--- /var/tmp/diff_new_pack.vOlxDl/_old  2025-09-04 18:02:25.394394719 +0200
+++ /var/tmp/diff_new_pack.vOlxDl/_new  2025-09-04 18:02:25.398394887 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package opi
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 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
@@ -20,7 +20,7 @@
 %define pythons %{use_python}
 
 Name:           opi
-Version:        5.8.5
+Version:        5.8.7
 Release:        0
 Summary:        OBS Package Installer (CLI)
 License:        GPL-3.0-only

++++++ opi-5.8.5.tar.gz -> opi-5.8.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/README.md new/opi-5.8.7/README.md
--- old/opi-5.8.5/README.md     2025-06-02 12:16:53.000000000 +0200
+++ new/opi-5.8.7/README.md     2025-09-04 11:23:35.000000000 +0200
@@ -16,11 +16,6 @@
 - python3-lxml
 - python3-termcolor
 
-If you want to use dnf instead of zypper, you also need:
-
-- dnf
-- libdnf-repo-config-zypp
-
 ## Install
 
 ### openSUSE Tumbleweed and Leap
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/opi/__init__.py 
new/opi-5.8.7/opi/__init__.py
--- old/opi-5.8.5/opi/__init__.py       2025-06-02 12:16:53.000000000 +0200
+++ new/opi-5.8.7/opi/__init__.py       2025-09-04 11:23:35.000000000 +0200
@@ -305,9 +305,12 @@
        if priority:
                tf.file.write(f'priority={priority}\n')
        tf.file.flush()
-       subprocess.call(['sudo', 'cp', tf.name, os.path.join(REPO_DIR, 
f'{filename}.repo')])
-       subprocess.call(['sudo', 'chmod', '644', os.path.join(REPO_DIR, 
f'{filename}.repo')])
+       repo_file = os.path.join(REPO_DIR, f'{filename}.repo')
+       subprocess.call(['sudo', 'cp', tf.name, repo_file])
+       subprocess.call(['sudo', 'chmod', '644', repo_file])
        tf.file.close()
+       if global_state.arg_verbose_mode:
+               print(f"Wrote 
{repo_file}:\n{'-'*8}\n{open(repo_file).read()}{'-'*8}")
        refresh_repos(auto_import_keys=auto_import_keys)
 
 def refresh_repos(repo_alias=None, auto_import_keys=False):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/opi/deb.py new/opi-5.8.7/opi/deb.py
--- old/opi-5.8.5/opi/deb.py    1970-01-01 01:00:00.000000000 +0100
+++ new/opi-5.8.7/opi/deb.py    2025-09-04 11:23:35.000000000 +0200
@@ -0,0 +1,14 @@
+import os
+import subprocess
+from shutil import which
+from opi import install_packages
+
+def extract_deb(deb, target_dir):
+       if not which('bsdtar'):
+               print("Installing requirement: bsdtar")
+               install_packages(['bsdtar'], no_recommends=True, 
non_interactive=True)
+       os.makedirs(target_dir, exist_ok=True)
+       subprocess.check_call(['bsdtar', 'xf', deb, '--directory', target_dir])
+       data_tar = os.path.join(target_dir, 'data.tar.xz')
+       subprocess.check_call(['bsdtar', 'xf', data_tar, '--directory', 
target_dir])
+       os.unlink(data_tar)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/opi/plugins/localsend.py 
new/opi-5.8.7/opi/plugins/localsend.py
--- old/opi-5.8.5/opi/plugins/localsend.py      1970-01-01 01:00:00.000000000 
+0100
+++ new/opi-5.8.7/opi/plugins/localsend.py      2025-09-04 11:23:35.000000000 
+0200
@@ -0,0 +1,59 @@
+import os
+import opi
+from opi.plugins import BasePlugin
+from opi.state import global_state
+from opi import github
+from opi import http
+from opi import rpmbuild
+from opi import deb
+
+class LocalSend(BasePlugin):
+       main_query = 'localsend'
+       description = 'Share files to nearby devices'
+       queries = [main_query]
+
+       @classmethod
+       def run(cls, query):
+               latest_release = github.get_latest_release('localsend', 
'localsend')
+               if not latest_release:
+                       print(f'No release found for LocalSend')
+                       return
+
+               match_filename_suffix = 
f'{opi.get_cpu_arch().replace("aarch64", "arm-64").replace("_", "-")}.deb'
+               asset = github.get_release_asset(latest_release, 
filters=[lambda a: a['name'].endswith(match_filename_suffix)])
+               if not asset:
+                       print(f"No DEB asset found for LocalSend release 
{latest_release['tag_name']}")
+                       return
+               if global_state.arg_verbose_mode:
+                       print(f"Found: {asset['url']}")
+               if not opi.ask_yes_or_no(f"Do you want to install LocalSend DEB 
release {latest_release['tag_name']} converted to RPM from LocalSend github 
repo?"):
+                       return
+
+               binary_path = 'usr/bin/localsend'
+               data_path = 'usr/share/localsend_app'
+
+               rpm = rpmbuild.RPMBuild('localsend', 
latest_release['tag_name'], cls.description, opi.get_cpu_arch(), 
+                       files = [
+                               f"/{binary_path}",
+                               f"/{data_path}"
+                       ]
+               )
+
+               deb_path = os.path.join(rpm.tmpdir.name, 'localsend.deb')
+               deb_path_extracted = os.path.join(rpm.tmpdir.name, 'localsend')
+               http.download_file(asset['url'], deb_path)
+               deb.extract_deb(deb_path, deb_path_extracted)
+
+               os.makedirs(os.path.join(rpm.buildroot, 
os.path.dirname(binary_path)), exist_ok=True)
+               os.symlink("../share/localsend_app/localsend_app", 
os.path.join(rpm.buildroot, binary_path))
+
+               rpmbuild.copy(os.path.join(deb_path_extracted, data_path), 
os.path.join(rpm.buildroot, data_path))
+
+               rpm.add_desktop_file(cmd="localsend %U", 
icon="/usr/share/localsend_app/data/flutter_assets/assets/img/logo-256.png",
+                                    Categories="GTK;FileTransfer;Utility;",
+                                    Keywords="Sharing;LAN;Files;",
+                                    StartupNotify="true"
+               )
+
+               rpm.build()
+               opi.install_packages([rpm.rpmfile_path], allow_unsigned=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/opi/plugins/ocenaudio.py 
new/opi-5.8.7/opi/plugins/ocenaudio.py
--- old/opi-5.8.5/opi/plugins/ocenaudio.py      2025-06-02 12:16:53.000000000 
+0200
+++ new/opi-5.8.7/opi/plugins/ocenaudio.py      2025-09-04 11:23:35.000000000 
+0200
@@ -11,4 +11,4 @@
                if not opi.ask_yes_or_no('Do you want to install ocenaudio from 
ocenaudio.com?'):
                        return
 
-               
opi.install_packages(['https://www.ocenaudio.com/downloads/index.php/ocenaudio_opensuse.rpm'],
 allow_unsigned=True) # rpm is unsigned
+               
opi.install_packages(['https://www.ocenaudio.com/downloads/index.php/ocenaudio_opensuse15.rpm'],
 allow_unsigned=True) # rpm is unsigned
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/opi/version.py new/opi-5.8.7/opi/version.py
--- old/opi-5.8.5/opi/version.py        2025-06-02 12:16:53.000000000 +0200
+++ new/opi-5.8.7/opi/version.py        2025-09-04 11:23:35.000000000 +0200
@@ -1 +1 @@
-__version__ = '5.8.5'
+__version__ = '5.8.7'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/opi.changes new/opi-5.8.7/opi.changes
--- old/opi-5.8.5/opi.changes   2025-06-02 12:16:53.000000000 +0200
+++ new/opi-5.8.7/opi.changes   2025-09-04 11:23:35.000000000 +0200
@@ -1,4 +1,15 @@
 -------------------------------------------------------------------
+Thu Sep  4 09:23:19 UTC 2025 - Dominik Heidler <[email protected]>
+
+- Version 5.8.7
+  * Fix ocenaudio url
+  * Add LocalSend plugin
+  * Run all tests in verbose mode
+  * Print written repo files in verbose mode
+  * Increase timeouts in test/06_install_non_interactive.py
+  * Remove DNF references from README.md
+
+-------------------------------------------------------------------
 Mon Jun  2 10:16:26 UTC 2025 - Dominik Heidler <[email protected]>
 
 - Version 5.8.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/test/01_install_from_packman.py 
new/opi-5.8.7/test/01_install_from_packman.py
--- old/opi-5.8.5/test/01_install_from_packman.py       2025-06-02 
12:16:53.000000000 +0200
+++ new/opi-5.8.7/test/01_install_from_packman.py       2025-09-04 
11:23:35.000000000 +0200
@@ -5,7 +5,7 @@
 import subprocess
 import time
 
-c = pexpect.spawn('./bin/opi x265', logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v x265', logfile=sys.stdout.buffer, echo=False)
 
 c.expect('1. x265\r\n')
 c.sendline('q')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/test/02_install_from_home.py 
new/opi-5.8.7/test/02_install_from_home.py
--- old/opi-5.8.5/test/02_install_from_home.py  2025-06-02 12:16:53.000000000 
+0200
+++ new/opi-5.8.7/test/02_install_from_home.py  2025-09-04 11:23:35.000000000 
+0200
@@ -4,7 +4,7 @@
 import pexpect
 import subprocess
 
-c = pexpect.spawn('./bin/opi rtl8812au', logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v rtl8812au', logfile=sys.stdout.buffer, 
echo=False)
 
 c.expect('1. rtl8812au\r\n')
 c.sendline('q')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/test/03_install_using_plugin.py 
new/opi-5.8.7/test/03_install_using_plugin.py
--- old/opi-5.8.5/test/03_install_using_plugin.py       2025-06-02 
12:16:53.000000000 +0200
+++ new/opi-5.8.7/test/03_install_using_plugin.py       2025-09-04 
11:23:35.000000000 +0200
@@ -4,7 +4,7 @@
 import pexpect
 import subprocess
 
-c = pexpect.spawn('./bin/opi resilio-sync', logfile=sys.stdout.buffer, 
echo=False)
+c = pexpect.spawn('./bin/opi -v resilio-sync', logfile=sys.stdout.buffer, 
echo=False)
 
 c.expect('Do you want to install')
 c.sendline('y')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/test/05_install_from_local_repo.py 
new/opi-5.8.7/test/05_install_from_local_repo.py
--- old/opi-5.8.5/test/05_install_from_local_repo.py    2025-06-02 
12:16:53.000000000 +0200
+++ new/opi-5.8.7/test/05_install_from_local_repo.py    2025-09-04 
11:23:35.000000000 +0200
@@ -3,7 +3,7 @@
 import sys
 import pexpect
 
-c = pexpect.spawn('./bin/opi htop', logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v htop', logfile=sys.stdout.buffer, echo=False)
 
 c.expect(r'([0-9]+)\. htop', timeout=10)
 entry_id = c.match.groups()[0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/test/06_install_non_interactive.py 
new/opi-5.8.7/test/06_install_non_interactive.py
--- old/opi-5.8.5/test/06_install_non_interactive.py    2025-06-02 
12:16:53.000000000 +0200
+++ new/opi-5.8.7/test/06_install_non_interactive.py    2025-09-04 
11:23:35.000000000 +0200
@@ -4,12 +4,12 @@
 import pexpect
 import subprocess
 
-c = pexpect.spawn('./bin/opi -n bottom', logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v -n bottom', logfile=sys.stdout.buffer, 
echo=False)
 
-c.expect(r'([0-9]+)\. bottom', timeout=10)
+c.expect(r'([0-9]+)\. bottom', timeout=20)
 c.expect('Pick a number')
-c.expect(r'([0-9]+)\. [^ ]*(openSUSE-Tumbleweed-Oss|Main Repository)', 
timeout=10)
-c.expect('Installing from existing repo', timeout=10)
+c.expect(r'([0-9]+)\. [^ ]*(openSUSE-Tumbleweed-Oss|Main Repository)', 
timeout=20)
+c.expect('Installing from existing repo', timeout=20)
 c.expect('Continue?', timeout=60)
 c.interact()
 c.wait()
@@ -19,12 +19,12 @@
 subprocess.check_call(['rpm', '-qi', 'bottom'])
 
 
-c = pexpect.spawn('./bin/opi -n helloworld-opi-tests', 
logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v -n helloworld-opi-tests', 
logfile=sys.stdout.buffer, echo=False)
 
-c.expect(r'([0-9]+)\. helloworld-opi-tests', timeout=10)
+c.expect(r'([0-9]+)\. helloworld-opi-tests', timeout=20)
 c.expect('Pick a number')
-c.expect(r'([0-9]+)\. [^ ]*(home:dheidler:opitests)', timeout=10)
-c.expect('Adding repo \'home:dheidler:opitests\'', timeout=10)
+c.expect(r'([0-9]+)\. [^ ]*(home:dheidler:opitests)', timeout=20)
+c.expect('Adding repo \'home:dheidler:opitests\'', timeout=20)
 c.expect('Continue?', timeout=60)
 c.interact()
 c.wait()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opi-5.8.5/test/07_install_multiple.py 
new/opi-5.8.7/test/07_install_multiple.py
--- old/opi-5.8.5/test/07_install_multiple.py   2025-06-02 12:16:53.000000000 
+0200
+++ new/opi-5.8.7/test/07_install_multiple.py   2025-09-04 11:23:35.000000000 
+0200
@@ -4,7 +4,7 @@
 import pexpect
 import subprocess
 
-c = pexpect.spawn('./bin/opi -nm helloworld-opi-tests resilio-sync tmux', 
logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v -nm helloworld-opi-tests resilio-sync tmux', 
logfile=sys.stdout.buffer, echo=False)
 
 # plugins are installed first
 c.expect('Do you want to install')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opi-5.8.5/test/08_install_from_packman_non_interactive.py 
new/opi-5.8.7/test/08_install_from_packman_non_interactive.py
--- old/opi-5.8.5/test/08_install_from_packman_non_interactive.py       
2025-06-02 12:16:53.000000000 +0200
+++ new/opi-5.8.7/test/08_install_from_packman_non_interactive.py       
2025-09-04 11:23:35.000000000 +0200
@@ -4,7 +4,7 @@
 import pexpect
 import subprocess
 
-c = pexpect.spawn('./bin/opi -n x265', logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v -n x265', logfile=sys.stdout.buffer, 
echo=False)
 
 c.expect('1. x265\r\n')
 c.expect('Pick a number')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opi-5.8.5/test/09_install_with_multi_repos_in_single_file_non_interactive.py
 
new/opi-5.8.7/test/09_install_with_multi_repos_in_single_file_non_interactive.py
--- 
old/opi-5.8.5/test/09_install_with_multi_repos_in_single_file_non_interactive.py
    2025-06-02 12:16:53.000000000 +0200
+++ 
new/opi-5.8.7/test/09_install_with_multi_repos_in_single_file_non_interactive.py
    2025-09-04 11:23:35.000000000 +0200
@@ -8,7 +8,7 @@
 subprocess.check_call("rm -v /etc/zypp/repos.d/*.repo", shell=True)
 subprocess.check_call("mv -v /tmp/singlefile.repo /etc/zypp/repos.d/", 
shell=True)
 
-c = pexpect.spawn('./bin/opi -n tmux', logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v -n tmux', logfile=sys.stdout.buffer, 
echo=False)
 
 c.expect(r'([0-9]+)\. tmux', timeout=10)
 c.expect('Pick a number')
@@ -23,7 +23,7 @@
 subprocess.check_call(['rpm', '-qi', 'tmux'])
 
 
-c = pexpect.spawn('./bin/opi -n helloworld-opi-tests', 
logfile=sys.stdout.buffer, echo=False)
+c = pexpect.spawn('./bin/opi -v -n helloworld-opi-tests', 
logfile=sys.stdout.buffer, echo=False)
 
 c.expect(r'([0-9]+)\. helloworld-opi-tests', timeout=10)
 c.expect('Pick a number')

Reply via email to