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')
