openSUSE Commits
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
April 2025
- 1 participants
- 1622 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package dxvk for openSUSE:Factory checked in at 2025-01-14 16:24:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dxvk (Old)
and /work/SRC/openSUSE:Factory/.dxvk.new.1881 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dxvk"
Tue Jan 14 16:24:30 2025 rev:14 rq:1237747 version:2.5.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/dxvk/dxvk.changes 2024-11-25 23:20:21.547819478 +0100
+++ /work/SRC/openSUSE:Factory/.dxvk.new.1881/dxvk.changes 2025-01-14 16:24:56.271704025 +0100
@@ -1,0 +2,29 @@
+Tue Jan 14 00:32:17 UTC 2025 - Simon Vogl <simon.vogl(a)gmx.net>
+
+- Update to 2.5.3:
+ * Fixed a regression that would cause severe rendering issues
+ in many D3D8 and D3D9 games that use fixed-function rendering
+ * Fixed invalid shader code generation for certain rare texture
+ operations in D3D11
+ * This fixes a potential crash in TopSpin 2k25
+ * Fixed a potential issue with handling NaN tessellation factors
+ in D3D11 hull shaders
+ * Fixed an issue with D3D9 shader validation that would cause
+ valid shader code to be rejected in some situations
+ * Improved the debugging experience when DXVK_DEBUG=markers is
+ set
+ * Arcana Heart 3 Love Max!!!!!: Enabled 60 FPS limit to work
+ around a game issue on Steam Deck OLED
+ * Bright Memory: Worked around an issue where the game would
+ prioritize integrated graphics over dedicated Intel GPUs
+ * Far Cry 5: Worked around an issue that would cause terrain to
+ be invisible on Intel GPUs
+ * Halo: The Master Chief Collection: Fixed a shader-related
+ issue that would cause flickering objects on some drivers
+ * Max Payne 3: Enabled strict float emulation to work around
+ broken rendering in D3D9 mode
+ * The Hurricane of the Varstray -Collateral hazard-: Enabled 60
+ FPS limit to work around game issues when running in windowed
+ mode
+
+-------------------------------------------------------------------
Old:
----
dxvk-2.5.1.tar.gz
New:
----
dxvk-2.5.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dxvk.spec ++++++
--- /var/tmp/diff_new_pack.whNoEG/_old 2025-01-14 16:24:56.811726558 +0100
+++ /var/tmp/diff_new_pack.whNoEG/_new 2025-01-14 16:24:56.811726558 +0100
@@ -1,7 +1,7 @@
#
# spec file for package dxvk
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: dxvk
-Version: 2.5.1
+Version: 2.5.3
Release: 0
Summary: Vulkan-based Direct3D 8/9/10/11 implementation for Linux / Wine
License: zlib-acknowledgement
++++++ dxvk-2.5.1.tar.gz -> dxvk-2.5.3.tar.gz ++++++
++++ 9042 lines of diff (skipped)
++++++ dxvk.obsinfo ++++++
--- /var/tmp/diff_new_pack.whNoEG/_old 2025-01-14 16:24:57.635760941 +0100
+++ /var/tmp/diff_new_pack.whNoEG/_new 2025-01-14 16:24:57.635760941 +0100
@@ -1,5 +1,5 @@
name: dxvk
-version: 2.5.1
-mtime: 1731929561
-commit: b276c60f4941e8623ae1692b5c832902ac678e1d
+version: 2.5.3
+mtime: 1736781620
+commit: c707d9026f33b6ab89639f154b6ac5f6326fa037
2
2
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package 000product for openSUSE:Factory checked in at 2025-04-30 22:26:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/000product (Old)
and /work/SRC/openSUSE:Factory/.000product.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "000product"
Wed Apr 30 22:26:02 2025 rev:4370 rq: version:unknown
Changes:
--------
New Changes file:
NO CHANGES FILE!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ MicroOS-dvd5-dvd-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:10.616953517 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:10.664955529 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__MicroOS___20250429" schemaversion="4.1">
+<image name="OBS__MicroOS___20250430" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20250429</productvar>
+ <productvar name="VERSION">20250430</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:microos:20250429,openSUSE MicroOS</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:microos:20250430,openSUSE MicroOS</productinfo>
<productinfo name="LINGUAS">en_US </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/MicroOS/20250429/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/MicroOS/20250430/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
@@ -1195,6 +1195,8 @@
<repopackage name="libpwquality-tools"/>
<repopackage name="libpwquality1"/>
<repopackage name="libpxbackend-1_0"/>
+ <repopackage name="libpython3_11-1_0"/>
+ <repopackage name="libpython3_12-1_0"/>
<repopackage name="libpython3_13-1_0"/>
<repopackage name="libqaccessibilityclient-qt6"/>
<repopackage name="libqaccessibilityclient-qt6-0"/>
@@ -1739,6 +1741,8 @@
<repopackage name="python3-audit"/>
<repopackage name="python3-cupshelpers"/>
<repopackage name="python3-firewall"/>
+ <repopackage name="python311-base"/>
+ <repopackage name="python312-base"/>
<repopackage name="python313"/>
<repopackage name="python313-alembic"/>
<repopackage name="python313-attrs"/>
++++++ openSUSE-Addon-NonOss-ftp-ftp-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:11.016970279 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:11.052971787 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE-Addon-NonOss___20250429" schemaversion="4.1">
+<image name="OBS__openSUSE-Addon-NonOss___20250430" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20250429</productvar>
+ <productvar name="VERSION">20250430</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse-addon-nonoss:20250429,openSUSE NonOSS Addon</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse-addon-nonoss:20250430,openSUSE NonOSS Addon</productinfo>
<productinfo name="LINGUAS">af ar be_BY bg br ca cy el et ga gl gu_IN he hi_IN hr ka km ko lt mk nn pa_IN rw sk sl sr_CS ss st tg th tr uk ve vi xh zu </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE-Addon-NonOss/2025…</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE-Addon-NonOss/2025…</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ openSUSE-cd-mini-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:11.276981175 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:11.324983186 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20250429" schemaversion="4.1">
+<image name="OBS__openSUSE___20250430" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20250429</productvar>
+ <productvar name="VERSION">20250430</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20250429,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20250430,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20250429/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20250430/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ openSUSE-dvd5-dvd-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:11.676997936 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:11.724999948 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20250429" schemaversion="4.1">
+<image name="OBS__openSUSE___20250430" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20250429</productvar>
+ <productvar name="VERSION">20250430</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20250429,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20250430,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20250429/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20250430/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
@@ -2427,6 +2427,8 @@
<repopackage name="libpxbackend-1_0"/>
<repopackage name="libpython3_11-1_0"/>
<repopackage name="libpython3_11-1_0-x86-64-v3"/>
+ <repopackage name="libpython3_12-1_0"/>
+ <repopackage name="libpython3_12-1_0-x86-64-v3"/>
<repopackage name="libpython3_13-1_0"/>
<repopackage name="libpython3_13-1_0-x86-64-v3"/>
<repopackage name="libqaccessibilityclient-qt6"/>
@@ -3708,6 +3710,16 @@
<repopackage name="python311-zope.interface"/>
<repopackage name="python311-zstandard"/>
<repopackage name="python311-zypp-plugin"/>
+ <repopackage name="python312"/>
+ <repopackage name="python312-base"/>
+ <repopackage name="python312-base-x86-64-v3"/>
+ <repopackage name="python312-curses"/>
+ <repopackage name="python312-dbm"/>
+ <repopackage name="python312-gobject"/>
+ <repopackage name="python312-gobject-cairo"/>
+ <repopackage name="python312-pip"/>
+ <repopackage name="python312-pycairo"/>
+ <repopackage name="python312-x86-64-v3"/>
<repopackage name="python313"/>
<repopackage name="python313-argcomplete"/>
<repopackage name="python313-argparse-manpage"/>
++++++ openSUSE-ftp-ftp-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:11.993011179 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:12.017012184 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20250429" schemaversion="4.1">
+<image name="OBS__openSUSE___20250430" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -23,7 +23,7 @@
<productvar name="DISTNAME">openSUSE</productvar>
<productvar name="FLAVOR">ftp</productvar>
<productvar name="MAKE_LISTINGS">true</productvar>
- <productvar name="MEDIUM_NAME">openSUSE-20250429-x86_64</productvar>
+ <productvar name="MEDIUM_NAME">openSUSE-20250430-x86_64</productvar>
<productvar name="MULTIPLE_MEDIA">true</productvar>
<productvar name="PRODUCT_DIR">/</productvar>
<productvar name="PRODUCT_NAME">$DISTNAME-$FLAVOR</productvar>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20250429</productvar>
+ <productvar name="VERSION">20250430</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20250429,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20250430,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20250429/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20250430/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="DEBUGMEDIUM">2</productoption>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ Aeon.product ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:12.589036154 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:12.633037998 +0200
@@ -6,7 +6,7 @@
<name>Aeon</name>
<releasepkgname>Aeon-release</releasepkgname>
<endoflife/>
- <version>20250429</version>
+ <version>20250430</version>
<!-- release is no longer optional -->
<release>0</release>
<productline>Aeon</productline>
++++++ Kalpa.product ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:12.773043865 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:12.797044871 +0200
@@ -6,7 +6,7 @@
<name>Kalpa</name>
<releasepkgname>Kalpa-release</releasepkgname>
<endoflife/>
- <version>20250429</version>
+ <version>20250430</version>
<!-- release is no longer optional -->
<release>0</release>
<productline>Kalpa</productline>
++++++ MicroOS.product ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:13.033054760 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:13.081056771 +0200
@@ -6,7 +6,7 @@
<name>MicroOS</name>
<releasepkgname>MicroOS-release</releasepkgname>
<endoflife/>
- <version>20250429</version>
+ <version>20250430</version>
<!-- release is no longer optional -->
<release>0</release>
<productline>MicroOS</productline>
++++++ dvd.group ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:13.825087949 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:13.853089123 +0200
@@ -2570,8 +2570,10 @@
<package name="libpwquality1" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
<package name="libpwquality1-32bit" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_cd_core -->
<package name="libpxbackend-1_0" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
- <package name="libpython3_11-1_0" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="libpython3_11-1_0-x86-64-v3" supportstatus="unsupported"/> <!-- reason: common_locks:expansion -->
+ <package name="libpython3_11-1_0" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="libpython3_11-1_0-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
+ <package name="libpython3_12-1_0" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="libpython3_12-1_0-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
<package name="libpython3_13-1_0" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
<package name="libpython3_13-1_0-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
<package name="libqaccessibilityclient-qt6" supportstatus="unsupported"/> <!-- reason: dvd:patterns-kde-kde -->
@@ -3571,7 +3573,7 @@
<package name="python3-talloc-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
<package name="python3-tdb" supportstatus="unsupported"/> <!-- reason: dvd:patterns-kde-kde -->
<package name="python3-tevent" supportstatus="unsupported"/> <!-- reason: dvd:patterns-kde-kde -->
- <package name="python311" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
+ <package name="python311" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
<package name="python311-Automat" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-Babel" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-Brotli" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
@@ -3589,8 +3591,8 @@
<package name="python311-argon2-cffi-bindings" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-attrs" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-backports.entry_points_selectable" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-base" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-base-x86-64-v3" supportstatus="unsupported"/> <!-- reason: common_locks:expansion -->
+ <package name="python311-base" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python311-base-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
<package name="python311-bcrypt" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-certifi" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-cffi" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
@@ -3599,13 +3601,13 @@
<package name="python311-constantly" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-contextvars" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-cryptography" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-curses" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-dbm" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
+ <package name="python311-curses" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python311-dbm" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
<package name="python311-distro" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-dnspython" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-gevent" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-gobject" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-gobject-cairo" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
+ <package name="python311-gobject" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python311-gobject-cairo" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
<package name="python311-greenlet" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-h11" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-h2" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
@@ -3627,14 +3629,14 @@
<package name="python311-packaging" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-passlib" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-pexpect" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-pip" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
+ <package name="python311-pip" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
<package name="python311-ply" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-psutil" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-ptyprocess" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-pyOpenSSL" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-pyasn1" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-pyasn1-modules" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-pycairo" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
+ <package name="python311-pycairo" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
<package name="python311-pycares" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-pycparser" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-pycurl" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
@@ -3654,11 +3656,21 @@
<package name="python311-typing_extensions" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-tzdata" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-urllib3" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
- <package name="python311-x86-64-v3" supportstatus="unsupported"/> <!-- reason: common_locks:expansion -->
+ <package name="python311-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
<package name="python311-zope.event" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-zope.interface" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-zstandard" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
<package name="python311-zypp-plugin" supportstatus="unsupported"/> <!-- reason: dvd:salt-master -->
+ <package name="python312" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-base" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-base-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
+ <package name="python312-curses" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-dbm" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-gobject" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-gobject-cairo" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-pip" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-pycairo" supportstatus="unsupported"/> <!-- reason: dvd:patterns-server-directory_server -->
+ <package name="python312-x86-64-v3" supportstatus="unsupported"/> <!-- reason: dvd:patterns-media-rest_dvd -->
<package name="python313" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
<package name="python313-Brotli" supportstatus="unsupported"/> <!-- reason: dvd:patterns-gnome-gnome -->
<package name="python313-Pillow" supportstatus="unsupported"/> <!-- reason: dvd:inkscape -->
++++++ openSUSE-Addon-NonOss.product ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:14.025096330 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:14.049097336 +0200
@@ -4,7 +4,7 @@
<product>
<vendor>openSUSE</vendor>
<name>openSUSE-Addon-NonOss</name>
- <version>20250429</version>
+ <version>20250430</version>
<release>0</release>
<summary>openSUSE NonOSS Addon</summary>
<shortsummary>non oss addon</shortsummary>
++++++ openSUSE.product ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:14.253105884 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:14.269106555 +0200
@@ -4,7 +4,7 @@
<product>
<vendor>openSUSE</vendor>
<name>openSUSE</name>
- <version>20250429</version>
+ <version>20250430</version>
<release>0</release>
<productline>openSUSE</productline>
++++++ opensuse_kalpa.group ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:14.433113427 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:14.461114601 +0200
@@ -983,6 +983,8 @@
<package name="libpulse0" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="libpwquality1" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="libpxbackend-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
+ <package name="libpython3_11-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
+ <package name="libpython3_12-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="libpython3_13-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="libqaccessibilityclient-qt6" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="libqaccessibilityclient-qt6-0" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
@@ -1271,6 +1273,8 @@
<package name="pulseaudio-utils" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="python3-audit" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="python3-cupshelpers" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
+ <package name="python311-base" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
+ <package name="python312-base" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="python313" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="python313-base" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
<package name="python313-certifi" supportstatus="unsupported"/> <!-- reason: opensuse_kalpa:patterns-kalpa-base -->
++++++ opensuse_microos.group ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:14.669123317 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:14.745126501 +0200
@@ -1081,7 +1081,7 @@
<package name="libgweather-4-0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="libgxps2" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="libhandy-1-0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
- <package name="libharfbuzz-gobject0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="libharfbuzz-gobject0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="libharfbuzz-icu0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="libharfbuzz-subset0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="libharfbuzz0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
@@ -1301,6 +1301,8 @@
<package name="libpwquality-tools" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-alt_onlyDVD -->
<package name="libpwquality1" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="libpxbackend-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-cloud -->
+ <package name="libpython3_11-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="libpython3_12-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="libpython3_13-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-base-packagekit -->
<package name="libqaccessibilityclient-qt6" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="libqaccessibilityclient-qt6-0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
@@ -1686,6 +1688,8 @@
<package name="python3-audit" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="python3-cupshelpers" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="python3-firewall" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="python311-base" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="python312-base" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="python313" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-cloud -->
<package name="python313-Jinja2" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-cloud -->
<package name="python313-Mako" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-alt_onlyDVD -->
@@ -1706,8 +1710,8 @@
<package name="python313-dbus-python" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="python313-decorator" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="python313-gobject" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
- <package name="python313-gobject-Gdk" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
- <package name="python313-gobject-cairo" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="python313-gobject-Gdk" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
+ <package name="python313-gobject-cairo" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="python313-gpg" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-alt_onlyDVD -->
<package name="python313-greenlet" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-alt_onlyDVD -->
<package name="python313-idna" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-cloud -->
@@ -1725,7 +1729,7 @@
<package name="python313-passlib" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-cloud -->
<package name="python313-policycoreutils" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
<package name="python313-psutil" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-alt_onlyDVD -->
- <package name="python313-pycairo" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="python313-pycairo" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="python313-pycparser" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-cloud -->
<package name="python313-pycups" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="python313-pycurl" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
@@ -1879,7 +1883,7 @@
<package name="tukitd" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:expansion -->
<package name="typelib-1_0-AccountsService-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Adw-1" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
- <package name="typelib-1_0-Atk-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="typelib-1_0-Atk-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-Atspi-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Fwupd-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-GLib-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
@@ -1890,7 +1894,7 @@
<package name="typelib-1_0-GWeather-4_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Gck-2" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Gcr-4" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
- <package name="typelib-1_0-GdkPixbuf-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="typelib-1_0-GdkPixbuf-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-Gdm-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Geoclue-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Gio-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
@@ -1900,10 +1904,10 @@
<package name="typelib-1_0-GnomeDesktop-4_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Graphene-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Gst-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
- <package name="typelib-1_0-Gtk-3_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="typelib-1_0-Gtk-3_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-Gtk-4_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Handy-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
- <package name="typelib-1_0-HarfBuzz-0_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="typelib-1_0-HarfBuzz-0_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-IBus-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Json-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-Malcontent-0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
@@ -1911,7 +1915,7 @@
<package name="typelib-1_0-NMA4-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Notify-0_7" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-PackageKitGlib-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
- <package name="typelib-1_0-Pango-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-onlyDVD -->
+ <package name="typelib-1_0-Pango-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-Polkit-1_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="typelib-1_0-Rsvg-2_0" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="typelib-1_0-Secret-1" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
++++++ unsorted.yml ++++++
--- /var/tmp/diff_new_pack.p62PSh/_old 2025-04-30 22:26:14.897132871 +0200
+++ /var/tmp/diff_new_pack.p62PSh/_new 2025-04-30 22:26:14.901133039 +0200
@@ -9386,6 +9386,13 @@
- java-23-openjdk-javadoc
- java-23-openjdk-jmods
- java-23-openjdk-src
+ - java-24-openjdk
+ - java-24-openjdk-demo
+ - java-24-openjdk-devel
+ - java-24-openjdk-headless
+ - java-24-openjdk-javadoc
+ - java-24-openjdk-jmods
+ - java-24-openjdk-src
- java-atk-wrapper
- java-cup
- java-cup-bootstrap
@@ -10603,6 +10610,10 @@
- kube-linter-fish-completion
- kube-linter-zsh-completion
- kube-no-trouble
+ - kube-review
+ - kube-review-bash-completion
+ - kube-review-fish-completion
+ - kube-review-zsh-completion
- kubearmor-client
- kubearmor-client-bash-completion
- kubearmor-client-fish-completion
@@ -12856,6 +12867,8 @@
- libdnf5-cli2
- libdnf5-devel
- libdnf5-plugin-actions
+ - libdnf5-plugin-appstream
+ - libdnf5-plugin-expired-pgp-keys
- libdnf5_2
- libdnnl3
- libdns_sd
@@ -15438,9 +15451,7 @@
- libpython3_10-1_0
- libpython3_10-1_0-32bit
- libpython3_11-1_0-32bit
- - libpython3_12-1_0
- libpython3_12-1_0-32bit
- - libpython3_12-1_0-x86-64-v3
- libpython3_13-1_0-32bit
- libpython3_13t-1_0
- libpython3_14-1_0
@@ -24321,6 +24332,7 @@
- python311-azure-eventhub-checkpointstoreblob
- python311-azure-eventhub-checkpointstoreblob-aio
- python311-azure-graphrbac
+ - python311-azure-health-deidentification
- python311-azure-healthinsights-cancerprofiling
- python311-azure-healthinsights-clinicalmatching
- python311-azure-healthinsights-radiologyinsights
@@ -25072,6 +25084,7 @@
- python311-dragonmapper
- python311-drf-spectacular
- python311-drf-spectacular-sidecar
+ - python311-drf-standardized-errors
- python311-drgn
- python311-drms
- python311-dropbox
@@ -25290,6 +25303,7 @@
- python311-git-url-parse
- python311-gitdb
- python311-github3.py
+ - python311-gitlabcis
- python311-glean
- python311-glean-parser
- python311-glfw
@@ -26036,6 +26050,7 @@
- python311-opentelemetry-instrumentation-asgi
- python311-opentelemetry-instrumentation-fastapi
- python311-opentelemetry-proto
+ - python311-opentelemetry-resourcedetector-gcp
- python311-opentelemetry-sdk
- python311-opentelemetry-semantic-conventions
- python311-opentelemetry-test-utils
@@ -27491,7 +27506,6 @@
- python311-zstd
- python311-zxcvbn
- python311-zxcvbn-rs-py
- - python312
- python312-32bit
- python312-APScheduler
- python312-AnyQt
@@ -28004,6 +28018,7 @@
- python312-azure-eventhub-checkpointstoreblob
- python312-azure-eventhub-checkpointstoreblob-aio
- python312-azure-graphrbac
+ - python312-azure-health-deidentification
- python312-azure-healthinsights-cancerprofiling
- python312-azure-healthinsights-clinicalmatching
- python312-azure-healthinsights-radiologyinsights
@@ -28307,9 +28322,7 @@
- python312-backports.tarfile
- python312-backrefs
- python312-baron
- - python312-base
- python312-base-32bit
- - python312-base-x86-64-v3
- python312-base58
- python312-bashate
- python312-bcrypt
@@ -28551,7 +28564,6 @@
- python312-ctranslate2
- python312-ctypesgen
- python312-curlylint
- - python312-curses
- python312-curtsies
- python312-cwcwidth
- python312-cx_Freeze
@@ -28586,7 +28598,6 @@
- python312-datrie
- python312-dbf
- python312-dbfread
- - python312-dbm
- python312-dbus-deviation
- python312-dbus-python
- python312-dbus-python-devel
@@ -28769,6 +28780,7 @@
- python312-dragonmapper
- python312-drf-spectacular
- python312-drf-spectacular-sidecar
+ - python312-drf-standardized-errors
- python312-drgn
- python312-drms
- python312-dropbox
@@ -28988,6 +29000,7 @@
- python312-git-url-parse
- python312-gitdb
- python312-github3.py
+ - python312-gitlabcis
- python312-glean
- python312-glean-parser
- python312-glfw
@@ -28995,9 +29008,7 @@
- python312-glucat
- python312-gmpy2
- python312-gns3fy
- - python312-gobject
- python312-gobject-Gdk
- - python312-gobject-cairo
- python312-gobject-devel
- python312-google-ai-generativelanguage
- python312-google-api-core
@@ -29755,6 +29766,7 @@
- python312-opentelemetry-instrumentation-asgi
- python312-opentelemetry-instrumentation-fastapi
- python312-opentelemetry-proto
+ - python312-opentelemetry-resourcedetector-gcp
- python312-opentelemetry-sdk
- python312-opentelemetry-semantic-conventions
- python312-opentelemetry-test-utils
@@ -29886,7 +29898,6 @@
- python312-pilkit
- python312-pillow-heif
- python312-pingparsing
- - python312-pip
- python312-pip-api
- python312-pip-licenses
- python312-pip-requirements-parser
@@ -30042,7 +30053,6 @@
- python312-pybluez
- python312-pybtex
- python312-pybugz
- - python312-pycairo
- python312-pycairo-devel
- python312-pycapnp
- python312-pycares
@@ -31145,7 +31155,6 @@
- python312-wurlitzer
- python312-wxPython
- python312-wyoming
- - python312-x86-64-v3
- python312-xapian
- python312-xapian-haystack
- python312-xapp
@@ -31741,6 +31750,7 @@
- python313-azure-eventhub-checkpointstoreblob
- python313-azure-eventhub-checkpointstoreblob-aio
- python313-azure-graphrbac
+ - python313-azure-health-deidentification
- python313-azure-healthinsights-cancerprofiling
- python313-azure-healthinsights-clinicalmatching
- python313-azure-healthinsights-radiologyinsights
@@ -32489,6 +32499,7 @@
- python313-dragonmapper
- python313-drf-spectacular
- python313-drf-spectacular-sidecar
+ - python313-drf-standardized-errors
- python313-drgn
- python313-drms
- python313-dropbox
@@ -32707,6 +32718,7 @@
- python313-git-url-parse
- python313-gitdb
- python313-github3.py
+ - python313-gitlabcis
- python313-gitlint
- python313-glean
- python313-glean-parser
@@ -33453,6 +33465,7 @@
- python313-opentelemetry-instrumentation-asgi
- python313-opentelemetry-instrumentation-fastapi
- python313-opentelemetry-proto
+ - python313-opentelemetry-resourcedetector-gcp
- python313-opentelemetry-sdk
- python313-opentelemetry-semantic-conventions
- python313-opentelemetry-test-utils
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libspnav for openSUSE:Factory checked in at 2025-04-30 19:05:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libspnav (Old)
and /work/SRC/openSUSE:Factory/.libspnav.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libspnav"
Wed Apr 30 19:05:59 2025 rev:13 rq:1273703 version:1.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libspnav/libspnav.changes 2022-12-26 23:28:14.968998616 +0100
+++ /work/SRC/openSUSE:Factory/.libspnav.new.30101/libspnav.changes 2025-04-30 19:06:06.694651715 +0200
@@ -1,0 +2,13 @@
+Wed Apr 30 14:50:36 UTC 2025 - Christophe Marin <christophe(a)krop.fr>
+
+- Update to 1.2
+ * add missing requests and API entry points for cfg set/get
+ repeat interval
+ * fixed spnav_sensitivity (proto1) sending garbage
+ * fixed omission of linking with libm, while using math
+ functions in util
+ * fixed graphical glitches in the fly example on non-nvidia GPUs
+ * compatibility improvements for IRIX and Solaris
+ * fixed various minor build issues
+
+-------------------------------------------------------------------
Old:
----
libspnav-1.1.tar.gz
New:
----
libspnav-1.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libspnav.spec ++++++
--- /var/tmp/diff_new_pack.U9FEUo/_old 2025-04-30 19:06:07.142670397 +0200
+++ /var/tmp/diff_new_pack.U9FEUo/_new 2025-04-30 19:06:07.142670397 +0200
@@ -18,11 +18,10 @@
Name: libspnav
-Version: 1.1
+Version: 1.2
Release: 0
Summary: Library for accessing 3D connexion devices
License: BSD-3-Clause
-Group: Hardware/Other
URL: https://sourceforge.net/projects/spacenav/
Source0: https://github.com/FreeSpacenav/%{name}/releases/download/v%{version}/%{nam…
BuildRequires: pkgconfig
@@ -44,7 +43,6 @@
%package -n libspnav0
Summary: Library for accessing 3D connexion devices
-Group: Hardware/Other
Suggests: spacenavd
%description -n libspnav0
@@ -63,7 +61,6 @@
%package devel
Summary: Include files for libspnav
-Group: Development/Libraries/C and C++
Requires: libspnav0 = %{version}-%{release}
%description devel
@@ -100,8 +97,7 @@
mkdir -p %{buildroot}%{_libdir}/pkgconfig
mv %{buildroot}%{_datadir}/pkgconfig/spnav.pc %{buildroot}%{_libdir}/pkgconfig/
-%post -n libspnav0 -p /sbin/ldconfig
-%postun -n libspnav0 -p /sbin/ldconfig
+%ldconfig_scriptlets -n libspnav0
%files -n libspnav0
%license LICENSE
++++++ libspnav-1.1.tar.gz -> libspnav-1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/.github/workflows/build_freebsd.yml new/libspnav-1.2/.github/workflows/build_freebsd.yml
--- old/libspnav-1.1/.github/workflows/build_freebsd.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/libspnav-1.2/.github/workflows/build_freebsd.yml 2025-03-30 04:42:13.000000000 +0200
@@ -0,0 +1,38 @@
+name: FreeBSD build
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: ubuntu-22.04
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: FreeBSD build
+ uses: vmactions/freebsd-vm@v1
+ with:
+ prepare: |
+ pkg install -y gmake libX11 mesa-libs libglvnd libGLU
+
+ run: |
+ ./configure
+ gmake
+ gmake DESTDIR=libspnav-freebsd install
+ gmake examples
+ mkdir libspnav-freebsd/examples
+ cp examples/simple/simple_af_unix libspnav-freebsd/examples
+ cp examples/simple/simple_x11 libspnav-freebsd/examples
+ cp examples/cube/cube libspnav-freebsd/examples
+ cp examples/fly/fly libspnav-freebsd/examples
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libspnav-freebsd
+ path: libspnav-freebsd
+
+# vi:ts=2 sts=2 sw=2 expandtab:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/.github/workflows/build_gnulinux.yml new/libspnav-1.2/.github/workflows/build_gnulinux.yml
--- old/libspnav-1.1/.github/workflows/build_gnulinux.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/libspnav-1.2/.github/workflows/build_gnulinux.yml 2025-03-30 04:42:13.000000000 +0200
@@ -0,0 +1,80 @@
+name: GNU/Linux build
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: install dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install libx11-dev libgl1-mesa-dev libglu1-mesa-dev
+
+ - name: configure
+ run: ./configure
+
+ - name: build
+ run: make
+
+ - name: build examples
+ run: make examples
+
+ - name: stage install
+ run: |
+ DESTDIR=libspnav-gnulinux make install
+ mkdir libspnav-gnulinux/examples
+ cp examples/simple/simple_af_unix libspnav-gnulinux/examples
+ cp examples/simple/simple_x11 libspnav-gnulinux/examples
+ cp examples/cube/cube libspnav-gnulinux/examples
+ cp examples/fly/fly libspnav-gnulinux/examples
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libspnav-gnulinux
+ path: libspnav-gnulinux
+
+ build-nox11:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: install dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install libx11-dev libgl1-mesa-dev libglu1-mesa-dev
+
+ - name: configure
+ run: ./configure --disable-x11
+
+ - name: build
+ run: make
+
+ - name: build examples
+ run: |
+ make -C examples/simple simple_af_unix
+ make -C examples/fly
+
+ - name: stage install
+ run: |
+ DESTDIR=libspnav-gnulinux-nox11 make install
+ mkdir libspnav-gnulinux-nox11/examples
+ cp examples/simple/simple_af_unix libspnav-gnulinux-nox11/examples
+ cp examples/fly/fly libspnav-gnulinux-nox11/examples
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libspnav-gnulinux-nox11
+ path: libspnav-gnulinux-nox11
+
+
+# vi:ts=2 sts=2 sw=2 expandtab:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/.github/workflows/build_macosx.yml new/libspnav-1.2/.github/workflows/build_macosx.yml
--- old/libspnav-1.1/.github/workflows/build_macosx.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/libspnav-1.2/.github/workflows/build_macosx.yml 2025-03-30 04:42:13.000000000 +0200
@@ -0,0 +1,77 @@
+name: MacOS X build
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: macos-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: install dependencies
+ run: |
+ brew install libx11 mesa mesa-glu
+
+ - name: configure
+ run: ./configure
+
+ - name: build
+ run: make
+
+ - name: build examples
+ run: make examples
+
+ - name: stage install
+ run: |
+ DESTDIR=libspnav-macosx make install
+ mkdir libspnav-macosx/examples
+ cp examples/simple/simple_af_unix libspnav-macosx/examples
+ cp examples/simple/simple_x11 libspnav-macosx/examples
+ cp examples/cube/cube libspnav-macosx/examples
+ cp examples/fly/fly libspnav-macosx/examples
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libspnav-macosx
+ path: libspnav-macosx
+
+ build-nox11:
+
+ runs-on: macos-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: install dependencies
+ run: |
+ brew install libx11 mesa mesa-glu
+
+ - name: configure
+ run: ./configure --disable-x11
+
+ - name: build
+ run: make
+
+ - name: build examples
+ run: |
+ make -C examples/simple simple_af_unix
+ make -C examples/fly
+
+ - name: stage install
+ run: |
+ DESTDIR=libspnav-macosx-nox11 make install
+ mkdir libspnav-macosx-nox11/examples
+ cp examples/simple/simple_af_unix libspnav-macosx-nox11/examples
+ cp examples/fly/fly libspnav-macosx-nox11/examples
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libspnav-macosx-nox11
+ path: libspnav-macosx-nox11
+
+# vi:ts=2 sts=2 sw=2 expandtab:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/Makefile.in new/libspnav-1.2/Makefile.in
--- old/libspnav-1.1/Makefile.in 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/Makefile.in 2025-03-30 04:42:13.000000000 +0200
@@ -5,20 +5,20 @@
name = spnav
lib_a = lib$(name).a
-incpaths = -I. -I/usr/local/include -I/usr/X11R6/include
-libpaths = -L/usr/local/lib -L/usr/X11R6/lib
+incpaths = -I. -I/usr/local/include -I/usr/X11R6/include -I/opt/homebrew/include
+libpaths = -L/usr/local/lib -L/usr/X11R6/lib -L/opt/homebrew/lib
CC ?= gcc
AR ?= ar
CFLAGS = $(opt) $(dbg) -std=c89 $(pic) -pedantic -Wall -fno-strict-aliasing $(incpaths) $(user_cflags)
-LDFLAGS = $(libpaths) $(user_ldflags) $(xlib)
+LDFLAGS = $(libpaths) $(user_ldflags) $(xlib) -lm
ifeq ($(shell uname -s), Darwin)
lib_so = libspnav.dylib
shared = -dynamiclib
else
so_major = 0
- so_minor = 3
+ so_minor = 4
devlink = lib$(name).so
soname = $(devlink).$(so_major)
lib_so = $(soname).$(so_minor)
@@ -43,7 +43,7 @@
clean:
rm -f $(obj)
-.PHONY: cleandist
+.PHONY: distclean
distclean:
rm -f $(obj) $(lib_a) $(lib_so) Makefile
@@ -72,3 +72,8 @@
for i in $(hdr); do rm -f $(DESTDIR)$(PREFIX)/include/$$i; done
rm -f $(DESTDIR)$(PREFIX)/share/pkgconfig/spnav.pc
+.PHONY: examples
+examples:
+ $(MAKE) -C examples/simple
+ $(MAKE) -C examples/cube
+ $(MAKE) -C examples/fly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/README.md new/libspnav-1.2/README.md
--- old/libspnav-1.1/README.md 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/README.md 2025-03-30 04:42:13.000000000 +0200
@@ -1,6 +1,10 @@
libspnav
========
+
@@ -57,12 +61,21 @@
installing libspnav system-wide, which is the common case
(default prefix is: `/usr/local`).
-Running `./configure --help` prints available build options.
+Run `./configure --help` for a list of available build options.
+
+By default libspnav will be compiled with X11 support (and will require Xlib),
+which is necessary for compatibility with the proprietary driver. If you don't
+need that, and would rather drop the Xlib dependency, you can pass
+`--disable-x11` to `configure`, to build without X11 support.
+
+To build the example programs, change into their directory and run `make`. The
+"cube" and "fly" examples use OpenGL and Xlib, so make sure to have `libGL` and
+`libX11` installed, before attempting to build them.
License
-------
-Copyright (C) 2007-2022 John Tsiombikas <nuclear(a)member.fsf.org>
+Copyright (C) 2007-2025 John Tsiombikas <nuclear(a)member.fsf.org>
libspnav is free software. Feel free to use, modify, and/or redistibute it
under the terms of the 3-clause BSD license. See LICENSE for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/configure new/libspnav-1.2/configure
--- old/libspnav-1.1/configure 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/configure 2025-03-30 05:02:34.000000000 +0200
@@ -6,7 +6,7 @@
OPT=yes
DBG=yes
X11=yes
-VER=`git describe --tags 2>/dev/null`
+VER=1.2
if [ -z "$VER" ]; then
VER=`git rev-parse --short HEAD 2>/dev/null`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/examples/cube/Makefile new/libspnav-1.2/examples/cube/Makefile
--- old/libspnav-1.1/examples/cube/Makefile 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/examples/cube/Makefile 2025-03-30 04:42:13.000000000 +0200
@@ -1,9 +1,12 @@
obj = cube.o
bin = cube
-CC = gcc
-CFLAGS = -pedantic -Wall -g -I../.. -I../../src -I/usr/local/include
-LDFLAGS = -L../.. -L/usr/local/lib -lX11 -lGL -lGLU -lspnav -lm
+incdir = -I../.. -I../../src -I/usr/local/include -I/usr/X11R6/include \
+ -I/opt/homebrew/include
+libdir = -L../.. -L/usr/local/lib -L/usr/X11R6/lib -L/opt/homebrew/lib
+
+CFLAGS = -pedantic -Wall -g $(incdir)
+LDFLAGS = $(libdir) -lGL -lGLU -lspnav -lX11 -lm
$(bin): $(obj)
$(CC) -o $@ $(obj) $(LDFLAGS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/examples/cube/cube.c new/libspnav-1.2/examples/cube/cube.c
--- old/libspnav-1.1/examples/cube/cube.c 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/examples/cube/cube.c 2025-03-30 04:42:13.000000000 +0200
@@ -94,10 +94,10 @@
int attr[] = {
GLX_RGBA, GLX_DOUBLEBUFFER,
- GLX_RED_SIZE, 8,
- GLX_GREEN_SIZE, 8,
- GLX_BLUE_SIZE, 8,
- GLX_DEPTH_SIZE, 24,
+ GLX_RED_SIZE, 1,
+ GLX_GREEN_SIZE, 1,
+ GLX_BLUE_SIZE, 1,
+ GLX_DEPTH_SIZE, 16,
None
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/examples/fly/Makefile new/libspnav-1.2/examples/fly/Makefile
--- old/libspnav-1.1/examples/fly/Makefile 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/examples/fly/Makefile 2025-03-30 04:42:13.000000000 +0200
@@ -1,9 +1,12 @@
obj = fly.o xwin.o
bin = fly
-CC ?= gcc
-CFLAGS = -pedantic -Wall -g -I../.. -I../../src -I/usr/local/include
-LDFLAGS = -L../.. -L/usr/local/lib -lX11 -lGL -lGLU -lspnav -lm
+incdir = -I../.. -I../../src -I/usr/local/include -I/usr/X11R6/include \
+ -I/opt/homebrew/include
+libdir = -L../.. -L/usr/local/lib -L/usr/X11R6/lib -L/opt/homebrew/lib
+
+CFLAGS = -pedantic -Wall -O3 $(incdir)
+LDFLAGS = $(libdir) -lGL -lGLU -lspnav -lX11 -lm
$(bin): $(obj)
$(CC) -o $@ $(obj) $(LDFLAGS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/examples/fly/fly.c new/libspnav-1.2/examples/fly/fly.c
--- old/libspnav-1.1/examples/fly/fly.c 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/examples/fly/fly.c 2025-03-30 04:42:13.000000000 +0200
@@ -7,6 +7,7 @@
#include <stdlib.h>
#include <math.h>
#include <errno.h>
+#include <unistd.h>
#include <sys/select.h>
#include <X11/Xlib.h>
#include <GL/gl.h>
@@ -17,6 +18,7 @@
#define GRID_REP 60
#define GRID_SZ 200
+#define GRID_RES 7
void gen_textures(void);
void gen_scene(void);
@@ -27,14 +29,17 @@
void draw_box(float xsz, float ysz, float zsz);
/* XXX: posrot contains a position vector and an orientation quaternion, and
- * can be used with the spnav_posrot_moveobj function to accumulate input
- * motions, and then with spnav_matrix_obj to create a transformation matrix.
+ * can be used with the spnav_posrot_moveview function to accumulate input
+ * motions, and then with spnav_matrix_view to create a view matrix.
* See util.c in the libspnav source code for implementation details.
*/
struct spnav_posrot posrot;
unsigned int grid_tex, box_tex;
-unsigned int scene;
+unsigned int scene, skydome;
+
+float apex_color[] = {0.07, 0.1, 0.4, 1.0f};
+float horiz_color[] = {0.5, 0.2, 0.05, 1.0f};
int main(void)
@@ -62,8 +67,9 @@
glEnable(GL_CULL_FACE);
glFogi(GL_FOG_MODE, GL_LINEAR);
- glFogf(GL_FOG_START, GRID_SZ / 4);
+ glFogf(GL_FOG_START, GRID_SZ / 4.0f);
glFogf(GL_FOG_END, GRID_SZ);
+ glFogfv(GL_FOG_COLOR, horiz_color);
gen_textures();
gen_scene();
@@ -177,30 +183,35 @@
void gen_scene(void)
{
- int i, j;
- float x, y, h;
+ int i, j, k;
+ float x, y, h, u, v, du;
srand(0);
scene = glGenLists(1);
glNewList(scene, GL_COMPILE);
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_FOG);
-
/* grid */
glBindTexture(GL_TEXTURE_2D, grid_tex);
-
glBegin(GL_QUADS);
glColor3f(1, 1, 1);
- glTexCoord2f(0, 0);
- glVertex3f(-GRID_SZ, 0, GRID_SZ);
- glTexCoord2f(GRID_REP, 0);
- glVertex3f(GRID_SZ, 0, GRID_SZ);
- glTexCoord2f(GRID_REP, GRID_REP);
- glVertex3f(GRID_SZ, 0, -GRID_SZ);
- glTexCoord2f(0, GRID_REP);
- glVertex3f(-GRID_SZ, 0, -GRID_SZ);
+
+ du = 1.0f / (float)GRID_RES;
+ for(i=0; i<GRID_RES; i++) {
+ u = (float)i * du;
+ for(j=0; j<GRID_RES; j++) {
+ v = (float)j * du;
+ for(k=0; k<4; k++) {
+ int gc = k ^ (k >> 1);
+ float tu = (u + (gc & 1) * du) * GRID_REP;
+ float tv = (v + (gc >> 1) * du) * GRID_REP;
+ x = ((u - 0.5f) + (gc & 1) * du) * GRID_SZ * 2.0f;
+ y = ((v - 0.5f) + (gc >> 1) * du) * GRID_SZ * 2.0f;
+ glTexCoord2f(tu, tv);
+ glVertex3f(x, 0, -y);
+ }
+ }
+ }
glEnd();
/* buildings */
@@ -224,21 +235,31 @@
glPopMatrix();
}
}
+ glEndList();
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_FOG);
+ skydome = glGenLists(1);
+ glNewList(skydome, GL_COMPILE);
/* skydome */
glBegin(GL_TRIANGLE_FAN);
- glColor3f(0.07, 0.1, 0.4);
- glVertex3f(0, GRID_SZ/5, 0);
- glColor3f(0.5, 0.2, 0.05);
+ glColor3fv(apex_color);
+ glVertex3f(0, GRID_SZ / 5.0f, 0);
+ glColor3fv(horiz_color);
glVertex3f(-GRID_SZ, 0, -GRID_SZ);
glVertex3f(GRID_SZ, 0, -GRID_SZ);
glVertex3f(GRID_SZ, 0, GRID_SZ);
glVertex3f(-GRID_SZ, 0, GRID_SZ);
glVertex3f(-GRID_SZ, 0, -GRID_SZ);
glEnd();
+ glBegin(GL_TRIANGLE_FAN);
+ glColor3fv(horiz_color);
+ glVertex3f(0, -GRID_SZ / 5.0f, 0);
+ glVertex3f(-GRID_SZ, 0, -GRID_SZ);
+ glVertex3f(-GRID_SZ, 0, GRID_SZ);
+ glVertex3f(GRID_SZ, 0, GRID_SZ);
+ glVertex3f(GRID_SZ, 0, -GRID_SZ);
+ glVertex3f(-GRID_SZ, 0, -GRID_SZ);
+ glEnd();
glEndList();
}
@@ -257,7 +278,22 @@
glMultMatrixf(xform); /* concatenate our computed view matrix */
glTranslatef(0, -5, 0); /* move the default view a bit higher above the ground */
+ glPushMatrix();
+ xform[12] = xform[13] = xform[14] = 0.0f;
+ glLoadMatrixf(xform);
+ glTranslatef(0, -5, 0);
+
+ glDisable(GL_DEPTH_TEST);
+ glCallList(skydome);
+ glEnable(GL_DEPTH_TEST);
+
+ glPopMatrix();
+
+ glEnable(GL_TEXTURE_2D);
+ glEnable(GL_FOG);
glCallList(scene);
+ glDisable(GL_TEXTURE_2D);
+ glDisable(GL_FOG);
glXSwapBuffers(dpy, win);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/examples/simple/Makefile new/libspnav-1.2/examples/simple/Makefile
--- old/libspnav-1.1/examples/simple/Makefile 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/examples/simple/Makefile 2025-03-30 04:42:13.000000000 +0200
@@ -1,6 +1,9 @@
-CC = gcc
-CFLAGS = -pedantic -Wall -g -I../.. -I../../src -I/usr/local/include
-LDFLAGS = -L../.. -L/usr/local/lib -lspnav -lX11
+incdir = -I../.. -I../../src -I/usr/local/include -I/usr/X11R6/include \
+ -I/opt/homebrew/include
+libdir = -L../.. -L/usr/local/lib -L/usr/X11R6/lib -L/opt/homebrew/lib
+
+CFLAGS = -pedantic -Wall -g $(incdir)
+LDFLAGS = $(libdir) -lspnav -lX11 -lm
.PHONY: all
all: simple_x11 simple_af_unix
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/src/proto.h new/libspnav-1.2/src/proto.h
--- old/libspnav-1.1/src/proto.h 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/src/proto.h 2025-03-30 04:42:13.000000000 +0200
@@ -1,7 +1,11 @@
#ifndef PROTO_H_
#define PROTO_H_
+#if defined(__sgi) || defined(__sun)
+#include <inttypes.h>
+#else
#include <stdint.h>
+#endif
/* maximum supported protocol version */
#define MAX_PROTO_VER 1
@@ -83,6 +87,8 @@
REQ_GCFG_GRAB, /* get device grabbing: R[0] state R[6] status */
REQ_SCFG_SERDEV, /* set serial device path: Q[0-5] next 24 bytes Q[6] remaining length - R[6] status */
REQ_GCFG_SERDEV, /* get serial device path: R[0-5] next 24 bytes R[6] remaining length or -1 for failure */
+ REQ_SCFG_REPEAT, /* set repeat interval: Q[0] interval (msec) - R[6] status */
+ REQ_GCFG_REPEAT, /* get repeat interval: R[0] interval (msec) R[6] status */
/* TODO ... more */
REQ_CFG_SAVE = 0x3ffe, /* save config file: R[6] status */
REQ_CFG_RESTORE, /* load config from file: R[6] status */
@@ -170,7 +176,9 @@
"SCFG_GRAB",
"GCFG_GRAB",
"SCFG_SERDEV",
- "GCFG_SERDEV"
+ "GCFG_SERDEV",
+ "SCFG_REPEAT",
+ "GCFG_REPEAT"
};
const int spnav_reqnames_1000_size = sizeof spnav_reqnames_1000 / sizeof *spnav_reqnames_1000;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/src/spnav.c new/libspnav-1.2/src/spnav.c
--- old/libspnav-1.1/src/spnav.c 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/src/spnav.c 2025-03-30 04:42:13.000000000 +0200
@@ -1,6 +1,6 @@
/*
This file is part of libspnav, part of the spacenav project (spacenav.sf.net)
-Copyright (C) 2007-2022 John Tsiombikas <nuclear(a)member.fsf.org>
+Copyright (C) 2007-2023 John Tsiombikas <nuclear(a)member.fsf.org>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -298,6 +298,7 @@
int spnav_sensitivity(double sens)
{
+ float fval;
struct reqresp rr;
#ifdef SPNAV_USE_X11
@@ -306,10 +307,11 @@
}
#endif
+ fval = sens;
+
if(proto == 0) {
if(sock) {
ssize_t bytes;
- float fval = sens;
while((bytes = write(sock, &fval, sizeof fval)) <= 0 && errno == EINTR);
if(bytes <= 0) {
@@ -320,7 +322,7 @@
return -1;
}
- rr.data[0] = *(int*)&sens;
+ rr.data[0] = *(int*)&fval;
if(request(REQ_SET_SENS, &rr, TIMEOUT) == -1) {
return -1;
}
@@ -1092,3 +1094,23 @@
{
return request_str(REQ_GCFG_SERDEV, buf, bufsz, TIMEOUT);
}
+
+int spnav_cfg_set_repeat(int msec)
+{
+ struct reqresp rr = {0};
+
+ if(msec < 0) msec = -1;
+
+ rr.data[0] = msec;
+ return request(REQ_SCFG_REPEAT, &rr, TIMEOUT);
+}
+
+int spnav_cfg_get_repeat(void)
+{
+ struct reqresp rr = {0};
+
+ if(request(REQ_GCFG_REPEAT, &rr, TIMEOUT) == -1) {
+ return -1;
+ }
+ return rr.data[0];
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libspnav-1.1/src/spnav.h new/libspnav-1.2/src/spnav.h
--- old/libspnav-1.1/src/spnav.h 2022-04-26 16:19:43.000000000 +0200
+++ new/libspnav-1.2/src/spnav.h 2025-03-30 04:42:13.000000000 +0200
@@ -1,6 +1,6 @@
/*
This file is part of libspnav, part of the spacenav project (spacenav.sf.net)
-Copyright (C) 2007-2022 John Tsiombikas <nuclear(a)member.fsf.org>
+Copyright (C) 2007-2023 John Tsiombikas <nuclear(a)member.fsf.org>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -376,6 +376,9 @@
int spnav_cfg_set_serial(const char *devpath);
int spnav_cfg_get_serial(char *buf, int bufsz);
+int spnav_cfg_set_repeat(int msec);
+int spnav_cfg_get_repeat(void);
+
#ifdef __cplusplus
}
#endif
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package fio for openSUSE:Factory checked in at 2025-04-30 19:05:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fio (Old)
and /work/SRC/openSUSE:Factory/.fio.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fio"
Wed Apr 30 19:05:56 2025 rev:68 rq:1273694 version:3.38
Changes:
--------
--- /work/SRC/openSUSE:Factory/fio/fio.changes 2024-07-05 19:57:00.639096388 +0200
+++ /work/SRC/openSUSE:Factory/.fio.new.30101/fio.changes 2025-04-30 19:06:04.602564481 +0200
@@ -1,0 +2,6 @@
+Tue Apr 29 13:13:47 UTC 2025 - Avinesh Kumar <avinesh.kumar(a)suse.com>
+
+- update to 3.38:
+ * https://git.kernel.dk/?p=fio.git;a=shortlog;h=refs/tags/fio-3.38
+
+-------------------------------------------------------------------
Old:
----
fio-3.37.tar.bz2
New:
----
fio-3.38.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fio.spec ++++++
--- /var/tmp/diff_new_pack.2EULue/_old 2025-04-30 19:06:05.146587165 +0200
+++ /var/tmp/diff_new_pack.2EULue/_new 2025-04-30 19:06:05.146587165 +0200
@@ -1,7 +1,7 @@
#
# spec file for package fio
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2012 Pascal Bleser <pascal.bleser(a)opensuse.org>
#
# All modifications and additions to the file contributed by third parties
@@ -28,7 +28,7 @@
%endif
%bcond_without librdmacm
Name: fio
-Version: 3.37
+Version: 3.38
Release: 0
Summary: Flexible I/O tester
License: GPL-2.0-only
++++++ fio-3.37.tar.bz2 -> fio-3.38.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/fio/fio-3.37.tar.bz2 /work/SRC/openSUSE:Factory/.fio.new.30101/fio-3.38.tar.bz2 differ: char 11, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-duckduckgo-search for openSUSE:Factory checked in at 2025-04-30 19:05:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-duckduckgo-search (Old)
and /work/SRC/openSUSE:Factory/.python-duckduckgo-search.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-duckduckgo-search"
Wed Apr 30 19:05:48 2025 rev:4 rq:1273675 version:8.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-duckduckgo-search/python-duckduckgo-search.changes 2025-01-02 19:24:22.899797131 +0100
+++ /work/SRC/openSUSE:Factory/.python-duckduckgo-search.new.30101/python-duckduckgo-search.changes 2025-04-30 19:06:01.930453060 +0200
@@ -1,0 +2,71 @@
+Wed Apr 30 11:05:28 UTC 2025 - Felix Stegmeier <felix.stegmeier(a)suse.com>
+
+- Update to 8.0.1:
+ * refactor: remove dead code
+ * refactor: remove dead code
+ * refactor: bump to primp=0.15.0
+
+- Update to 8.0.0:
+ * Chat moved to duckai package.
+ * feat(chat): remove chat
+ * fix(typing): fix typing in cli and tests
+
+- Update to 7.5.5:
+ * fix(chat): add _chat_xfe
+
+- Update to 7.5.4:
+ * fix(chat): x-vqd-hash-1 = ""
+
+- Update to 7.5.3:
+ * DDGS.chat: bugfix by @deedy5 in #294
+
+- Update to 7.5.2:
+ * fix(temp): don't set Client.headers
+ * Full Changelog: v7.5.1...v7.5.2
+
+- Update to 7.5.1:
+ * Bugfix DDGS.text() payload by @deedy5 in #291
+
+- Update to 7.5.0:
+ * chore: bump primp to v0.14.0
+ * tests: sleep 2 seconds between tests
+ * feat(chat): add mistral-small-3
+ * feat(chat): stream response
+ * feat(cli chat): stream response
+
+- Update to 7.4.5:
+ * Chat: bugfix ConversationLimitException by @deedy5 in #288
+
+- Update to 7.4.4:
+ * DDGS.chat: add mistral-small-3 by @deedy5 in #285
+ * fix(patch): patch only while sending request
+
+- Update to 7.4.3:
+ * feat: patch httpcore
+ * feat: improve ssl_context
+
+- Update to 7.4.2:
+ * Use httpx for requests by @deedy5 in #282
+ * Cli(chat): stream answer, add DDGS.chat_yield (response message generator) by @deedy5 in #283
+
+- Update to 7.3.2:
+ * DDGS.chat: add llama-3.3-70b model by @deedy5 in #281
+
+- Update to 7.3.1:
+ * DDGS.chat: add o3-mini model by @deedy5 in #280
+
+- Update to 7.3.0:
+ * clarify exceptions in README by @vpoulailleau in #275
+ * Drop Support for Python 3.8 by @deedy5 in #276
+ * Bump primp to v0.11.0
+ * Add _impersonates_os
+
+- Update to 7.2.1:
+ * Bump primp to v0.10.0
+ * DDGS._impersonates: add "firefox_128"
+
+- Update to 7.2.1:
+ * Bump primp to v0.10.0
+ * DDGS._impersonates: add "firefox_128"
+
+-------------------------------------------------------------------
Old:
----
duckduckgo_search-7.1.1.tar.gz
New:
----
duckduckgo_search-8.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-duckduckgo-search.spec ++++++
--- /var/tmp/diff_new_pack.mRj9wI/_old 2025-04-30 19:06:02.502476912 +0200
+++ /var/tmp/diff_new_pack.mRj9wI/_new 2025-04-30 19:06:02.502476912 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-duckduckgo-search
-Version: 7.1.1
+Version: 8.0.1
Release: 0
Summary: Search using the DuckDuckGo.com search engine
License: MIT
@@ -31,17 +31,17 @@
BuildRequires: %{python_module wheel}
BuildRequires: python-rpm-macros
# SECTION test requirements
-BuildRequires: %{python_module click >= 8.1.7}
-BuildRequires: %{python_module primp >= 0.6.3}
+BuildRequires: %{python_module click >= 8.1.8}
+BuildRequires: %{python_module primp >= 0.15.0}
# /SECTION
BuildRequires: fdupes
-Requires: python-click >= 8.1.7
-Requires: python-primp >= 0.6.3
-Suggests: python-lxml >= 5.2.2
-Suggests: python-mypy >= 1.11.1
-Suggests: python-pytest >= 8.3.1
-Suggests: python-pytest-asyncio >= 0.23.8
-Suggests: python-ruff >= 0.6.1
+Requires: python-click >= 8.1.8
+Requires: python-lxml >= 5.3.0
+Requires: python-primp >= 0.15.0
+Suggests: python-mypy >= 1.14.1
+Suggests: python-pytest >= 8.3.4
+Suggests: python-pytest-dependency >= 0.6.0
+Suggests: python-ruff >= 0.9.2
Requires(post): update-alternatives
Requires(postun): update-alternatives
BuildArch: noarch
++++++ duckduckgo_search-7.1.1.tar.gz -> duckduckgo_search-8.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/PKG-INFO new/duckduckgo_search-8.0.1/PKG-INFO
--- old/duckduckgo_search-7.1.1/PKG-INFO 2024-12-27 00:22:58.106326300 +0100
+++ new/duckduckgo_search-8.0.1/PKG-INFO 2025-04-17 14:37:28.462133000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: duckduckgo_search
-Version: 7.1.1
+Version: 8.0.1
Summary: Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine.
Author: deedy5
License: MIT License
@@ -11,7 +11,6 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
@@ -20,22 +19,25 @@
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.8
+Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE.md
-Requires-Dist: click>=8.1.7
-Requires-Dist: primp>=0.9.2
+Requires-Dist: click>=8.1.8
+Requires-Dist: primp>=0.15.0
Requires-Dist: lxml>=5.3.0
Provides-Extra: dev
-Requires-Dist: mypy>=1.13.0; extra == "dev"
+Requires-Dist: mypy>=1.14.1; extra == "dev"
Requires-Dist: pytest>=8.3.4; extra == "dev"
Requires-Dist: pytest-dependency>=0.6.0; extra == "dev"
-Requires-Dist: ruff>=0.8.3; extra == "dev"
+Requires-Dist: ruff>=0.9.2; extra == "dev"
+Dynamic: license-file
- [](https://github.com/deedy5/duckduckgo_search/releases) [](https://pypi.org/project/duckduckgo-search) [](https://pepy.tech/project/duckduckgo-search) [](https://pepy.tech/project/duckduckgo-search)
+ [](https://github.com/deedy5/duckduckgo_search/releases) [](https://pypi.org/project/duckduckgo-search)
# Duckduckgo_search<a name="TOP"></a>
-AI chat and search for text, news, images and videos using the DuckDuckGo.com search engine.
+Search for text, news, images and videos using the DuckDuckGo.com search engine.
+
+:bangbang: AI chat moved to [duckai](https://pypi.org/project/duckai) package
## Table of Contents
* [Install](#install)
@@ -45,11 +47,10 @@
* [DDGS class](#ddgs-class)
* [Proxy](#proxy)
* [Exceptions](#exceptions)
-* [1. chat() - AI chat](#1-chat---ai-chat)
-* [2. text() - text search](#2-text---text-search-by-duckduckgocom)
-* [3. images() - image search](#3-images---image-search-by-duckduckgocom)
-* [4. videos() - video search](#4-videos---video-search-by-duckduckgocom)
-* [5. news() - news search](#5-news---news-search-by-duckduckgocom)
+* [1. text() - text search](#2-text---text-search-by-duckduckgocom)
+* [2. images() - image search](#3-images---image-search-by-duckduckgocom)
+* [3. videos() - video search](#4-videos---video-search-by-duckduckgocom)
+* [4. news() - news search](#5-news---news-search-by-duckduckgocom)
* [Disclaimer](#disclaimer)
## Install
@@ -64,8 +65,6 @@
```
CLI examples:
```python3
-# AI chat
-ddgs chat
# text search
ddgs text -k "Assyrian siege of Jerusalem"
# find and download pdf files via proxy
@@ -227,38 +226,24 @@
## Exceptions
+```python
+from duckduckgo_search.exceptions import (
+ ConversationLimitException,
+ DuckDuckGoSearchException,
+ RatelimitException,
+ TimeoutException,
+)
+```
+
Exceptions:
- `DuckDuckGoSearchException`: Base exception for duckduckgo_search errors.
- `RatelimitException`: Inherits from DuckDuckGoSearchException, raised for exceeding API request rate limits.
- `TimeoutException`: Inherits from DuckDuckGoSearchException, raised for API request timeouts.
-
-
-[Go To TOP](#TOP)
-
-## 1. chat() - AI chat
-
-```python
-def chat(self, keywords: str, model: str = "gpt-4o-mini", timeout: int = 30) -> str:
- """Initiates a chat session with DuckDuckGo AI.
-
- Args:
- keywords (str): The initial message or question to send to the AI.
- model (str): The model to use: "gpt-4o-mini", "claude-3-haiku", "llama-3.1-70b", "mixtral-8x7b".
- Defaults to "gpt-4o-mini".
- timeout (int): Timeout value for the HTTP client. Defaults to 30.
-
- Returns:
- str: The response from the AI.
- """
-```
-***Example***
-```python
-results = DDGS().chat("summarize Daniel Defoe's The Consolidator", model='claude-3-haiku')
-```
+- `ConversationLimitException`: Inherits from DuckDuckGoSearchException, raised for conversation limit during API requests to AI endpoint.
[Go To TOP](#TOP)
-## 2. text() - text search by duckduckgo.com
+## 1. text() - text search by duckduckgo.com
```python
def text(
@@ -276,12 +261,10 @@
region: wt-wt, us-en, uk-en, ru-ru, etc. Defaults to "wt-wt".
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m, y. Defaults to None.
- backend: auto, api, html, lite. Defaults to auto.
+ backend: auto, html, lite. Defaults to auto.
auto - try all backends in random order,
- api - collect data from https://duckduckgo.com,
html - collect data from https://html.duckduckgo.com,
- lite - collect data from https://lite.duckduckgo.com,
- ecosia - collect data from https://www.ecosia.com.
+ lite - collect data from https://lite.duckduckgo.com.
max_results: max number of results. If None, returns results only from the first response. Defaults to None.
Returns:
@@ -305,7 +288,7 @@
[Go To TOP](#TOP)
-## 3. images() - image search by duckduckgo.com
+## 2. images() - image search by duckduckgo.com
```python
def images(
@@ -372,7 +355,7 @@
[Go To TOP](#TOP)
-## 4. videos() - video search by duckduckgo.com
+## 3. videos() - video search by duckduckgo.com
```python
def videos(
@@ -439,7 +422,7 @@
[Go To TOP](#TOP)
-## 5. news() - news search by duckduckgo.com
+## 4. news() - news search by duckduckgo.com
```python
def news(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/README.md new/duckduckgo_search-8.0.1/README.md
--- old/duckduckgo_search-7.1.1/README.md 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/README.md 2025-04-17 14:37:17.000000000 +0200
@@ -1,7 +1,9 @@
- [](https://github.com/deedy5/duckduckgo_search/releases) [](https://pypi.org/project/duckduckgo-search) [](https://pepy.tech/project/duckduckgo-search) [](https://pepy.tech/project/duckduckgo-search)
+ [](https://github.com/deedy5/duckduckgo_search/releases) [](https://pypi.org/project/duckduckgo-search)
# Duckduckgo_search<a name="TOP"></a>
-AI chat and search for text, news, images and videos using the DuckDuckGo.com search engine.
+Search for text, news, images and videos using the DuckDuckGo.com search engine.
+
+:bangbang: AI chat moved to [duckai](https://pypi.org/project/duckai) package
## Table of Contents
* [Install](#install)
@@ -11,11 +13,10 @@
* [DDGS class](#ddgs-class)
* [Proxy](#proxy)
* [Exceptions](#exceptions)
-* [1. chat() - AI chat](#1-chat---ai-chat)
-* [2. text() - text search](#2-text---text-search-by-duckduckgocom)
-* [3. images() - image search](#3-images---image-search-by-duckduckgocom)
-* [4. videos() - video search](#4-videos---video-search-by-duckduckgocom)
-* [5. news() - news search](#5-news---news-search-by-duckduckgocom)
+* [1. text() - text search](#2-text---text-search-by-duckduckgocom)
+* [2. images() - image search](#3-images---image-search-by-duckduckgocom)
+* [3. videos() - video search](#4-videos---video-search-by-duckduckgocom)
+* [4. news() - news search](#5-news---news-search-by-duckduckgocom)
* [Disclaimer](#disclaimer)
## Install
@@ -30,8 +31,6 @@
```
CLI examples:
```python3
-# AI chat
-ddgs chat
# text search
ddgs text -k "Assyrian siege of Jerusalem"
# find and download pdf files via proxy
@@ -193,38 +192,24 @@
## Exceptions
+```python
+from duckduckgo_search.exceptions import (
+ ConversationLimitException,
+ DuckDuckGoSearchException,
+ RatelimitException,
+ TimeoutException,
+)
+```
+
Exceptions:
- `DuckDuckGoSearchException`: Base exception for duckduckgo_search errors.
- `RatelimitException`: Inherits from DuckDuckGoSearchException, raised for exceeding API request rate limits.
- `TimeoutException`: Inherits from DuckDuckGoSearchException, raised for API request timeouts.
-
-
-[Go To TOP](#TOP)
-
-## 1. chat() - AI chat
-
-```python
-def chat(self, keywords: str, model: str = "gpt-4o-mini", timeout: int = 30) -> str:
- """Initiates a chat session with DuckDuckGo AI.
-
- Args:
- keywords (str): The initial message or question to send to the AI.
- model (str): The model to use: "gpt-4o-mini", "claude-3-haiku", "llama-3.1-70b", "mixtral-8x7b".
- Defaults to "gpt-4o-mini".
- timeout (int): Timeout value for the HTTP client. Defaults to 30.
-
- Returns:
- str: The response from the AI.
- """
-```
-***Example***
-```python
-results = DDGS().chat("summarize Daniel Defoe's The Consolidator", model='claude-3-haiku')
-```
+- `ConversationLimitException`: Inherits from DuckDuckGoSearchException, raised for conversation limit during API requests to AI endpoint.
[Go To TOP](#TOP)
-## 2. text() - text search by duckduckgo.com
+## 1. text() - text search by duckduckgo.com
```python
def text(
@@ -242,12 +227,10 @@
region: wt-wt, us-en, uk-en, ru-ru, etc. Defaults to "wt-wt".
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m, y. Defaults to None.
- backend: auto, api, html, lite. Defaults to auto.
+ backend: auto, html, lite. Defaults to auto.
auto - try all backends in random order,
- api - collect data from https://duckduckgo.com,
html - collect data from https://html.duckduckgo.com,
- lite - collect data from https://lite.duckduckgo.com,
- ecosia - collect data from https://www.ecosia.com.
+ lite - collect data from https://lite.duckduckgo.com.
max_results: max number of results. If None, returns results only from the first response. Defaults to None.
Returns:
@@ -271,7 +254,7 @@
[Go To TOP](#TOP)
-## 3. images() - image search by duckduckgo.com
+## 2. images() - image search by duckduckgo.com
```python
def images(
@@ -338,7 +321,7 @@
[Go To TOP](#TOP)
-## 4. videos() - video search by duckduckgo.com
+## 3. videos() - video search by duckduckgo.com
```python
def videos(
@@ -405,7 +388,7 @@
[Go To TOP](#TOP)
-## 5. news() - news search by duckduckgo.com
+## 4. news() - news search by duckduckgo.com
```python
def news(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/duckduckgo_search/cli.py new/duckduckgo_search-8.0.1/duckduckgo_search/cli.py
--- old/duckduckgo_search-7.1.1/duckduckgo_search/cli.py 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/duckduckgo_search/cli.py 2025-04-17 14:37:17.000000000 +0200
@@ -1,7 +1,8 @@
+from __future__ import annotations
+
import csv
import logging
import os
-import sys
from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime
from pathlib import Path
@@ -11,7 +12,7 @@
import primp
from .duckduckgo_search import DDGS
-from .utils import _expand_proxy_tb_alias, json_dumps, json_loads
+from .utils import _expand_proxy_tb_alias, json_dumps
from .version import __version__
logger = logging.getLogger(__name__)
@@ -36,7 +37,7 @@
}
-def _save_data(keywords, data, function_name, filename):
+def _save_data(keywords: str, data: list[dict[str, str]], function_name: str, filename: str | None) -> None:
filename, ext = filename.rsplit(".", 1) if filename and filename.endswith((".csv", ".json")) else (None, filename)
filename = filename if filename else f"{function_name}_{keywords}_{datetime.now():%Y%m%d_%H%M%S}"
if ext == "csv":
@@ -45,12 +46,12 @@
_save_json(f"{filename}.{ext}", data)
-def _save_json(jsonfile, data):
+def _save_json(jsonfile: str | Path, data: list[dict[str, str]]) -> None:
with open(jsonfile, "w", encoding="utf-8") as file:
file.write(json_dumps(data))
-def _save_csv(csvfile, data):
+def _save_csv(csvfile: str | Path, data: list[dict[str, str]]) -> None:
with open(csvfile, "w", newline="", encoding="utf-8") as file:
if data:
headers = data[0].keys()
@@ -59,7 +60,7 @@
writer.writerows(data)
-def _print_data(data):
+def _print_data(data: list[dict[str, str]]) -> None:
if data:
for i, e in enumerate(data, start=1):
click.secho(f"{i}.\t {'=' * 78}", bg="black", fg="white")
@@ -76,7 +77,7 @@
input()
-def _sanitize_keywords(keywords):
+def _sanitize_keywords(keywords: str) -> str:
keywords = (
keywords.replace("filetype", "")
.replace(":", "")
@@ -90,9 +91,11 @@
return keywords
-def _download_file(url, dir_path, filename, proxy, verify):
+def _download_file(url: str, dir_path: str, filename: str, proxy: str | None, verify: bool) -> None:
try:
- resp = primp.Client(proxy=proxy, impersonate="chrome_131", timeout=10, verify=verify).get(url)
+ resp = primp.Client(proxy=proxy, impersonate="random", impersonate_os="random", timeout=10, verify=verify).get(
+ url
+ )
if resp.status_code == 200:
with open(os.path.join(dir_path, filename[:200]), "wb") as file:
file.write(resp.content)
@@ -100,7 +103,15 @@
logger.debug(f"download_file url={url} {type(ex).__name__} {ex}")
-def _download_results(keywords, results, function_name, proxy=None, threads=None, verify=True, pathname=None):
+def _download_results(
+ keywords: str,
+ results: list[dict[str, str]],
+ function_name: str,
+ proxy: str | None = None,
+ threads: int | None = None,
+ verify: bool = True,
+ pathname: str | None = None,
+) -> None:
path = pathname if pathname else f"{function_name}_{keywords}_{datetime.now():%Y%m%d_%H%M%S}"
os.makedirs(path, exist_ok=True)
@@ -113,7 +124,7 @@
f = executor.submit(_download_file, url, path, f"{i}_{filename}", proxy, verify)
futures.append(f)
- with click.progressbar(
+ with click.progressbar( # type: ignore
length=len(futures), label="Downloading", show_percent=True, show_pos=True, width=50
) as bar:
for future in as_completed(futures):
@@ -122,12 +133,12 @@
@click.group(chain=True)
-def cli():
+def cli() -> None:
"""duckduckgo_search CLI tool"""
pass
-def safe_entry_point():
+def safe_entry_point() -> None:
try:
cli()
except Exception as ex:
@@ -135,60 +146,12 @@
@cli.command()
-def version():
+def version() -> str:
print(__version__)
return __version__
@cli.command()
-(a)click.option("-l", "--load", is_flag=True, default=False, help="load the last conversation from the json cache")
-(a)click.option("-p", "--proxy", help="the proxy to send requests, example: socks5://127.0.0.1:9150")
-(a)click.option("-ml", "--multiline", is_flag=True, default=False, help="multi-line input")
-(a)click.option("-t", "--timeout", default=30, help="timeout value for the HTTP client")
-(a)click.option("-v", "--verify", default=True, help="verify SSL when making the request")
-(a)click.option(
- "-m",
- "--model",
- prompt="""DuckDuckGo AI chat. Choose a model:
-[1]: gpt-4o-mini
-[2]: claude-3-haiku
-[3]: llama-3.1-70b
-[4]: mixtral-8x7b
-""",
- type=click.Choice(["1", "2", "3", "4"]),
- show_choices=False,
- default="1",
-)
-def chat(load, proxy, multiline, timeout, verify, model):
- """CLI function to perform an interactive AI chat using DuckDuckGo API."""
- client = DDGS(proxy=_expand_proxy_tb_alias(proxy), verify=verify)
- model = ["gpt-4o-mini", "claude-3-haiku", "llama-3.1-70b", "mixtral-8x7b"][int(model) - 1]
-
- cache_file = "ddgs_chat_conversation.json"
- if load and Path(cache_file).exists():
- with open(cache_file) as f:
- cache = json_loads(f.read())
- client._chat_vqd = cache.get("vqd", None)
- client._chat_messages = cache.get("messages", [])
- client._chat_tokens_count = cache.get("tokens", 0)
-
- while True:
- print(f"{'-'*78}\nYou[{model=} tokens={client._chat_tokens_count}]: ", end="")
- if multiline:
- print(f"""[multiline, send message: ctrl+{"Z" if sys.platform == "win32" else "D"}]""")
- user_input = sys.stdin.read()
- print("...")
- else:
- user_input = input()
- if user_input.strip():
- resp_answer = client.chat(keywords=user_input, model=model, timeout=timeout)
- click.secho(f"AI: {resp_answer}", fg="green")
-
- cache = {"vqd": client._chat_vqd, "tokens": client._chat_tokens_count, "messages": client._chat_messages}
- _save_json(cache_file, cache)
-
-
-(a)cli.command()
@click.option("-k", "--keywords", required=True, help="text search, keywords for query")
@click.option("-r", "--region", default="wt-wt", help="wt-wt, us-en, ru-ru, etc. -region https://duckduckgo.com/params")
@click.option("-s", "--safesearch", default="moderate", type=click.Choice(["on", "moderate", "off"]))
@@ -197,24 +160,24 @@
@click.option("-o", "--output", help="csv, json or filename.csv|json (save the results to a csv or json file)")
@click.option("-d", "--download", is_flag=True, default=False, help="download results. -dd to set custom directory")
@click.option("-dd", "--download-directory", help="Specify custom download directory")
-(a)click.option("-b", "--backend", default="auto", type=click.Choice(["auto", "api", "html", "lite", "ecosia"]))
+(a)click.option("-b", "--backend", default="auto", type=click.Choice(["auto", "html", "lite"]))
@click.option("-th", "--threads", default=10, help="download threads, default=10")
@click.option("-p", "--proxy", help="the proxy to send requests, example: socks5://127.0.0.1:9150")
@click.option("-v", "--verify", default=True, help="verify SSL when making the request")
def text(
- keywords,
- region,
- safesearch,
- timelimit,
- backend,
- output,
- download,
- download_directory,
- threads,
- max_results,
- proxy,
- verify,
-):
+ keywords: str,
+ region: str,
+ safesearch: str,
+ timelimit: str | None,
+ backend: str,
+ output: str | None,
+ download: bool,
+ download_directory: str | None,
+ threads: int,
+ max_results: int | None,
+ proxy: str | None,
+ verify: bool,
+) -> None:
"""CLI function to perform a text search using DuckDuckGo API."""
data = DDGS(proxy=_expand_proxy_tb_alias(proxy), verify=verify).text(
keywords=keywords,
@@ -284,23 +247,23 @@
@click.option("-p", "--proxy", help="the proxy to send requests, example: socks5://127.0.0.1:9150")
@click.option("-v", "--verify", default=True, help="verify SSL when making the request")
def images(
- keywords,
- region,
- safesearch,
- timelimit,
- size,
- color,
- type_image,
- layout,
- license_image,
- download,
- download_directory,
- threads,
- max_results,
- output,
- proxy,
- verify,
-):
+ keywords: str,
+ region: str,
+ safesearch: str,
+ timelimit: str | None,
+ size: str | None,
+ color: str | None,
+ type_image: str | None,
+ layout: str | None,
+ license_image: str | None,
+ download: bool,
+ download_directory: str | None,
+ threads: int,
+ max_results: int | None,
+ output: str | None,
+ proxy: str | None,
+ verify: bool,
+) -> None:
"""CLI function to perform a images search using DuckDuckGo API."""
data = DDGS(proxy=_expand_proxy_tb_alias(proxy), verify=verify).images(
keywords=keywords,
@@ -344,8 +307,18 @@
@click.option("-p", "--proxy", help="the proxy to send requests, example: socks5://127.0.0.1:9150")
@click.option("-v", "--verify", default=True, help="verify SSL when making the request")
def videos(
- keywords, region, safesearch, timelimit, resolution, duration, license_videos, max_results, output, proxy, verify
-):
+ keywords: str,
+ region: str,
+ safesearch: str,
+ timelimit: str | None,
+ resolution: str | None,
+ duration: str | None,
+ license_videos: str | None,
+ max_results: int | None,
+ output: str | None,
+ proxy: str | None,
+ verify: bool,
+) -> None:
"""CLI function to perform a videos search using DuckDuckGo API."""
data = DDGS(proxy=_expand_proxy_tb_alias(proxy), verify=verify).videos(
keywords=keywords,
@@ -373,7 +346,16 @@
@click.option("-o", "--output", help="csv, json or filename.csv|json (save the results to a csv or json file)")
@click.option("-p", "--proxy", help="the proxy to send requests, example: socks5://127.0.0.1:9150")
@click.option("-v", "--verify", default=True, help="verify SSL when making the request")
-def news(keywords, region, safesearch, timelimit, max_results, output, proxy, verify):
+def news(
+ keywords: str,
+ region: str,
+ safesearch: str,
+ timelimit: str | None,
+ max_results: int | None,
+ output: str | None,
+ proxy: str | None,
+ verify: bool,
+) -> None:
"""CLI function to perform a news search using DuckDuckGo API."""
data = DDGS(proxy=_expand_proxy_tb_alias(proxy), verify=verify).news(
keywords=keywords, region=region, safesearch=safesearch, timelimit=timelimit, max_results=max_results
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/duckduckgo_search/duckduckgo_search.py new/duckduckgo_search-8.0.1/duckduckgo_search/duckduckgo_search.py
--- old/duckduckgo_search-7.1.1/duckduckgo_search/duckduckgo_search.py 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/duckduckgo_search/duckduckgo_search.py 2025-04-17 14:37:17.000000000 +0200
@@ -6,17 +6,17 @@
from datetime import datetime, timezone
from functools import cached_property
from itertools import cycle
-from random import choice, shuffle
+from random import shuffle
from time import sleep, time
from types import TracebackType
-from typing import cast
+from typing import Any, Literal
-import primp # type: ignore
+import primp
from lxml.etree import _Element
from lxml.html import HTMLParser as LHTMLParser
from lxml.html import document_fromstring
-from .exceptions import ConversationLimitException, DuckDuckGoSearchException, RatelimitException, TimeoutException
+from .exceptions import DuckDuckGoSearchException, RatelimitException, TimeoutException
from .utils import (
_expand_proxy_tb_alias,
_extract_vqd,
@@ -31,20 +31,6 @@
class DDGS:
"""DuckDuckgo_search class to get search results from duckduckgo.com."""
- _impersonates = (
- "chrome_100", "chrome_101", "chrome_104", "chrome_105", "chrome_106", "chrome_107",
- "chrome_108", "chrome_109", "chrome_114", "chrome_116", "chrome_117", "chrome_118",
- "chrome_119", "chrome_120", "chrome_123", "chrome_124", "chrome_126", "chrome_127",
- "chrome_128", "chrome_129", "chrome_130", "chrome_131",
- "safari_ios_16.5", "safari_ios_17.2", "safari_ios_17.4.1", "safari_ios_18.1.1",
- "safari_15.3", "safari_15.5", "safari_15.6.1", "safari_16", "safari_16.5",
- "safari_17.0", "safari_17.2.1", "safari_17.4.1", "safari_17.5",
- "safari_18", "safari_18.2",
- "safari_ipad_18",
- "edge_101", "edge_122", "edge_127", "edge_131",
- "firefox_109", "firefox_133",
- ) # fmt: skip
-
def __init__(
self,
headers: dict[str, str] | None = None,
@@ -70,19 +56,18 @@
self.proxy = proxies.get("http") or proxies.get("https") if isinstance(proxies, dict) else proxies
self.headers = headers if headers else {}
self.headers["Referer"] = "https://duckduckgo.com/"
+ self.timeout = timeout
self.client = primp.Client(
- headers=self.headers,
+ # headers=self.headers,
proxy=self.proxy,
- timeout=timeout,
+ timeout=self.timeout,
cookie_store=True,
referer=True,
- impersonate=choice(self._impersonates),
+ impersonate="random",
+ impersonate_os="random",
follow_redirects=False,
verify=verify,
)
- self._chat_messages: list[dict[str, str]] = []
- self._chat_tokens_count = 0
- self._chat_vqd: str = ""
self.sleep_timestamp = 0.0
def __enter__(self) -> DDGS:
@@ -109,99 +94,45 @@
def _get_url(
self,
- method: str,
+ method: Literal["GET", "HEAD", "OPTIONS", "DELETE", "POST", "PUT", "PATCH"],
url: str,
params: dict[str, str] | None = None,
content: bytes | None = None,
- data: dict[str, str] | bytes | None = None,
+ data: dict[str, str] | None = None,
+ headers: dict[str, str] | None = None,
cookies: dict[str, str] | None = None,
- ) -> bytes:
+ json: Any = None,
+ timeout: float | None = None,
+ ) -> Any:
self._sleep()
try:
- resp = self.client.request(method, url, params=params, content=content, data=data, cookies=cookies)
+ resp = self.client.request(
+ method,
+ url,
+ params=params,
+ content=content,
+ data=data,
+ headers=headers,
+ cookies=cookies,
+ json=json,
+ timeout=timeout or self.timeout,
+ )
except Exception as ex:
if "time" in str(ex).lower():
raise TimeoutException(f"{url} {type(ex).__name__}: {ex}") from ex
raise DuckDuckGoSearchException(f"{url} {type(ex).__name__}: {ex}") from ex
- logger.debug(f"_get_url() {resp.url} {resp.status_code} {len(resp.content)}")
+ logger.debug(f"_get_url() {resp.url} {resp.status_code}")
if resp.status_code == 200:
- return cast(bytes, resp.content)
- elif resp.status_code in (202, 301, 403):
+ return resp
+ elif resp.status_code in (202, 301, 403, 400, 429, 418):
raise RatelimitException(f"{resp.url} {resp.status_code} Ratelimit")
raise DuckDuckGoSearchException(f"{resp.url} return None. {params=} {content=} {data=}")
def _get_vqd(self, keywords: str) -> str:
"""Get vqd value for a search query."""
- resp_content = self._get_url("GET", "https://duckduckgo.com", params={"q": keywords})
+ resp_content = self._get_url("GET", "https://duckduckgo.com", params={"q": keywords}).content
return _extract_vqd(resp_content, keywords)
- def chat(self, keywords: str, model: str = "gpt-4o-mini", timeout: int = 30) -> str:
- """Initiates a chat session with DuckDuckGo AI.
-
- Args:
- keywords (str): The initial message or question to send to the AI.
- model (str): The model to use: "gpt-4o-mini", "claude-3-haiku", "llama-3.1-70b", "mixtral-8x7b".
- Defaults to "gpt-4o-mini".
- timeout (int): Timeout value for the HTTP client. Defaults to 20.
-
- Returns:
- str: The response from the AI.
- """
- models_deprecated = {
- "gpt-3.5": "gpt-4o-mini",
- "llama-3-70b": "llama-3.1-70b",
- }
- if model in models_deprecated:
- logger.info(f"{model=} is deprecated, using {models_deprecated[model]}")
- model = models_deprecated[model]
- models = {
- "claude-3-haiku": "claude-3-haiku-20240307",
- "gpt-4o-mini": "gpt-4o-mini",
- "llama-3.1-70b": "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
- "mixtral-8x7b": "mistralai/Mixtral-8x7B-Instruct-v0.1",
- }
- # vqd
- if not self._chat_vqd:
- resp = self.client.get("https://duckduckgo.com/duckchat/v1/status", headers={"x-vqd-accept": "1"})
- self._chat_vqd = resp.headers.get("x-vqd-4", "")
-
- self._chat_messages.append({"role": "user", "content": keywords})
- self._chat_tokens_count += len(keywords) // 4 if len(keywords) >= 4 else 1 # approximate number of tokens
-
- json_data = {
- "model": models[model],
- "messages": self._chat_messages,
- }
- resp = self.client.post(
- "https://duckduckgo.com/duckchat/v1/chat",
- headers={"x-vqd-4": self._chat_vqd},
- json=json_data,
- timeout=timeout,
- )
- self._chat_vqd = resp.headers.get("x-vqd-4", "")
-
- data = ",".join(x for line in resp.text.rstrip("[DONE]LIMT_CVRSA\n").split("data:") if (x := line.strip()))
- data = json_loads("[" + data + "]")
-
- results = []
- for x in data:
- if x.get("action") == "error":
- err_message = x.get("type", "")
- if x.get("status") == 429:
- raise (
- ConversationLimitException(err_message)
- if err_message == "ERR_CONVERSATION_LIMIT"
- else RatelimitException(err_message)
- )
- raise DuckDuckGoSearchException(err_message)
- elif message := x.get("message"):
- results.append(message)
- result = "".join(results)
-
- self._chat_messages.append({"role": "assistant", "content": result})
- self._chat_tokens_count += len(results)
- return result
-
def text(
self,
keywords: str,
@@ -218,11 +149,10 @@
region: wt-wt, us-en, uk-en, ru-ru, etc. Defaults to "wt-wt".
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m, y. Defaults to None.
- backend: auto, api, html, lite. Defaults to auto.
+ backend: auto, html, lite. Defaults to auto.
auto - try all backends in random order,
html - collect data from https://html.duckduckgo.com,
- lite - collect data from https://lite.duckduckgo.com,
- ecosia - collect data from https://www.ecosia.com.
+ lite - collect data from https://lite.duckduckgo.com.
max_results: max number of results. If None, returns results only from the first response. Defaults to None.
Returns:
@@ -233,10 +163,10 @@
RatelimitException: Inherits from DuckDuckGoSearchException, raised for exceeding API request rate limits.
TimeoutException: Inherits from DuckDuckGoSearchException, raised for API request timeouts.
"""
- if backend == "api":
- warnings.warn("'api' backend is deprecated, using backend='auto'", stacklevel=2)
+ if backend in ("api", "ecosia"):
+ warnings.warn(f"{backend=} is deprecated, using backend='auto'", stacklevel=2)
backend = "auto"
- backends = ["html", "lite", "ecosia"] if backend == "auto" else [backend]
+ backends = ["html", "lite"] if backend == "auto" else [backend]
shuffle(backends)
results, err = [], None
@@ -246,8 +176,6 @@
results = self._text_html(keywords, region, timelimit, max_results)
elif b == "lite":
results = self._text_lite(keywords, region, timelimit, max_results)
- elif b == "ecosia":
- results = self._text_ecosia(keywords, region, safesearch, max_results)
return results
except Exception as ex:
logger.info(f"Error to search using {b} backend: {ex}")
@@ -266,12 +194,8 @@
payload = {
"q": keywords,
- "s": "0",
- "o": "json",
- "api": "d.js",
- "vqd": "",
+ "b": "",
"kl": region,
- "bing_market": region,
}
if timelimit:
payload["df"] = timelimit
@@ -280,7 +204,7 @@
results: list[dict[str, str]] = []
for _ in range(5):
- resp_content = self._get_url("POST", "https://html.duckduckgo.com/html", data=payload)
+ resp_content = self._get_url("POST", "https://html.duckduckgo.com/html", data=payload).content
if b"No results." in resp_content:
return results
@@ -338,12 +262,7 @@
payload = {
"q": keywords,
- "s": "0",
- "o": "json",
- "api": "d.js",
- "vqd": "",
"kl": region,
- "bing_market": region,
}
if timelimit:
payload["df"] = timelimit
@@ -352,7 +271,7 @@
results: list[dict[str, str]] = []
for _ in range(5):
- resp_content = self._get_url("POST", "https://lite.duckduckgo.com/lite/", data=payload)
+ resp_content = self._get_url("POST", "https://lite.duckduckgo.com/lite/", data=payload).content
if b"No more results." in resp_content:
return results
@@ -397,85 +316,15 @@
if max_results and len(results) >= max_results:
return results
- next_page_s = tree.xpath("//form[./input[contains(@value, 'ext')]]/input[@name='s']/@value")
- if not next_page_s or not max_results:
- return results
- elif isinstance(next_page_s, list):
- payload["s"] = str(next_page_s[0])
-
- return results
-
- def _text_ecosia(
- self,
- keywords: str,
- region: str = "wt-wt",
- safesearch: str = "moderate",
- max_results: int | None = None,
- ) -> list[dict[str, str]]:
- assert keywords, "keywords is mandatory"
-
- payload = {
- "q": keywords,
- }
- cookies = {
- "a": "0",
- "as": "0",
- "cs": "1",
- "dt": "pc",
- "f": "y" if safesearch == "on" else "n" if safesearch == "off" else "i",
- "fr": "0",
- "fs": "1",
- "l": "en",
- "lt": f"{int(time() * 1000)}",
- "mc": f"{region[3:]}-{region[:2]}",
- "nf": "0",
- "nt": "0",
- "pz": "0",
- "t": "6",
- "tt": "",
- "tu": "auto",
- "wu": "auto",
- "ma": "1",
- }
-
- cache = set()
- results: list[dict[str, str]] = []
-
- for _ in range(5):
- resp_content = self._get_url("GET", "https://www.ecosia.org/search", params=payload, cookies=cookies)
- if b"Unfortunately we didn\xe2\x80\x99t find any results for" in resp_content:
- return results
-
- tree = document_fromstring(resp_content, self.parser)
- elements = tree.xpath("//div[@class='result__body']")
- if not isinstance(elements, list):
- return results
-
- for e in elements:
- if isinstance(e, _Element):
- hrefxpath = e.xpath(".//div[@class='result__title']/a/@href")
- href = str(hrefxpath[0]) if hrefxpath and isinstance(hrefxpath, list) else None
- if href and href not in cache:
- cache.add(href)
- titlexpath = e.xpath(".//div[@class='result__title']/a/h2/text()")
- title = str(titlexpath[0]) if titlexpath and isinstance(titlexpath, list) else ""
- bodyxpath = e.xpath(".//div[@class='result__description']//text()")
- body = "".join(str(x) for x in bodyxpath) if bodyxpath and isinstance(bodyxpath, list) else ""
- results.append(
- {
- "title": _normalize(title.strip()),
- "href": _normalize_url(href),
- "body": _normalize(body.strip()),
- }
- )
- if max_results and len(results) >= max_results:
- return results
-
- npx = tree.xpath("//div[contains(@class, 'pagination')]//a[contains(@data-test-id, 'next')]/@href")
+ npx = tree.xpath("//form[./input[contains(@value, 'ext')]]")
if not npx or not max_results:
return results
- if isinstance(npx, list):
- payload["p"] = str(npx[-1]).split("p=")[1].split("&")[0]
+ next_page = npx[-1] if isinstance(npx, list) else None
+ if isinstance(next_page, _Element):
+ names = next_page.xpath('.//input[@type="hidden"]/@name')
+ values = next_page.xpath('.//input[@type="hidden"]/@value')
+ if isinstance(names, list) and isinstance(values, list):
+ payload = {str(n): str(v) for n, v in zip(names, values)}
return results
@@ -543,7 +392,9 @@
results: list[dict[str, str]] = []
for _ in range(5):
- resp_content = self._get_url("GET", "https://duckduckgo.com/i.js", params=payload)
+ resp_content = self._get_url(
+ "GET", "https://duckduckgo.com/i.js", params=payload, headers={"Referer": "https://duckduckgo.com/"}
+ ).content
resp_json = json_loads(resp_content)
page_data = resp_json.get("results", [])
@@ -623,7 +474,7 @@
results: list[dict[str, str]] = []
for _ in range(8):
- resp_content = self._get_url("GET", "https://duckduckgo.com/v.js", params=payload)
+ resp_content = self._get_url("GET", "https://duckduckgo.com/v.js", params=payload).content
resp_json = json_loads(resp_content)
page_data = resp_json.get("results", [])
@@ -685,7 +536,7 @@
results: list[dict[str, str]] = []
for _ in range(5):
- resp_content = self._get_url("GET", "https://duckduckgo.com/news.js", params=payload)
+ resp_content = self._get_url("GET", "https://duckduckgo.com/news.js", params=payload).content
resp_json = json_loads(resp_content)
page_data = resp_json.get("results", [])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/duckduckgo_search/version.py new/duckduckgo_search-8.0.1/duckduckgo_search/version.py
--- old/duckduckgo_search-7.1.1/duckduckgo_search/version.py 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/duckduckgo_search/version.py 2025-04-17 14:37:17.000000000 +0200
@@ -1 +1 @@
-__version__ = "7.1.1"
+__version__ = "8.0.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/duckduckgo_search.egg-info/PKG-INFO new/duckduckgo_search-8.0.1/duckduckgo_search.egg-info/PKG-INFO
--- old/duckduckgo_search-7.1.1/duckduckgo_search.egg-info/PKG-INFO 2024-12-27 00:22:58.000000000 +0100
+++ new/duckduckgo_search-8.0.1/duckduckgo_search.egg-info/PKG-INFO 2025-04-17 14:37:28.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: duckduckgo_search
-Version: 7.1.1
+Version: 8.0.1
Summary: Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine.
Author: deedy5
License: MIT License
@@ -11,7 +11,6 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
@@ -20,22 +19,25 @@
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.8
+Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE.md
-Requires-Dist: click>=8.1.7
-Requires-Dist: primp>=0.9.2
+Requires-Dist: click>=8.1.8
+Requires-Dist: primp>=0.15.0
Requires-Dist: lxml>=5.3.0
Provides-Extra: dev
-Requires-Dist: mypy>=1.13.0; extra == "dev"
+Requires-Dist: mypy>=1.14.1; extra == "dev"
Requires-Dist: pytest>=8.3.4; extra == "dev"
Requires-Dist: pytest-dependency>=0.6.0; extra == "dev"
-Requires-Dist: ruff>=0.8.3; extra == "dev"
+Requires-Dist: ruff>=0.9.2; extra == "dev"
+Dynamic: license-file
- [](https://github.com/deedy5/duckduckgo_search/releases) [](https://pypi.org/project/duckduckgo-search) [](https://pepy.tech/project/duckduckgo-search) [](https://pepy.tech/project/duckduckgo-search)
+ [](https://github.com/deedy5/duckduckgo_search/releases) [](https://pypi.org/project/duckduckgo-search)
# Duckduckgo_search<a name="TOP"></a>
-AI chat and search for text, news, images and videos using the DuckDuckGo.com search engine.
+Search for text, news, images and videos using the DuckDuckGo.com search engine.
+
+:bangbang: AI chat moved to [duckai](https://pypi.org/project/duckai) package
## Table of Contents
* [Install](#install)
@@ -45,11 +47,10 @@
* [DDGS class](#ddgs-class)
* [Proxy](#proxy)
* [Exceptions](#exceptions)
-* [1. chat() - AI chat](#1-chat---ai-chat)
-* [2. text() - text search](#2-text---text-search-by-duckduckgocom)
-* [3. images() - image search](#3-images---image-search-by-duckduckgocom)
-* [4. videos() - video search](#4-videos---video-search-by-duckduckgocom)
-* [5. news() - news search](#5-news---news-search-by-duckduckgocom)
+* [1. text() - text search](#2-text---text-search-by-duckduckgocom)
+* [2. images() - image search](#3-images---image-search-by-duckduckgocom)
+* [3. videos() - video search](#4-videos---video-search-by-duckduckgocom)
+* [4. news() - news search](#5-news---news-search-by-duckduckgocom)
* [Disclaimer](#disclaimer)
## Install
@@ -64,8 +65,6 @@
```
CLI examples:
```python3
-# AI chat
-ddgs chat
# text search
ddgs text -k "Assyrian siege of Jerusalem"
# find and download pdf files via proxy
@@ -227,38 +226,24 @@
## Exceptions
+```python
+from duckduckgo_search.exceptions import (
+ ConversationLimitException,
+ DuckDuckGoSearchException,
+ RatelimitException,
+ TimeoutException,
+)
+```
+
Exceptions:
- `DuckDuckGoSearchException`: Base exception for duckduckgo_search errors.
- `RatelimitException`: Inherits from DuckDuckGoSearchException, raised for exceeding API request rate limits.
- `TimeoutException`: Inherits from DuckDuckGoSearchException, raised for API request timeouts.
-
-
-[Go To TOP](#TOP)
-
-## 1. chat() - AI chat
-
-```python
-def chat(self, keywords: str, model: str = "gpt-4o-mini", timeout: int = 30) -> str:
- """Initiates a chat session with DuckDuckGo AI.
-
- Args:
- keywords (str): The initial message or question to send to the AI.
- model (str): The model to use: "gpt-4o-mini", "claude-3-haiku", "llama-3.1-70b", "mixtral-8x7b".
- Defaults to "gpt-4o-mini".
- timeout (int): Timeout value for the HTTP client. Defaults to 30.
-
- Returns:
- str: The response from the AI.
- """
-```
-***Example***
-```python
-results = DDGS().chat("summarize Daniel Defoe's The Consolidator", model='claude-3-haiku')
-```
+- `ConversationLimitException`: Inherits from DuckDuckGoSearchException, raised for conversation limit during API requests to AI endpoint.
[Go To TOP](#TOP)
-## 2. text() - text search by duckduckgo.com
+## 1. text() - text search by duckduckgo.com
```python
def text(
@@ -276,12 +261,10 @@
region: wt-wt, us-en, uk-en, ru-ru, etc. Defaults to "wt-wt".
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m, y. Defaults to None.
- backend: auto, api, html, lite. Defaults to auto.
+ backend: auto, html, lite. Defaults to auto.
auto - try all backends in random order,
- api - collect data from https://duckduckgo.com,
html - collect data from https://html.duckduckgo.com,
- lite - collect data from https://lite.duckduckgo.com,
- ecosia - collect data from https://www.ecosia.com.
+ lite - collect data from https://lite.duckduckgo.com.
max_results: max number of results. If None, returns results only from the first response. Defaults to None.
Returns:
@@ -305,7 +288,7 @@
[Go To TOP](#TOP)
-## 3. images() - image search by duckduckgo.com
+## 2. images() - image search by duckduckgo.com
```python
def images(
@@ -372,7 +355,7 @@
[Go To TOP](#TOP)
-## 4. videos() - video search by duckduckgo.com
+## 3. videos() - video search by duckduckgo.com
```python
def videos(
@@ -439,7 +422,7 @@
[Go To TOP](#TOP)
-## 5. news() - news search by duckduckgo.com
+## 4. news() - news search by duckduckgo.com
```python
def news(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/duckduckgo_search.egg-info/requires.txt new/duckduckgo_search-8.0.1/duckduckgo_search.egg-info/requires.txt
--- old/duckduckgo_search-7.1.1/duckduckgo_search.egg-info/requires.txt 2024-12-27 00:22:58.000000000 +0100
+++ new/duckduckgo_search-8.0.1/duckduckgo_search.egg-info/requires.txt 2025-04-17 14:37:28.000000000 +0200
@@ -1,9 +1,9 @@
-click>=8.1.7
-primp>=0.9.2
+click>=8.1.8
+primp>=0.15.0
lxml>=5.3.0
[dev]
-mypy>=1.13.0
+mypy>=1.14.1
pytest>=8.3.4
pytest-dependency>=0.6.0
-ruff>=0.8.3
+ruff>=0.9.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/pyproject.toml new/duckduckgo_search-8.0.1/pyproject.toml
--- old/duckduckgo_search-7.1.1/pyproject.toml 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/pyproject.toml 2025-04-17 14:37:17.000000000 +0200
@@ -6,7 +6,7 @@
name = "duckduckgo_search"
description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine."
readme = "README.md"
-requires-python = ">=3.8"
+requires-python = ">=3.9"
license = {text = "MIT License"}
keywords = ["python", "duckduckgo"]
authors = [
@@ -18,7 +18,6 @@
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
- "Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
@@ -29,8 +28,8 @@
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
- "click>=8.1.7",
- "primp>=0.9.2",
+ "click>=8.1.8",
+ "primp>=0.15.0",
"lxml>=5.3.0",
]
dynamic = ["version"]
@@ -46,10 +45,10 @@
[project.optional-dependencies]
dev = [
- "mypy>=1.13.0",
+ "mypy>=1.14.1",
"pytest>=8.3.4",
"pytest-dependency>=0.6.0",
- "ruff>=0.8.3",
+ "ruff>=0.9.2",
]
[tool.ruff]
@@ -67,6 +66,6 @@
]
[tool.mypy]
-python_version = "3.8"
+python_version = "3.9"
strict = true
-exclude = ['cli\.py$', '__main__\.py$', "tests/", "build/"]
+exclude = ["build/"]
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/tests/test_cli.py new/duckduckgo_search-8.0.1/tests/test_cli.py
--- old/duckduckgo_search-7.1.1/tests/test_cli.py 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/tests/test_cli.py 2025-04-17 14:37:17.000000000 +0200
@@ -1,7 +1,10 @@
+from __future__ import annotations
+
import os
import pathlib
import shutil
import time
+from pathlib import Path
import pytest
from click.testing import CliRunner
@@ -10,76 +13,71 @@
from duckduckgo_search.cli import _download_results, _save_csv, _save_json, cli
runner = CliRunner()
-TEXT_RESULTS = None
-IMAGES_RESULTS = None
+TEXT_RESULTS = []
+IMAGES_RESULTS = []
@pytest.fixture(autouse=True)
-def pause_between_tests():
- time.sleep(1)
+def pause_between_tests() -> None:
+ time.sleep(2)
-def test_version_command():
+def test_version_command() -> None:
result = runner.invoke(cli, ["version"])
assert result.output.strip() == __version__
-def test_chat_command():
- result = runner.invoke(cli, ["chat"])
- assert "chat" in result.output
-
-
-def test_text_command():
+def test_text_command() -> None:
result = runner.invoke(cli, ["text", "-k", "python"])
assert "title" in result.output
-def test_images_command():
+def test_images_command() -> None:
result = runner.invoke(cli, ["images", "-k", "cat"])
assert "title" in result.output
-def test_news_command():
+def test_news_command() -> None:
result = runner.invoke(cli, ["news", "-k", "usa"])
assert "title" in result.output
-def test_videos_command():
+def test_videos_command() -> None:
result = runner.invoke(cli, ["videos", "-k", "dog"])
assert "title" in result.output
@pytest.mark.dependency()
-def test_get_text():
+def test_get_text() -> None:
global TEXT_RESULTS
TEXT_RESULTS = DDGS().text("test")
assert TEXT_RESULTS
@pytest.mark.dependency()
-def test_get_images():
+def test_get_images() -> None:
global IMAGES_RESULTS
IMAGES_RESULTS = DDGS().images("test")
assert IMAGES_RESULTS
-(a)pytest.mark.dependency(depends=["test_get_data"])
-def test_save_csv(tmp_path):
+(a)pytest.mark.dependency(depends=["test_get_text"])
+def test_save_csv(tmp_path: Path) -> None:
temp_file = tmp_path / "test_csv.csv"
- _save_csv(temp_file, RESULTS)
+ _save_csv(temp_file, TEXT_RESULTS)
assert temp_file.exists()
-(a)pytest.mark.dependency(depends=["test_get_data"])
-def test_save_json(tmp_path):
+(a)pytest.mark.dependency(depends=["test_get_text"])
+def test_save_json(tmp_path: Path) -> None:
temp_file = tmp_path / "test_json.json"
- _save_json(temp_file, RESULTS)
+ _save_json(temp_file, TEXT_RESULTS)
assert temp_file.exists()
-(a)pytest.mark.dependency(depends=["test_get_data"])
-def test_text_download():
+(a)pytest.mark.dependency(depends=["test_get_text"])
+def test_text_download() -> None:
pathname = pathlib.Path("text_downloads")
- _download_results(test_text_download, TEXT_RESULTS, function_name="text", pathname=str(pathname))
+ _download_results(f"{test_text_download}", TEXT_RESULTS, function_name="text", pathname=str(pathname))
assert pathname.is_dir() and pathname.iterdir()
for file in pathname.iterdir():
assert file.is_file()
@@ -87,9 +85,9 @@
@pytest.mark.dependency(depends=["test_get_images"])
-def test_images_download():
+def test_images_download() -> None:
pathname = pathlib.Path("images_downloads")
- _download_results(test_images_download, IMAGES_RESULTS, function_name="images", pathname=str(pathname))
+ _download_results(f"{test_images_download}", IMAGES_RESULTS, function_name="images", pathname=str(pathname))
assert pathname.is_dir() and pathname.iterdir()
for file in pathname.iterdir():
assert file.is_file()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duckduckgo_search-7.1.1/tests/test_duckduckgo_search.py new/duckduckgo_search-8.0.1/tests/test_duckduckgo_search.py
--- old/duckduckgo_search-7.1.1/tests/test_duckduckgo_search.py 2024-12-27 00:22:48.000000000 +0100
+++ new/duckduckgo_search-8.0.1/tests/test_duckduckgo_search.py 2025-04-17 14:37:17.000000000 +0200
@@ -5,47 +5,36 @@
@pytest.fixture(autouse=True)
-def pause_between_tests():
- time.sleep(1)
+def pause_between_tests() -> None:
+ time.sleep(2)
-def test_context_manager():
+def test_context_manager() -> None:
with DDGS() as ddgs:
results = ddgs.news("cars", max_results=30)
assert 20 <= len(results) <= 30
-(a)pytest.mark.parametrize("model", ["gpt-4o-mini", "claude-3-haiku", "llama-3.1-70b", "mixtral-8x7b"])
-def test_chat(model):
- results = DDGS().chat("cat", model=model)
- assert len(results) >= 1
-
-
-def test_text_html():
+def test_text_html() -> None:
results = DDGS().text("eagle", backend="html", region="br-pt", timelimit="y", max_results=20)
assert 15 <= len(results) <= 20
-def test_text_lite():
+def test_text_lite() -> None:
results = DDGS().text("dog", backend="lite", region="br-pt", timelimit="y", max_results=20)
assert 15 <= len(results) <= 20
-def test_text_ecosia():
- results = DDGS().text("cat", backend="ecosia", region="br-pt", safesearch="off", max_results=20)
- assert 15 <= len(results) <= 20
-
-
-def test_images():
+def test_images() -> None:
results = DDGS().images("flower", max_results=200)
assert 85 <= len(results) <= 200
-def test_videos():
+def test_videos() -> None:
results = DDGS().videos("sea", max_results=40)
assert 30 <= len(results) <= 40
-def test_news():
+def test_news() -> None:
results = DDGS().news("tesla", max_results=30)
assert 20 <= len(results) <= 30
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package goreleaser for openSUSE:Factory checked in at 2025-04-30 19:05:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/goreleaser (Old)
and /work/SRC/openSUSE:Factory/.goreleaser.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "goreleaser"
Wed Apr 30 19:05:35 2025 rev:5 rq:1273639 version:2.9.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/goreleaser/goreleaser.changes 2025-04-05 13:44:38.946752827 +0200
+++ /work/SRC/openSUSE:Factory/.goreleaser.new.30101/goreleaser.changes 2025-04-30 19:05:40.629564866 +0200
@@ -1,0 +2,59 @@
+Wed Apr 30 06:10:18 UTC 2025 - Felix Niederwanger <felix.niederwanger(a)suse.de>
+
+- Update to version 2.9.0:
+ * chore: auto-update generated files
+ * chore: auto-update generated files
+ * docs: v2.9 release (#5744)
+ * docs: update
+ * feat: add checksum template function (#5743)
+ * chore: revert acidental commit
+ * chore: typo
+ * docs: improve choco help
+ * fix(brew): improve if hardware structures (#5741)
+ * docs: fix typo
+ * feat: poetry builder (#5734)
+ * chore(deps): bump astral-sh/setup-uv from 5 to 6 (#5739)
+ * chore(deps): bump anchore/sbom-action from 0.18.0 to 0.19.0 (#5738)
+ * chore(deps): bump gitlab.com/gitlab-org/api/client-go from 0.127.0 to 0.128.0 (#5737)
+ * chore(deps): bump github/codeql-action from 3.28.15 to 3.28.16 (#5735)
+ * docs: fix npm docs
+ * chore(deps): bump sigstore/cosign-installer from 3.8.1 to 3.8.2 (#5732)
+ * chore(deps): update
+ * ci: remove gitleaks configuration
+ * docs: update
+ * chore(deps): bump mkdocs-material from 9.6.11 to 9.6.12 in /www (#5727)
+ * test: update golden files
+ * feat(winget): Add additional template values (#5714)
+ * chore(deps): bump stefanzweifel/git-auto-commit-action from 5.1.0 to 5.2.0 (#5729)
+ * fix: increase default timeout (#5726)
+ * fix: group by platform should consider abi if available (#5723)
+ * chore(deps): bump codecov/codecov-action from 5.4.0 to 5.4.2 (#5724)
+ * fix: small lint issue
+ * fix: upx properly handle skips (#5720)
+ * fix: upx.Binary not being respected
+ * fix: upx dependencies
+ * test: improve artifact type tests
+ * docs: update
+ * chore: lint
+ * feat: uv builder (#5652)
+ * fix(aur): panic if both aur and aur_sources configured (#5717)
+ * fix: sbom jsonschema
+ * feat: allow passing sbomDir to KO (#5688)
+ * feat: warn about repeated uploadable artifact names (#5713)
+ * chore(deps): update go-github
+ * docs: fix
+ * docs: build and GOMAXPROCS
+ * docs: document accepted config filename variants (#5693)
+ * chore(deps): bump gocloud.dev from 0.40.0 to 0.41.0 (#5709)
+ * chore(deps): bump golang.org/x/tools from 0.31.0 to 0.32.0 (#5711)
+ * chore(deps): bump github/codeql-action from 3.28.13 to 3.28.15 (#5710)
+ * chore(deps): bump golang.org/x/sync from 0.12.0 to 0.13.0 (#5705)
+ * chore(deps): bump github.com/jarcoal/httpmock from 1.3.1 to 1.4.0 (#5707)
+ * chore(deps): bump golang.org/x/oauth2 from 0.28.0 to 0.29.0 (#5704)
+ * chore(deps): bump golang from 1.24.1-alpine to 1.24.2-alpine (#5703)
+ * chore(deps): bump code.gitea.io/sdk/gitea from 0.20.0 to 0.21.0 (#5700)
+ * chore(deps): bump github.com/ory/dockertest/v3 from 3.11.0 to 3.12.0 (#5694)
+ * chore(deps): bump gitlab.com/gitlab-org/api/client-go from 0.126.0 to 0.127.0 (#5695)
+ * chore(deps): bump github.com/distribution/distribution/v3 from 3.0.0-rc.4 to 3.0.0 (#5696)
+
+-------------------------------------------------------------------
Old:
----
goreleaser-2.8.2.obscpio
New:
----
goreleaser-2.9.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ goreleaser.spec ++++++
--- /var/tmp/diff_new_pack.gzjcxw/_old 2025-04-30 19:05:41.509601561 +0200
+++ /var/tmp/diff_new_pack.gzjcxw/_new 2025-04-30 19:05:41.513601728 +0200
@@ -17,7 +17,7 @@
Name: goreleaser
-Version: 2.8.2
+Version: 2.9.0
Release: 0
Summary: CLI tool for release engineering in Go, Rust, Zig and TypeScript
License: MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.gzjcxw/_old 2025-04-30 19:05:41.565603896 +0200
+++ /var/tmp/diff_new_pack.gzjcxw/_new 2025-04-30 19:05:41.569604063 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/goreleaser/goreleaser.git</param>
<param name="scm">git</param>
<param name="revision">main</param>
- <param name="version">v2.8.2</param>
+ <param name="version">v2.9.0</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="changesgenerate">enable</param>
</service>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.gzjcxw/_old 2025-04-30 19:05:41.585604730 +0200
+++ /var/tmp/diff_new_pack.gzjcxw/_new 2025-04-30 19:05:41.589604897 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/goreleaser/goreleaser.git</param>
- <param name="changesrevision">ef10a7839c32673f16ed9455c02b1668a1fd9632</param></service></servicedata>
+ <param name="changesrevision">f55f84c779171a9bd7bffe11bbf6df5df82fe9f6</param></service></servicedata>
(No newline at EOF)
++++++ goreleaser-2.8.2.obscpio -> goreleaser-2.9.0.obscpio ++++++
++++ 5258 lines of diff (skipped)
++++++ goreleaser.obsinfo ++++++
--- /var/tmp/diff_new_pack.gzjcxw/_old 2025-04-30 19:05:42.053624245 +0200
+++ /var/tmp/diff_new_pack.gzjcxw/_new 2025-04-30 19:05:42.061624580 +0200
@@ -1,5 +1,5 @@
name: goreleaser
-version: 2.8.2
-mtime: 1743511631
-commit: ef10a7839c32673f16ed9455c02b1668a1fd9632
+version: 2.9.0
+mtime: 1745978355
+commit: f55f84c779171a9bd7bffe11bbf6df5df82fe9f6
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/goreleaser/vendor.tar.gz /work/SRC/openSUSE:Factory/.goreleaser.new.30101/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libtracecmd for openSUSE:Factory checked in at 2025-04-30 19:05:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libtracecmd (Old)
and /work/SRC/openSUSE:Factory/.libtracecmd.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libtracecmd"
Wed Apr 30 19:05:31 2025 rev:9 rq:1273617 version:1.5.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/libtracecmd/libtracecmd.changes 2024-11-12 19:25:10.388884568 +0100
+++ /work/SRC/openSUSE:Factory/.libtracecmd.new.30101/libtracecmd.changes 2025-04-30 19:05:37.877450110 +0200
@@ -1,0 +2,11 @@
+Tue Apr 29 12:11:08 UTC 2025 - Petr Pavlu <petr.pavlu(a)suse.com>
+
+- Update to 1.5.3:
+ * Fix error message of size mismatch
+ * Add more error checks
+ * Fix several memory leaks
+ * Check length of agent version number in protocol
+ * Rename private hidden functions to start with "tcmd_"
+ * Fix agent protocol when there's a failure
+
+-------------------------------------------------------------------
Old:
----
trace-cmd-libtracecmd-1.5.2.tar.gz
New:
----
trace-cmd-libtracecmd-1.5.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libtracecmd.spec ++++++
--- /var/tmp/diff_new_pack.Qr0NV0/_old 2025-04-30 19:05:38.361470292 +0200
+++ /var/tmp/diff_new_pack.Qr0NV0/_new 2025-04-30 19:05:38.365470458 +0200
@@ -1,7 +1,7 @@
#
# spec file for package libtracecmd
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
Name: libtracecmd
%define lname libtracecmd1
-Version: 1.5.2
+Version: 1.5.3
Release: 0
Summary: Library for creating and reading trace-cmd data files
License: LGPL-2.1-only
++++++ trace-cmd-libtracecmd-1.5.2.tar.gz -> trace-cmd-libtracecmd-1.5.3.tar.gz ++++++
++++ 4855 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package stackit-cli for openSUSE:Factory checked in at 2025-04-30 19:05:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/stackit-cli (Old)
and /work/SRC/openSUSE:Factory/.stackit-cli.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "stackit-cli"
Wed Apr 30 19:05:27 2025 rev:5 rq:1273624 version:0.31.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/stackit-cli/stackit-cli.changes 2025-04-08 17:53:08.015281234 +0200
+++ /work/SRC/openSUSE:Factory/.stackit-cli.new.30101/stackit-cli.changes 2025-04-30 19:05:35.333344027 +0200
@@ -1,0 +2,26 @@
+Wed Apr 30 08:41:22 UTC 2025 - Johannes Kastl <opensuse_buildservice(a)ojkastl.de>
+
+- Update to version 0.31.0:
+ * docs: sort available services (#711)
+ * chore(deps): update samuelmeuli/action-snapcraft action to v3
+ (#710)
+ * Fix: Exit less if an interrupt character is typed (#704)
+ * chore(deps): bump renovatebot/github-action from 41.0.5 to
+ 41.0.21 (#705)
+ * feat(github): enable dependabot for golang and gh actions
+ (#703)
+ * fix(deps): update module
+ github.com/stackitcloud/stackit-sdk-go/services/observability
+ to v0.5.0 (#701)
+ * Feat/stackitcli 134 onboading alb service (#697)
+ * fix(deps): update module
+ github.com/stackitcloud/stackit-sdk-go/core to v0.17.1 (#699)
+ * fix(image): Uefi flag cannot be set to false (#698)
+ * feat: add completion to homebrew installation (#692)
+ * fix(deps): update module golang.org/x/term to v0.31.0 (#689)
+ * feat(network-interface): Extend list output to contain device
+ and ipv4 (#695)
+ * feat(ci): close stale PRs automatically (#693)
+ * chore(doc): add documentation of release process (#687)
+
+-------------------------------------------------------------------
Old:
----
stackit-cli-0.30.0.obscpio
New:
----
stackit-cli-0.31.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ stackit-cli.spec ++++++
--- /var/tmp/diff_new_pack.obWaLU/_old 2025-04-30 19:05:35.977370882 +0200
+++ /var/tmp/diff_new_pack.obWaLU/_new 2025-04-30 19:05:35.981371048 +0200
@@ -19,7 +19,7 @@
%define executable_name stackit
Name: stackit-cli
-Version: 0.30.0
+Version: 0.31.0
Release: 0
Summary: A command-line interface to manage STACKIT resources
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.obWaLU/_old 2025-04-30 19:05:36.013372382 +0200
+++ /var/tmp/diff_new_pack.obWaLU/_new 2025-04-30 19:05:36.017372550 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/stackitcloud/stackit-cli/</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.30.0</param>
+ <param name="revision">v0.31.0</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="changesgenerate">enable</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.obWaLU/_old 2025-04-30 19:05:36.037373384 +0200
+++ /var/tmp/diff_new_pack.obWaLU/_new 2025-04-30 19:05:36.041373550 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/stackitcloud/stackit-cli/</param>
- <param name="changesrevision">5dcca3b726d58da53964764ecf692ba3f0c2f422</param></service></servicedata>
+ <param name="changesrevision">c9b85815a84984df44a7680ff2e5247cce2fc8db</param></service></servicedata>
(No newline at EOF)
++++++ stackit-cli-0.30.0.obscpio -> stackit-cli-0.31.0.obscpio ++++++
++++ 7156 lines of diff (skipped)
++++++ stackit-cli.obsinfo ++++++
--- /var/tmp/diff_new_pack.obWaLU/_old 2025-04-30 19:05:36.569395567 +0200
+++ /var/tmp/diff_new_pack.obWaLU/_new 2025-04-30 19:05:36.569395567 +0200
@@ -1,5 +1,5 @@
name: stackit-cli
-version: 0.30.0
-mtime: 1744034696
-commit: 5dcca3b726d58da53964764ecf692ba3f0c2f422
+version: 0.31.0
+mtime: 1745590909
+commit: c9b85815a84984df44a7680ff2e5247cce2fc8db
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/stackit-cli/vendor.tar.gz /work/SRC/openSUSE:Factory/.stackit-cli.new.30101/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package icingaweb2-module-director for openSUSE:Factory checked in at 2025-04-30 19:05:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/icingaweb2-module-director (Old)
and /work/SRC/openSUSE:Factory/.icingaweb2-module-director.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "icingaweb2-module-director"
Wed Apr 30 19:05:11 2025 rev:26 rq:1273586 version:1.11.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/icingaweb2-module-director/icingaweb2-module-director.changes 2025-03-26 21:25:48.748449850 +0100
+++ /work/SRC/openSUSE:Factory/.icingaweb2-module-director.new.30101/icingaweb2-module-director.changes 2025-04-30 19:05:20.100708864 +0200
@@ -1,0 +2,12 @@
+Wed Apr 30 06:58:16 UTC 2025 - ecsos <ecsos(a)opensuse.org>
+
+- Update to 1.11.5
+ * Database Schema
+ - FIX: Failed schema migration of MySQL to version 188 due Integrity constraint violation (#2970)
+ * Deployment
+ - FIX: Deprecation notice that sometimes appears on deployment form (no issue)
+ * Fixed Issues
+ - You can find issues and feature requests related to this release on our roadmap
+ https://github.com/Icinga/icingaweb2-module-director/milestone/40?closed=1
+
+-------------------------------------------------------------------
Old:
----
icingaweb2-module-director-1.11.4.tar.gz
New:
----
icingaweb2-module-director-1.11.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ icingaweb2-module-director.spec ++++++
--- /var/tmp/diff_new_pack.Sf0EE1/_old 2025-04-30 19:05:20.592729380 +0200
+++ /var/tmp/diff_new_pack.Sf0EE1/_new 2025-04-30 19:05:20.596729547 +0200
@@ -22,7 +22,7 @@
%define icingadirector_user icingadirector
Name: icingaweb2-module-director
-Version: 1.11.4
+Version: 1.11.5
Release: 0
Summary: Config module for Icinga Web 2
License: GPL-2.0-or-later
++++++ icingaweb2-module-director-1.11.4.tar.gz -> icingaweb2-module-director-1.11.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icingaweb2-module-director-1.11.4/application/forms/DeployFormsBug7530.php new/icingaweb2-module-director-1.11.5/application/forms/DeployFormsBug7530.php
--- old/icingaweb2-module-director-1.11.4/application/forms/DeployFormsBug7530.php 2025-03-26 11:24:49.000000000 +0100
+++ new/icingaweb2-module-director-1.11.5/application/forms/DeployFormsBug7530.php 2025-04-29 12:12:06.000000000 +0200
@@ -13,7 +13,7 @@
if (parent::hasBeenSubmitted()) {
return true;
} else {
- return \strlen($this->getSentValue('confirm_7530')) > 0;
+ return strlen($this->getSentValue('confirm_7530', '')) > 0;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icingaweb2-module-director-1.11.4/doc/02-Installation.md.d/From-Source.md new/icingaweb2-module-director-1.11.5/doc/02-Installation.md.d/From-Source.md
--- old/icingaweb2-module-director-1.11.4/doc/02-Installation.md.d/From-Source.md 2025-03-26 11:24:49.000000000 +0100
+++ new/icingaweb2-module-director-1.11.5/doc/02-Installation.md.d/From-Source.md 2025-04-29 12:12:06.000000000 +0200
@@ -41,7 +41,7 @@
You might want to use a script as follows for this task:
```shell
-MODULE_VERSION="1.11.4"
+MODULE_VERSION="1.11.5"
ICINGAWEB_MODULEPATH="/usr/share/icingaweb2/modules"
REPO_URL="https://github.com/icinga/icingaweb2-module-director"
TARGET_DIR="${ICINGAWEB_MODULEPATH}/director"
@@ -60,7 +60,7 @@
You might want to use a script as follows for this task:
```shell
-MODULE_VERSION="1.11.4"
+MODULE_VERSION="1.11.5"
ICINGAWEB_MODULEPATH="/usr/share/icingaweb2/modules"
REPO_URL="https://github.com/icinga/icingaweb2-module-director"
TARGET_DIR="${ICINGAWEB_MODULEPATH}/director"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icingaweb2-module-director-1.11.4/doc/82-Changelog.md new/icingaweb2-module-director-1.11.5/doc/82-Changelog.md
--- old/icingaweb2-module-director-1.11.4/doc/82-Changelog.md 2025-03-26 11:24:49.000000000 +0100
+++ new/icingaweb2-module-director-1.11.5/doc/82-Changelog.md 2025-04-29 12:12:06.000000000 +0200
@@ -4,6 +4,21 @@
Please make sure to always read our [Upgrading](05-Upgrading.md) documentation
before switching to a new version.
+v1.11.5
+-------
+
+## Database Schema
+
+- FIX: Failed schema migration of MySQL to version 188 due Integrity constraint violation ([#2970](https://github.com/Icinga/icingaweb2-module-director/issues/2970))
+
+## Deployment
+
+- Fix: Deprecation notice that sometimes appears on deployment form (no issue)
+
+### Fixed Issues
+
+You can find issues related to this release on our [roadmap](https://github.com/Icinga/icingaweb2-module-director/milestone/40?…
+
v1.11.4
-------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icingaweb2-module-director-1.11.4/module.info new/icingaweb2-module-director-1.11.5/module.info
--- old/icingaweb2-module-director-1.11.4/module.info 2025-03-26 11:24:49.000000000 +0100
+++ new/icingaweb2-module-director-1.11.5/module.info 2025-04-29 12:12:06.000000000 +0200
@@ -1,5 +1,5 @@
Name: Icinga Director
-Version: 1.11.4
+Version: 1.11.5
Depends: reactbundle (>=0.9.0), ipl (>=0.5.0), incubator (>=0.22.0)
Description: Director - Config tool for Icinga 2
Icinga Director is a configuration tool that has been designed to make
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icingaweb2-module-director-1.11.4/schema/mysql-migrations/upgrade_188.sql new/icingaweb2-module-director-1.11.5/schema/mysql-migrations/upgrade_188.sql
--- old/icingaweb2-module-director-1.11.4/schema/mysql-migrations/upgrade_188.sql 2025-03-26 11:24:49.000000000 +0100
+++ new/icingaweb2-module-director-1.11.5/schema/mysql-migrations/upgrade_188.sql 2025-04-29 12:12:06.000000000 +0200
@@ -1,12 +1,17 @@
+ALTER TABLE director_generated_config
+ DROP FOREIGN KEY director_generated_config_activity;
+
+# Delete all entries with duplicate checksum except the first entry
+DELETE log1 FROM director_activity_log log1
+ INNER JOIN director_activity_log log2 ON log1.checksum = log2.checksum
+ WHERE log1.id > log2.id;
+
ALTER TABLE director_activity_log
DROP INDEX checksum,
ADD UNIQUE INDEX checksum (checksum);
ALTER TABLE director_generated_config
-DROP FOREIGN KEY director_generated_config_activity;
-
-ALTER TABLE director_generated_config
-ADD CONSTRAINT director_generated_config_activity
+ ADD CONSTRAINT director_generated_config_activity
FOREIGN KEY (last_activity_checksum)
REFERENCES director_activity_log (checksum)
ON DELETE RESTRICT
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package img2pdf for openSUSE:Factory checked in at 2025-04-30 19:05:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/img2pdf (Old)
and /work/SRC/openSUSE:Factory/.img2pdf.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "img2pdf"
Wed Apr 30 19:05:10 2025 rev:5 rq:1273577 version:0.6.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/img2pdf/img2pdf.changes 2024-01-04 16:01:47.750159352 +0100
+++ /work/SRC/openSUSE:Factory/.img2pdf.new.30101/img2pdf.changes 2025-04-30 19:05:19.420680508 +0200
@@ -1,0 +2,10 @@
+Wed Apr 30 06:27:37 UTC 2025 - ecsos <ecsos(a)opensuse.org>
+
+- Update to 0.6.1
+ - testsuite fixes
+- Change from 0.6.0
+ - Add support for JBIG2 (generic coding)
+ - Add convert_to_docobject() broken out from convert()
+ - Add pil_get_dpi() broken out from get_imgmetadata()
+
+-------------------------------------------------------------------
Old:
----
img2pdf-0.5.1.tar.gz
New:
----
img2pdf-0.6.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ img2pdf.spec ++++++
--- /var/tmp/diff_new_pack.GVZSZv/_old 2025-04-30 19:05:19.864699023 +0200
+++ /var/tmp/diff_new_pack.GVZSZv/_new 2025-04-30 19:05:19.864699023 +0200
@@ -1,7 +1,7 @@
#
# spec file for package img2pdf
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: img2pdf
-Version: 0.5.1
+Version: 0.6.1
Release: 0
Summary: Python module for converting images to PDF via direct JPEG inclusion
License: LGPL-3.0-or-later
@@ -33,7 +33,7 @@
Requires: python-pikepdf
Requires: python-setuptools
Requires(post): update-alternatives
-Requires(postun):update-alternatives
+Requires(postun): update-alternatives
%if "%{python_flavor}" == "%{primary_python}"
Provides: img2pdf
%endif
++++++ img2pdf-0.5.1.tar.gz -> img2pdf-0.6.1.tar.gz ++++++
++++ 2199 lines of diff (skipped)
1
0