openSUSE Commits
Threads by month
- ----- 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
January 2024
- 1 participants
- 1743 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kicad for openSUSE:Factory checked in at 2024-01-03 12:28:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kicad (Old)
and /work/SRC/openSUSE:Factory/.kicad.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kicad"
Wed Jan 3 12:28:06 2024 rev:59 rq:1136019 version:7.0.10
Changes:
--------
--- /work/SRC/openSUSE:Factory/kicad/kicad.changes 2023-12-08 22:33:19.618811465 +0100
+++ /work/SRC/openSUSE:Factory/.kicad.new.28375/kicad.changes 2024-01-03 12:28:09.074409358 +0100
@@ -1,0 +2,6 @@
+Mon Jan 1 07:29:52 UTC 2024 - Stefan Brüns <stefan.bruens(a)rwth-aachen.de>
+
+- update to 7.0.10:
+ See https://www.kicad.org/blog/2023/12/KiCad-7.0.10-Release/ for details
+
+-------------------------------------------------------------------
Old:
----
kicad-7.0.9.tar.bz2
New:
----
kicad-7.0.10.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kicad.spec ++++++
--- /var/tmp/diff_new_pack.Eqc5fb/_old 2024-01-03 12:28:10.522462237 +0100
+++ /var/tmp/diff_new_pack.Eqc5fb/_new 2024-01-03 12:28:10.526462383 +0100
@@ -1,7 +1,7 @@
#
# spec file for package kicad
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,8 +20,8 @@
# symbol libraries from version 7.0.0
%define compatversion 7.0.0
Name: kicad
-Version: 7.0.9
-%define file_version 7.0.9
+Version: 7.0.10
+%define file_version 7.0.10
Release: 0
Summary: EDA software suite for the creation of schematics and PCB
License: AGPL-3.0-or-later AND GPL-3.0-or-later
@@ -38,6 +38,10 @@
BuildRequires: gcc11-PIE
BuildRequires: gcc11-c++ >= 8
%endif
+BuildConflicts: libicu65_1-ledata
+BuildConflicts: libicu-suse65_1
+# BuildConflicts: libwebkit2gtk-4_0-37
+
BuildRequires: gettext
BuildRequires: glm-devel >= 0.9.8
BuildRequires: libboost_filesystem-devel-impl
++++++ kicad-7.0.9.tar.bz2 -> kicad-7.0.10.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/kicad/kicad-7.0.9.tar.bz2 /work/SRC/openSUSE:Factory/.kicad.new.28375/kicad-7.0.10.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-python-socks for openSUSE:Factory checked in at 2024-01-03 12:28:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-socks (Old)
and /work/SRC/openSUSE:Factory/.python-python-socks.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-socks"
Wed Jan 3 12:28:03 2024 rev:6 rq:1136322 version:2.4.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-python-socks/python-python-socks.changes 2023-07-05 15:31:17.938829334 +0200
+++ /work/SRC/openSUSE:Factory/.python-python-socks.new.28375/python-python-socks.changes 2024-01-03 12:28:06.474314409 +0100
@@ -1,0 +2,14 @@
+Mon Jan 1 20:31:36 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2.4.4:
+ * Handle IndexError when loading socks5 reply
+ * Fix connection logic (api v2)
+ * Change empty reply error message (socks5)
+ * ConnectReply.loads: fix IndexError in case no data
+ * Redesign code base
+ * Remove obsolete protocol implementation
+ * Add Sans I/O based http proxy protocol implementation
+ * Add Sans I/O socks4 implementation
+ * Add simple Sans I/O based socks5 implementation
+
+-------------------------------------------------------------------
Old:
----
python-socks-2.1.1.tar.gz
New:
----
python-socks-2.4.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-socks.spec ++++++
--- /var/tmp/diff_new_pack.icHjbh/_old 2024-01-03 12:28:07.610355894 +0100
+++ /var/tmp/diff_new_pack.icHjbh/_new 2024-01-03 12:28:07.614356041 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-python-socks
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,13 +18,14 @@
%{?sle15_python_module_pythons}
Name: python-python-socks
-Version: 2.1.1
+Version: 2.4.4
Release: 0
Summary: Core proxy client functionality for Python
License: Apache-2.0
URL: https://github.com/romis2012/python-socks
Source: https://files.pythonhosted.org/packages/source/p/python-socks/python-socks-…
BuildRequires: %{python_module pip}
+BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
@@ -55,5 +56,5 @@
%doc README.md
%license LICENSE.txt
%{python_sitelib}/python_socks
-%{python_sitelib}/python_socks-%{version}*-info
+%{python_sitelib}/python_socks-%{version}.dist-info
++++++ python-socks-2.1.1.tar.gz -> python-socks-2.4.4.tar.gz ++++++
++++ 4923 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-python-crontab for openSUSE:Factory checked in at 2024-01-03 12:28:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-crontab (Old)
and /work/SRC/openSUSE:Factory/.python-python-crontab.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-crontab"
Wed Jan 3 12:28:00 2024 rev:8 rq:1136017 version:3.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-python-crontab/python-python-crontab.changes 2023-02-28 12:49:50.336904563 +0100
+++ /work/SRC/openSUSE:Factory/.python-python-crontab.new.28375/python-python-crontab.changes 2024-01-03 12:28:00.974113554 +0100
@@ -1,0 +2,10 @@
+Mon Jan 1 20:28:24 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 3.0.0:
+ * Add frequency checks at specific timestamp
+ * Fix lots of pylint errors and improve test coverage
+ * Improve schedule running with more information about what was
+ returned
+ * Cause an error when setting an invalid frequency
+
+-------------------------------------------------------------------
Old:
----
python-crontab-2.7.1.tar.gz
New:
----
python-crontab-3.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-crontab.spec ++++++
--- /var/tmp/diff_new_pack.q52vru/_old 2024-01-03 12:28:01.614136927 +0100
+++ /var/tmp/diff_new_pack.q52vru/_new 2024-01-03 12:28:01.614136927 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-python-crontab
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,15 +16,17 @@
#
+%{?sle15_python_module_pythons}
Name: python-python-crontab
-Version: 2.7.1
+Version: 3.0.0
Release: 0
Summary: Python Crontab API
License: LGPL-3.0-only
Group: Development/Languages/Python
URL: https://gitlab.com/doctormo/python-crontab/
Source: https://files.pythonhosted.org/packages/source/p/python-crontab/python-cron…
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module pip}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-python-dateutil
@@ -50,10 +52,10 @@
%setup -q -n python-crontab-%{version}
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
@@ -63,7 +65,8 @@
}
export PATH=$PWD/build/bin:$PATH
# test_07_non_posix_shell - only for Windows
-%pytest -k "not test_07_non_posix_shell"
+# test_20_frequency_at_year - broken test which fails in leap years
+%pytest -k "not test_07_non_posix_shell and not test_20_frequency_at_year"
%files %{python_files}
%doc README.rst
@@ -71,6 +74,6 @@
%{python_sitelib}/cronlog.py
%{python_sitelib}/crontab.py
%{python_sitelib}/crontabs.py
-%{python_sitelib}/python_crontab-%{version}*-info
+%{python_sitelib}/python_crontab-%{version}.dist-info
%pycache_only %{python_sitelib}/__pycache__
++++++ python-crontab-2.7.1.tar.gz -> python-crontab-3.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/PKG-INFO new/python-crontab-3.0.0/PKG-INFO
--- old/python-crontab-2.7.1/PKG-INFO 2022-12-22 05:48:55.191304000 +0100
+++ new/python-crontab-3.0.0/PKG-INFO 2023-07-13 16:53:01.829805600 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: python-crontab
-Version: 2.7.1
+Version: 3.0.0
Summary: Python Crontab API
Home-page: https://gitlab.com/doctormo/python-crontab/
Author: Martin Owens
@@ -26,8 +26,9 @@
Provides: crontab
Provides: crontabs
Provides: cronlog
-Provides-Extra: cron-description
+Description-Content-Type: text/x-rst
Provides-Extra: cron-schedule
+Provides-Extra: cron-description
License-File: COPYING
License-File: AUTHORS
@@ -345,7 +346,9 @@
tab = CronTab(tabfile='MyScripts.tab')
for result in tab.run_scheduler():
- print("This was printed to stdout by the process.")
+ print("Return code: {result.returncode}")
+ print("Standard Out: {result.stdout}")
+ print("Standard Err: {result.stderr}")
Do not do this, it won't work because it returns generator function::
@@ -361,15 +364,20 @@
Frequency Calculation
=====================
-
Every job's schedule has a frequency. We can attempt to calculate the number
-of times a job would execute in a give amount of time. We have three simple
-methods::
+of times a job would execute in a give amount of time. We have two variants
+`frequency_per_*` and `frequency_at_*` calculations. The `freqency_at_*`
+always returnes *times* a job would execute and is aware of leap years.
+
+
+`frequency_per_*`
+-----------------
+For `frequency_per_*` We have three simple methods::
job.setall("1,2 1,2 * * *")
job.frequency_per_day() == 4
-The per year frequency method will tell you how many days a year the
+The per year frequency method will tell you how many **days** a year the
job would execute::
job.setall("* * 1,2 1,2 *")
@@ -386,6 +394,43 @@
job > job2
job.slices == "*/5"
+
+`frequency_at_*`
+----------------
+For `frequency_at_*` We have four simple methods.
+
+The at per hour frequency method will tell you how many times the job would
+execute at a given hour::
+
+ job.setall("*/2 0 * * *")
+ job.frequency_at_hour() == 30
+ job.frequency_at_hour(year=2010, month=1, day=1, hour=0) == 30 # even hour
+ job.frequency_at_hour(year=2010, month=1, day=1, hour=1) == 0 # odd hour
+
+The at day frequency method parameterized tells you how many times the job
+would execute at a given day::
+
+ job.setall("0 0 * * 1,2")
+ job.frequency_at_day(year=2010, month=1, day=18) == 24 # Mon Jan 18th 2020
+ job.frequency_at_day(year=2010, month=1, day=21) == 0 # Thu Jan 21th 2020
+
+The at month frequency method will tell you how many times the job would
+execute at a given month::
+
+ job.setall("0 0 * * *")
+ job.frequency_at_month() == <output_of_current_month>
+ job.frequency_at_month(year=2010, month=1) == 31
+ job.frequency_at_month(year=2010, month=2) == 28
+ job.frequency_at_month(year=2012, month=2) == 29 # leap year
+
+The at year frequency method will tell you how many times a year the
+job would execute::
+
+ job.setall("* * 3,29 2 *")
+ job.frequency_at_year(year=2021) == 24
+ job.frequency_at_year(year=2024) == 48 # leap year
+
+
Log Functionality
=================
@@ -472,5 +517,3 @@
- Python 3 (3.7, 3.8, 3.10) tested, python 2.6, 2.7 removed from support.
- Windows support works for non-system crontabs only.
( see mem_cron and file_cron examples above for usage )
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/README.rst new/python-crontab-3.0.0/README.rst
--- old/python-crontab-2.7.1/README.rst 2022-12-22 05:32:19.000000000 +0100
+++ new/python-crontab-3.0.0/README.rst 2023-07-13 16:51:49.000000000 +0200
@@ -312,7 +312,9 @@
tab = CronTab(tabfile='MyScripts.tab')
for result in tab.run_scheduler():
- print("This was printed to stdout by the process.")
+ print("Return code: {result.returncode}")
+ print("Standard Out: {result.stdout}")
+ print("Standard Err: {result.stderr}")
Do not do this, it won't work because it returns generator function::
@@ -328,15 +330,20 @@
Frequency Calculation
=====================
-
Every job's schedule has a frequency. We can attempt to calculate the number
-of times a job would execute in a give amount of time. We have three simple
-methods::
+of times a job would execute in a give amount of time. We have two variants
+`frequency_per_*` and `frequency_at_*` calculations. The `freqency_at_*`
+always returnes *times* a job would execute and is aware of leap years.
+
+
+`frequency_per_*`
+-----------------
+For `frequency_per_*` We have three simple methods::
job.setall("1,2 1,2 * * *")
job.frequency_per_day() == 4
-The per year frequency method will tell you how many days a year the
+The per year frequency method will tell you how many **days** a year the
job would execute::
job.setall("* * 1,2 1,2 *")
@@ -353,6 +360,43 @@
job > job2
job.slices == "*/5"
+
+`frequency_at_*`
+----------------
+For `frequency_at_*` We have four simple methods.
+
+The at per hour frequency method will tell you how many times the job would
+execute at a given hour::
+
+ job.setall("*/2 0 * * *")
+ job.frequency_at_hour() == 30
+ job.frequency_at_hour(year=2010, month=1, day=1, hour=0) == 30 # even hour
+ job.frequency_at_hour(year=2010, month=1, day=1, hour=1) == 0 # odd hour
+
+The at day frequency method parameterized tells you how many times the job
+would execute at a given day::
+
+ job.setall("0 0 * * 1,2")
+ job.frequency_at_day(year=2010, month=1, day=18) == 24 # Mon Jan 18th 2020
+ job.frequency_at_day(year=2010, month=1, day=21) == 0 # Thu Jan 21th 2020
+
+The at month frequency method will tell you how many times the job would
+execute at a given month::
+
+ job.setall("0 0 * * *")
+ job.frequency_at_month() == <output_of_current_month>
+ job.frequency_at_month(year=2010, month=1) == 31
+ job.frequency_at_month(year=2010, month=2) == 28
+ job.frequency_at_month(year=2012, month=2) == 29 # leap year
+
+The at year frequency method will tell you how many times a year the
+job would execute::
+
+ job.setall("* * 3,29 2 *")
+ job.frequency_at_year(year=2021) == 24
+ job.frequency_at_year(year=2024) == 48 # leap year
+
+
Log Functionality
=================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/crontab.py new/python-crontab-3.0.0/crontab.py
--- old/python-crontab-2.7.1/crontab.py 2022-12-22 05:43:07.000000000 +0100
+++ new/python-crontab-3.0.0/crontab.py 2023-07-13 15:57:37.000000000 +0200
@@ -93,12 +93,13 @@
import platform
import subprocess as sp
+from calendar import monthrange
from time import sleep
from datetime import time, date, datetime, timedelta
from collections import OrderedDict
__pkgname__ = 'python-crontab'
-__version__ = '2.7.1'
+__version__ = '3.0.0'
ITEMREX = re.compile(r'^\s*([^@#\s]+)\s+([^@#\s]+)\s+([^@#\s]+)\s+([^@#\s]+)'
r'\s+([^@#\s]+)\s+([^\n]*?)(\s+#\s*([^\n]*)|$)')
@@ -158,22 +159,6 @@
"""Returns the username of the current user"""
return pwd.getpwuid(os.getuid())[0]
-def open_pipe(cmd, *args, **flags):
- """Runs a program and orders the arguments for compatability.
-
- a. keyword args are flags and always appear /before/ arguments for bsd
- """
- cmd_args = tuple(shlex.split(cmd, posix=flags.pop('posix', POSIX)))
- env = flags.pop('env', None)
- for (key, value) in flags.items():
- if len(key) == 1:
- cmd_args += (("-%s" % key),)
- if value is not None:
- cmd_args += (str(value),)
- else:
- cmd_args += (("--%s=%s" % (key, value)),)
- args = tuple(arg for arg in (cmd_args + tuple(args)) if arg)
- return sp.Popen(args, stdout=sp.PIPE, stderr=sp.PIPE, env=env)
def _str(text):
"""Convert to the best string format for this python version"""
@@ -182,6 +167,53 @@
return text
+class Process:
+ """Runs a program and orders the arguments for compatability.
+
+ a. keyword args are flags and always appear /before/ arguments for bsd
+ """
+ def __init__(self, cmd, *args, **flags):
+ cmd_args = tuple(shlex.split(cmd, posix=flags.pop('posix', POSIX)))
+ self.env = flags.pop('env', None)
+ for (key, value) in flags.items():
+ if len(key) == 1:
+ cmd_args += (f"-{key}",)
+ if value is not None:
+ cmd_args += (str(value),)
+ else:
+ cmd_args += (f"--{key}={value}",)
+ self.args = tuple(arg for arg in (cmd_args + tuple(args)) if arg)
+ self.has_run = False
+ self.stdout = None
+ self.stderr = None
+ self.returncode = None
+
+ def _run(self):
+ """Run this process and return the popen process object"""
+ return sp.Popen(self.args, stdout=sp.PIPE, stderr=sp.PIPE, env=self.env)
+
+ def run(self):
+ """Run this process and store whatever is returned"""
+ process = self._run()
+ (out, err) = process.communicate()
+ self.returncode = process.returncode
+ self.stdout = out.decode("utf-8")
+ self.stderr = err.decode("utf-8")
+ return self
+
+ def __str__(self):
+ return self.stdout.strip()
+
+ def __repr__(self):
+ return f"Process({self.args})"
+
+ def __int__(self):
+ return self.returncode
+
+ def __eq__(self, other):
+ return str(self) == other
+
+
class CronTab:
"""
Crontab object which can access any time based cron using the standard.
@@ -252,7 +284,7 @@
elif name == 'crons' and value:
raise AttributeError("You can NOT set crons attribute directly")
else:
- super(CronTab, self).__setattr__(name, value)
+ super().__setattr__(name, value)
def read(self, filename=None):
"""
@@ -273,12 +305,10 @@
lines = fhl.readlines()
elif self.user:
- (out, err) = open_pipe(self.cron_command, l='', **self.user_opt).communicate()
- if err and 'no crontab for' in str(err):
- pass
- elif err:
- raise IOError("Read crontab %s: %s" % (self.user, err))
- lines = out.decode('utf-8').split("\n")
+ process = Process(self.cron_command, l='', **self.user_opt).run()
+ if process.stderr and 'no crontab for' not in process.stderr:
+ raise IOError(f"Read crontab {self.user}: {process.stderr}")
+ lines = process.stdout.split("\n")
self.lines = lines
@@ -305,8 +335,8 @@
cron_id = self.crons.index(before)
line_id = self.lines.index(before)
- except ValueError:
- raise ValueError("Can not find CronItem in crontab to insert before")
+ except ValueError as err:
+ raise ValueError("Can not find CronItem in crontab to insert before") from err
if item.is_valid():
item.env.update(self._parked_env)
@@ -349,7 +379,7 @@
return
if self.filen:
- fileh = open(self.filen, 'wb')
+ fileh = open(self.filen, 'wb') # pylint: disable=consider-using-with
else:
filed, path = tempfile.mkstemp()
fileh = os.fdopen(filed, 'wb')
@@ -363,11 +393,11 @@
os.unlink(path)
raise IOError("Please specify user or filename to write.")
- proc = open_pipe(self.cron_command, path, **self.user_opt)
+ proc = Process(self.cron_command, path, **self.user_opt)._run()
ret = proc.wait()
if ret != 0:
- raise IOError("Program Error: {} returned {}: {}".format(
- self.cron_command, ret, proc.stderr.read()))
+ msg = proc.stderr.read()
+ raise IOError(f"Program Error: {self.cron_command} returned {ret}: {msg}")
proc.stdout.close()
proc.stderr.close()
os.unlink(path)
@@ -383,17 +413,17 @@
if ret not in [None, -1]:
yield ret
- def run_scheduler(self, timeout=-1, **kwargs):
+ def run_scheduler(self, timeout=-1, cadence=60, warp=False):
"""Run the CronTab as an internal scheduler (generator)"""
count = 0
while count != timeout:
now = datetime.now()
- if 'warp' in kwargs:
+ if warp:
now += timedelta(seconds=count * 60)
for value in self.run_pending(now=now):
yield value
- sleep(kwargs.get('cadence', 60))
+ sleep(cadence)
count += 1
def render(self, errors=False, specials=True):
@@ -413,7 +443,7 @@
elif not errors:
crons.append('# DISABLED LINE\n# ' + line)
else:
- raise ValueError("Invalid line: %s" % line)
+ raise ValueError(f"Invalid line: {line}")
elif isinstance(line, CronItem):
if not line.is_valid() and not errors:
line.enabled = False
@@ -421,12 +451,12 @@
# Environment variables are attached to cron lines so order will
# always work no matter how you add lines in the middle of the stack.
- result = str(self.env) + u'\n'.join(crons)
- if result and result[-1] not in (u'\n', u'\r'):
- result += u'\n'
+ result = str(self.env) + '\n'.join(crons)
+ if result and result[-1] not in ('\n', '\r'):
+ result += '\n'
return result
- def new(self, command='', comment='', user=None, pre_comment=False, before=None):
+ def new(self, command='', comment='', user=None, pre_comment=False, before=None): # pylint: disable=too-many-arguments
"""
Create a new CronItem and append it to the cron.
@@ -541,12 +571,12 @@
def __repr__(self):
kind = 'System ' if self._user is False else ''
if self.filen:
- return "<%sCronTab '%s'>" % (kind, self.filen)
+ return f"<{kind}CronTab '{self.filen}'>"
if self.user and not self.user_opt:
return "<My CronTab>"
if self.user:
- return "<User CronTab '%s'>" % self.user
- return "<Unattached %sCronTab>" % kind
+ return f"<User CronTab '{self.user}'>"
+ return f"<Unattached {kind}CronTab>"
def __iter__(self):
"""Return generator so we can track jobs after removal"""
@@ -695,23 +725,24 @@
if not self.is_valid() and self.enabled:
raise ValueError('Refusing to render invalid crontab.'
' Disable to continue.')
- command = _str(self.command).replace(u'%', u'\\%')
+ command = _str(self.command).replace('%', '\\%')
user = ''
if self.cron and self.cron.user is False:
if not self.user:
raise ValueError("Job to system-cron format, no user set!")
user = self.user + ' '
- result = u"%s %s%s" % (self.slices.render(specials=specials), user, command)
+ rend = self.slices.render(specials=specials)
+ result = f"{rend} {user}{command}"
if self.stdin:
result += ' %' + self.stdin.replace('\n', '%')
if not self.enabled:
- result = u"# " + result
+ result = "# " + result
if self.comment:
comment = self.comment = _str(self.comment)
if self.marker:
- comment = u"#%s: %s" % (self.marker, comment)
+ comment = f"#{self.marker}: {comment}"
else:
- comment = u"# " + comment
+ comment = "# " + comment
if SYSTEMV or self.pre_comment or self.stdin:
result = comment + "\n" + result
@@ -757,6 +788,34 @@
"""
return self.slices.frequency(year=year)
+ def frequency_at_hour(self, year=None, month=None, day=None, hour=None):
+ """Returns the number of times this item will execute in a given hour
+ (defaults to this hour)
+ """
+ return self.slices.frequency_at_hour(year=year, month=month, day=day, hour=hour)
+
+ def frequency_at_day(self, year=None, month=None, day=None):
+ """Returns the number of times this item will execute in a given day
+ (defaults to today)
+ """
+ return self.slices.frequency_at_day(year=year, month=month, day=day)
+
+ def frequency_at_month(self, year=None, month=None):
+ """Returns the number of times this item will execute in a given month
+ (defaults to this month)
+ """
+ return self.slices.frequency_at_month(year=year, month=month)
+
+ def frequency_at_year(self, year=None):
+ """Returns the number of times this item will execute in a given year
+ (defaults to this year)
+ """
+ return self.slices.frequency_at_year(year=year)
+
+ def frequency(self, year=None):
+ """Return frequence per year times frequency per day"""
+ return self.frequency_per_year(year=year) * self.frequency_per_day()
+
def frequency_per_year(self, year=None):
"""Returns the number of /days/ this item will execute on in a year
(defaults to this year)
@@ -789,10 +848,10 @@
env = os.environ.copy()
env.update(self.env.all())
shell = self.env.get('SHELL', SHELL)
- (out, err) = open_pipe(shell, '-c', self.command, env=env).communicate()
- if err:
- LOG.error(err.decode("utf-8"))
- return out.decode("utf-8").strip()
+ process = Process(shell, '-c', self.command, env=env).run()
+ if process.stderr:
+ LOG.error(process.stderr)
+ return process
def schedule(self, date_from=None):
"""Return a croniter schedule if available."""
@@ -801,9 +860,9 @@
try:
# Croniter is an optional import
from croniter.croniter import croniter # pylint: disable=import-outside-toplevel
- except ImportError:
+ except ImportError as err:
raise ImportError("Croniter not available. Please install croniter"
- " python module via pip or your package manager")
+ " python module via pip or your package manager") from err
return croniter(self.slices.clean_render(), date_from, ret_type=datetime)
def description(self, **kw):
@@ -814,9 +873,9 @@
"""
try:
from cron_descriptor import ExpressionDescriptor # pylint: disable=import-outside-toplevel
- except ImportError:
+ except ImportError as err:
raise ImportError("cron_descriptor not available. Please install"\
- "cron_descriptor python module via pip or your package manager")
+ "cron_descriptor python module via pip or your package manager") from err
exdesc = ExpressionDescriptor(self.slices.clean_render(), **kw)
return exdesc.get_description()
@@ -874,7 +933,7 @@
return self.slices[4]
def __repr__(self):
- return "<CronItem '%s'>" % str(self)
+ return f"<CronItem '{self}'>"
def __len__(self):
return len(str(self))
@@ -922,7 +981,7 @@
def year(self):
"""Special every year target"""
if self.unit > 1:
- raise ValueError("Invalid value '%s', outside 1 year" % self.unit)
+ raise ValueError(f"Invalid value '{self.unit}', outside 1 year")
self.slices.setall('@yearly')
@@ -932,7 +991,7 @@
month requency and finally day of the week frequency.
"""
def __init__(self, *args):
- super(CronSlices, self).__init__([CronSlice(info) for info in S_INFO])
+ super().__init__([CronSlice(info) for info in S_INFO])
self.special = None
self.setall(*args)
self.is_valid = self.is_self_valid
@@ -977,7 +1036,8 @@
# It might be possible to later understand timedelta objects
# but there's no convincing mathematics to do the conversion yet.
if not isinstance(value, (list, tuple)):
- raise ValueError("Unknown type: {}".format(type(value).__name__))
+ typ = type(value).__name__
+ raise ValueError(f"Unknown type: {typ}")
return value, None
@staticmethod
@@ -986,10 +1046,10 @@
key = value.lstrip('@').lower()
if value.count(' ') == 4:
return value.strip().split(' '), None
- if key in SPECIALS.keys():
+ if key in SPECIALS:
return SPECIALS[key].split(' '), '@' + key
if value.startswith('@'):
- raise ValueError("Unknown special '{}'".format(value))
+ raise ValueError(f"Unknown special '{value}'")
return [value], None
def clean_render(self):
@@ -1006,7 +1066,7 @@
if not SYSTEMV and specials is True:
for (name, value) in SPECIALS.items():
if value == slices and name not in SPECIAL_IGNORE:
- return "@%s" % name
+ return f"@{name}"
return slices
def clear(self):
@@ -1045,6 +1105,82 @@
"""Returns the number of times this item will execute in any hour"""
return len(self[0])
+ def frequency_at_year(self, year=None):
+ """Returns the number of /days/ this item will execute
+ in a given year (default is this year)"""
+ if not year:
+ year = date.today().year
+
+ total = 0
+ for month in range(1, 13):
+ total += self.frequency_at_month(year, month)
+ return total
+
+ def frequency_at_month(self, year=None, month=None):
+ """Returns the number of times this item will execute in given month
+ (default: current month)
+ """
+ if year is None and month is None:
+ year = date.today().year
+ month = date.today().month
+ elif year is None or month is None:
+ raise ValueError(
+ f"One of more arguments undefined: year={year}, month={month}")
+
+ total = 0
+ if month in self[3]:
+ # Calculate amount of days of specific month
+ days = monthrange(year, month)[1]
+ for day in range(1, days + 1):
+ total += self.frequency_at_day(year, month, day)
+ return total
+
+ def frequency_at_day(self, year=None, month=None, day=None):
+ """Returns the number of times this item will execute in a day
+ (default: any executed day)
+ """
+ # If arguments provided, all needs to be provided
+ test_none = [x is None for x in [year, month, day]]
+
+ if all(test_none):
+ return len(self[0]) * len(self[1])
+
+ if any(test_none):
+ raise ValueError(
+ f"One of more arguments undefined: year={year}, month={month}, day={day}")
+
+ total = 0
+ if day in self[2]:
+ for hour in range(24):
+ total += self.frequency_at_hour(year, month, day, hour)
+ return total
+
+ def frequency_at_hour(self, year=None, month=None, day=None, hour=None):
+ """Returns the number of times this item will execute in a hour
+ (default: any executed hour)
+ """
+ # If arguments provided, all needs to be provided
+ test_none = [x is None for x in [year, month, day, hour]]
+
+ if all(test_none):
+ return len(self[0])
+
+ if any(test_none):
+ raise ValueError(
+ f"One of more arguments undefined: year={year}, month={month}, day={day}, hour={hour}")
+
+ result = 0
+ weekday = date(year, month, day).weekday()
+
+ # Check if scheduled for execution at defined moment
+ if hour in self[1] and \
+ day in self[2] and \
+ month in self[3] and \
+ ((weekday + 1) % 7) in self[4]:
+ result = len(self[0])
+
+ return result
+
def __str__(self):
return self.render()
@@ -1098,7 +1234,7 @@
continue
self.parts.append(self.parse_value(part, sunday=0))
- def render(self, resolve=False, specials=True):
+ def render(self, resolve=False):
"""Return the slice rendered as a crontab.
resolve - return integer values instead of enums (default False)
@@ -1109,7 +1245,7 @@
return _render_values(self.parts, ',', resolve)
def __repr__(self):
- return "<CronSlice '%s'>" % str(self)
+ return f"<CronSlice '{self}'>"
def __eq__(self, value):
return str(self) == str(value)
@@ -1182,10 +1318,10 @@
val = self.min
try:
out = get_cronvalue(val, self.enum)
- except ValueError:
- raise ValueError("Unrecognised %s: '%s'" % (self.name, val))
- except KeyError:
- raise KeyError("No enumeration for %s: '%s'" % (self.name, val))
+ except ValueError as err:
+ raise ValueError(f"Unrecognised {self.name}: '{val}'") from err
+ except KeyError as err:
+ raise KeyError(f"No enumeration for {self.name}: '{val}'") from err
if self.max == 6 and int(out) == 7:
if sunday is not None:
@@ -1193,7 +1329,7 @@
raise SundayError("Detected Sunday as 7 instead of 0!")
if int(out) < self.min or int(out) > self.max:
- raise ValueError("'{1}', not in {0.min}-{0.max} for {0.name}".format(self, val))
+ raise ValueError(f"'{val}', not in {self.min}-{self.max} for {self.name}")
return out
@@ -1240,7 +1376,7 @@
return value.render(resolve)
if resolve:
return str(int(value))
- return str(u'{:02d}'.format(value) if ZERO_PAD else value)
+ return str(f'{value:02d}' if ZERO_PAD else value)
class CronRange:
@@ -1286,11 +1422,11 @@
self.dangling = 0
self.vto = self.slice.parse_value(vto, sunday=6)
if self.vto < self.vfrom:
- raise ValueError("Bad range '{0.vfrom}-{0.vto}'".format(self))
+ raise ValueError(f"Bad range '{self.vfrom}-{self.vto}'")
elif value == '*':
self.all()
else:
- raise ValueError('Unknown cron range value "%s"' % value)
+ raise ValueError(f'Unknown cron range value "{value}"')
def all(self):
"""Set this slice to all units between the miniumum and maximum"""
@@ -1306,7 +1442,7 @@
else:
value = _render_values([self.vfrom, self.vto], '-', resolve)
if self.seq != 1:
- value += "/%d" % self.seq
+ value += f"/{self.seq:d}"
if value != '*' and SYSTEMV:
value = ','.join([str(val) for val in self.range()])
return value
@@ -1344,7 +1480,7 @@
"""
def __init__(self, *args, **kw):
self.job = kw.pop('job', None)
- super(OrderedVariableList, self).__init__(*args, **kw)
+ super().__init__(*args, **kw)
@property
def previous(self):
@@ -1370,10 +1506,10 @@
def __getitem__(self, key):
previous = self.previous
if key in self:
- return super(OrderedVariableList, self).__getitem__(key)
+ return super().__getitem__(key)
if previous is not None:
return previous.all()[key]
- raise KeyError("Environment Variable '%s' not found." % key)
+ raise KeyError(f"Environment Variable '{key}' not found.")
def __str__(self):
"""Constructs to variable list output used in cron jobs"""
@@ -1383,7 +1519,7 @@
if self.previous.all().get(key, None) == value:
continue
if ' ' in str(value) or value == '':
- value = '"%s"' % value
- ret.append("%s=%s" % (key, str(value)))
+ value = f'"{value}"'
+ ret.append(f"{key}={value}")
ret.append('')
return "\n".join(ret)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/python_crontab.egg-info/PKG-INFO new/python-crontab-3.0.0/python_crontab.egg-info/PKG-INFO
--- old/python-crontab-2.7.1/python_crontab.egg-info/PKG-INFO 2022-12-22 05:48:55.000000000 +0100
+++ new/python-crontab-3.0.0/python_crontab.egg-info/PKG-INFO 2023-07-13 16:53:01.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: python-crontab
-Version: 2.7.1
+Version: 3.0.0
Summary: Python Crontab API
Home-page: https://gitlab.com/doctormo/python-crontab/
Author: Martin Owens
@@ -26,8 +26,9 @@
Provides: crontab
Provides: crontabs
Provides: cronlog
-Provides-Extra: cron-description
+Description-Content-Type: text/x-rst
Provides-Extra: cron-schedule
+Provides-Extra: cron-description
License-File: COPYING
License-File: AUTHORS
@@ -345,7 +346,9 @@
tab = CronTab(tabfile='MyScripts.tab')
for result in tab.run_scheduler():
- print("This was printed to stdout by the process.")
+ print("Return code: {result.returncode}")
+ print("Standard Out: {result.stdout}")
+ print("Standard Err: {result.stderr}")
Do not do this, it won't work because it returns generator function::
@@ -361,15 +364,20 @@
Frequency Calculation
=====================
-
Every job's schedule has a frequency. We can attempt to calculate the number
-of times a job would execute in a give amount of time. We have three simple
-methods::
+of times a job would execute in a give amount of time. We have two variants
+`frequency_per_*` and `frequency_at_*` calculations. The `freqency_at_*`
+always returnes *times* a job would execute and is aware of leap years.
+
+
+`frequency_per_*`
+-----------------
+For `frequency_per_*` We have three simple methods::
job.setall("1,2 1,2 * * *")
job.frequency_per_day() == 4
-The per year frequency method will tell you how many days a year the
+The per year frequency method will tell you how many **days** a year the
job would execute::
job.setall("* * 1,2 1,2 *")
@@ -386,6 +394,43 @@
job > job2
job.slices == "*/5"
+
+`frequency_at_*`
+----------------
+For `frequency_at_*` We have four simple methods.
+
+The at per hour frequency method will tell you how many times the job would
+execute at a given hour::
+
+ job.setall("*/2 0 * * *")
+ job.frequency_at_hour() == 30
+ job.frequency_at_hour(year=2010, month=1, day=1, hour=0) == 30 # even hour
+ job.frequency_at_hour(year=2010, month=1, day=1, hour=1) == 0 # odd hour
+
+The at day frequency method parameterized tells you how many times the job
+would execute at a given day::
+
+ job.setall("0 0 * * 1,2")
+ job.frequency_at_day(year=2010, month=1, day=18) == 24 # Mon Jan 18th 2020
+ job.frequency_at_day(year=2010, month=1, day=21) == 0 # Thu Jan 21th 2020
+
+The at month frequency method will tell you how many times the job would
+execute at a given month::
+
+ job.setall("0 0 * * *")
+ job.frequency_at_month() == <output_of_current_month>
+ job.frequency_at_month(year=2010, month=1) == 31
+ job.frequency_at_month(year=2010, month=2) == 28
+ job.frequency_at_month(year=2012, month=2) == 29 # leap year
+
+The at year frequency method will tell you how many times a year the
+job would execute::
+
+ job.setall("* * 3,29 2 *")
+ job.frequency_at_year(year=2021) == 24
+ job.frequency_at_year(year=2024) == 48 # leap year
+
+
Log Functionality
=================
@@ -472,5 +517,3 @@
- Python 3 (3.7, 3.8, 3.10) tested, python 2.6, 2.7 removed from support.
- Windows support works for non-system crontabs only.
( see mem_cron and file_cron examples above for usage )
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/setup.py new/python-crontab-3.0.0/setup.py
--- old/python-crontab-2.7.1/setup.py 2022-12-22 05:20:28.000000000 +0100
+++ new/python-crontab-3.0.0/setup.py 2023-07-13 16:52:41.000000000 +0200
@@ -40,6 +40,7 @@
release = RELEASE,
description = 'Python Crontab API',
long_description = description,
+ long_description_content_type = "text/x-rst",
author = 'Martin Owens',
url = 'https://gitlab.com/doctormo/python-crontab/',
author_email = 'doctormo(a)gmail.com',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/tests/test_compatibility.py new/python-crontab-3.0.0/tests/test_compatibility.py
--- old/python-crontab-2.7.1/tests/test_compatibility.py 2020-05-17 19:13:48.000000000 +0200
+++ new/python-crontab-3.0.0/tests/test_compatibility.py 2023-07-13 15:44:06.000000000 +0200
@@ -116,9 +116,9 @@
def test_07_non_posix_shell(self):
"""Shell in windows environments is split correctly"""
- from crontab import open_pipe
+ from crontab import Process
winfile = os.path.join(TEST_DIR, 'data', "bash\\win.exe")
- pipe = open_pipe("{sys.executable} {winfile}".format(winfile=winfile, sys=sys), 'SLASHED', posix=False)
+ pipe = Process("{sys.executable} {winfile}".format(winfile=winfile, sys=sys), 'SLASHED', posix=False)._run()
self.assertEqual(pipe.wait(), 0, 'Windows shell command not found!')
(out, err) = pipe.communicate()
self.assertEqual(out, b'Double Glazing Installed:SLASHED\n')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/tests/test_frequency.py new/python-crontab-3.0.0/tests/test_frequency.py
--- old/python-crontab-2.7.1/tests/test_frequency.py 2022-12-22 05:40:45.000000000 +0100
+++ new/python-crontab-3.0.0/tests/test_frequency.py 2022-12-31 20:51:32.000000000 +0100
@@ -153,6 +153,42 @@
job.setall("*/2 * * * *")
self.assertEqual(job.frequency_per_hour(), 30)
+ def test_17_frequency_at_hour(self):
+ """Frequency at hour at given moment"""
+ job = self.crontab.new(command='at_hour')
+ job.setall("*/2 10 * * *")
+ self.assertEqual(job.frequency_at_hour(2021, 7, 9, 10), 30)
+ self.assertEqual(job.frequency_at_hour(2021, 7, 9, 11), 0)
+ self.assertEqual(job.frequency_at_hour(), 30)
+ self.assertRaises(ValueError, job.frequency_at_hour, 2021)
+
+ def test_18_frequency_at_day(self):
+ """Frequency per day at given moment"""
+ job = self.crontab.new(command='at_day')
+ job.setall("2,4 7 9,14 * *")
+ self.assertEqual(job.frequency_at_day(2021, 7, 9), 2)
+ self.assertEqual(job.frequency_at_day(2021, 7, 10), 0)
+ self.assertEqual(job.frequency_at_day(), 2)
+ self.assertRaises(ValueError, job.frequency_at_day, 2021)
+
+ def test_19_frequency_at_month(self):
+ """Frequency per month at moment"""
+ job = self.crontab.new(command='at_month')
+ job.setall("2,4 9 7,14 10,11 *")
+ self.assertEqual(job.frequency_at_month(2021, 10), 4)
+ self.assertEqual(job.frequency_at_month(2021, 12), 0)
+ self.assertEqual(job.frequency_at_month(), 0)
+ self.assertRaises(ValueError, job.frequency_at_month, 2021)
+
+ def test_20_frequency_at_year(self):
+ """Frequency at leap year day"""
+ job = self.crontab.new(command='at_year')
+ job.setall("0 * 3,29 2 *")
+ self.assertEqual(job.frequency_at_year(2021), 24)
+ self.assertEqual(job.frequency_at_year(2024), 48)
+ self.assertEqual(job.frequency_at_year(), 24)
+
+
if __name__ == '__main__':
test_support.run_unittest(
FrequencyTestCase,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-crontab-2.7.1/tests/test_usage.py new/python-crontab-3.0.0/tests/test_usage.py
--- old/python-crontab-2.7.1/tests/test_usage.py 2022-12-22 05:45:50.000000000 +0100
+++ new/python-crontab-3.0.0/tests/test_usage.py 2023-07-13 16:00:42.000000000 +0200
@@ -210,13 +210,14 @@
self.assertEqual(cronitem.render(specials=None), '@daily true')
self.assertEqual(cronitem.render(specials=False), '0 0 * * * true')
- def test_25_open_pipe(self):
+ def test_25_process(self):
"""Test opening pipes"""
- from crontab import open_pipe, CRON_COMMAND
- pipe = open_pipe(CRON_COMMAND, h=None, a='one', abc='two')
- (out, err) = pipe.communicate()
- self.assertEqual(err, b'')
- self.assertEqual(out, b'--abc=two|-a|-h|one\n')
+ from crontab import Process, CRON_COMMAND
+ process = Process(CRON_COMMAND, h=None, a='one', abc='two').run()
+ self.assertEqual(int(process), 0)
+ self.assertEqual(repr(process)[:8], "Process(")
+ self.assertEqual(process.stderr, '')
+ self.assertEqual(process.stdout, '--abc=two|-a|-h|one\n')
def test_07_zero_padding(self):
"""Can we get zero padded output"""
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pyeapi for openSUSE:Factory checked in at 2024-01-03 12:27:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyeapi (Old)
and /work/SRC/openSUSE:Factory/.python-pyeapi.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyeapi"
Wed Jan 3 12:27:58 2024 rev:6 rq:1136014 version:1.0.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyeapi/python-pyeapi.changes 2022-04-06 21:52:51.974625819 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyeapi.new.28375/python-pyeapi.changes 2024-01-03 12:27:59.798070608 +0100
@@ -1,0 +2,15 @@
+Mon Jan 1 20:15:51 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 1.0.2:
+ * Fixed all system tests and provides some enhancements for
+ unit tests
+- update to 1.0.1:
+ * This is an interim release for EOS integration purpose
+- update to 1.0.0:
+ * This is a Python3 only release (Python2 is no longer
+ supported)
+ * The minimum supported python version is 3.7
+ * Arista EOS 4.22 or later is required (for on-box use cases
+ only)
+
+-------------------------------------------------------------------
Old:
----
pyeapi-0.8.4.tar.gz
New:
----
pyeapi-1.0.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyeapi.spec ++++++
--- /var/tmp/diff_new_pack.sEEQFV/_old 2024-01-03 12:28:00.430093688 +0100
+++ /var/tmp/diff_new_pack.sEEQFV/_new 2024-01-03 12:28:00.430093688 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pyeapi
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
# Copyright (c) 2017-2020, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
@@ -17,10 +17,9 @@
#
-%{?!python_module:%define python_module() python3-%{**}}
-%define skip_python2 1
+%{?sle15_python_module_pythons}
Name: python-pyeapi
-Version: 0.8.4
+Version: 1.0.2
Release: 0
Summary: Python Client for eAPI
License: BSD-3-Clause
@@ -28,8 +27,9 @@
URL: https://github.com/arista-eosplus/pyeapi
Source: https://files.pythonhosted.org/packages/source/p/pyeapi/pyeapi-%{version}.t…
BuildRequires: %{python_module netaddr}
+BuildRequires: %{python_module pip}
BuildRequires: %{python_module pytest}
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-netaddr
@@ -52,17 +52,12 @@
%prep
%setup -q -n pyeapi-%{version}
-# Deprecated collections usage since Python 3.3
-sed -i 's/from collections import/from collections.abc import/' pyeapi/api/abstract.py
-sed -i 's/collections.Iterable/collections.abc.Iterable/' test/unit/test_utils.py
-# https://github.com/arista-eosplus/pyeapi/issues/224
-sed -i 's/from mock/from unittest.mock/' test/*/test*.py
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%fdupes %{buildroot}
%check
@@ -73,5 +68,5 @@
%doc CHANGELOG.md README.md
%doc examples
%{python_sitelib}/pyeapi
-%{python_sitelib}/pyeapi-%{version}*-info
+%{python_sitelib}/pyeapi-%{version}.dist-info
++++++ pyeapi-0.8.4.tar.gz -> pyeapi-1.0.2.tar.gz ++++++
++++ 2866 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package sbcl for openSUSE:Factory checked in at 2024-01-03 12:27:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sbcl (Old)
and /work/SRC/openSUSE:Factory/.sbcl.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sbcl"
Wed Jan 3 12:27:55 2024 rev:98 rq:1136003 version:2.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/sbcl/sbcl.changes 2023-12-06 23:50:10.215529271 +0100
+++ /work/SRC/openSUSE:Factory/.sbcl.new.28375/sbcl.changes 2024-01-03 12:27:56.245940893 +0100
@@ -1,0 +2,36 @@
+Mon Jan 1 18:15:01 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- Update to version 2.4.0
+ * minor incompatible change: *COMPILE-VERBOSE* and *LOAD-VERBOSE* are bound
+ to NIL when the system is started with the --script command-line argument.
+ (reported by Hraban Luyat, thanks to Nicolas Martyanoff)
+ * minor incompatible change: when looking for its core file, the system
+ checks the validity of whatever is pointed to by /proc/self/exe, and
+ assesses argv[0] if /proc/self/exe is invalid. (thanks to Philipp Marek)
+ * minor incompatible change: the system no longer provides type names on the
+ standard (CL) symbols ARRAY-RANK, ARRAY-TOTAL-SIZE, PATHNAME-HOST,
+ PATHNAME-TYPE, PATHNAME-DIRECTORY, FLOAT-RADIX or FLOAT-DIGITS.
+ (lp#2045559)
+ * platform support
+ ** the mark-region parallel garbage collector can be enabled on arm64.
+ (Thanks to Hayley Patton)
+ ** fix build on modern FreeBSDs. (lp#2046996, thanks to David J. Flander)
+ * bug fix: restore compiler type inference correctness on calls to REDUCE
+ with :INITIAL-VALUE but no :FROM-END. (lp#2044856, reported by Patrick
+ Poitras)
+ * bug fix: compiler error when declaring SB-EXT:MUFFLE-CONDITIONS on an
+ unknown type. (lp#2045442)
+ * bug fix: the disassembler provided non-pretty output for registers in some
+ cases. (lp#2046004, reported by Fedorov Alexander)
+ * bug fix: the system is slightly less likely to exhaust the stack again
+ when reporting a control stack exhaustion error.
+ * optimization: GC write barriers are eliminated in more cases.
+ * optimization: improved type derivation of iteration variables with mixed
+ types.
+ * optimization: remove unused initial values from LET bindings, improving
+ register type selection.
+ * optimization: lower EQUALP/EQUAL/EQL to EQL/EQ in FIND/MEMBER based on the
+ input types.
+ * optimization: better type derivation for DPB, LOGIOR.
+
+-------------------------------------------------------------------
Old:
----
sbcl-2.3.11-source.tar.bz2
New:
----
sbcl-2.4.0-source.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sbcl.spec ++++++
--- /var/tmp/diff_new_pack.wOvRwr/_old 2024-01-03 12:27:57.273978434 +0100
+++ /var/tmp/diff_new_pack.wOvRwr/_new 2024-01-03 12:27:57.273978434 +0100
@@ -1,7 +1,7 @@
#
# spec file for package sbcl
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
Name: sbcl
#!BuildIgnore: gcc-PIE
-Version: 2.3.11
+Version: 2.4.0
Release: 0
Summary: Steel Bank Common Lisp
License: BSD-3-Clause AND SUSE-Public-Domain
++++++ sbcl-2.3.11-source.tar.bz2 -> sbcl-2.4.0-source.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/sbcl/sbcl-2.3.11-source.tar.bz2 /work/SRC/openSUSE:Factory/.sbcl.new.28375/sbcl-2.4.0-source.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 trousers for openSUSE:Factory checked in at 2024-01-03 12:27:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/trousers (Old)
and /work/SRC/openSUSE:Factory/.trousers.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "trousers"
Wed Jan 3 12:27:52 2024 rev:54 rq:1135990 version:0.3.15
Changes:
--------
--- /work/SRC/openSUSE:Factory/trousers/trousers.changes 2023-05-25 23:52:41.091663165 +0200
+++ /work/SRC/openSUSE:Factory/.trousers.new.28375/trousers.changes 2024-01-03 12:27:54.157864642 +0100
@@ -1,0 +2,6 @@
+Sat Dec 30 21:10:14 UTC 2023 - Giacomo Comes <gcomes.obs(a)gmail.com>
+
+- add Requires(post): udev, Requires(post): coreutils
+ * the post scriptlet uses udevamd and chown
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ trousers.spec ++++++
--- /var/tmp/diff_new_pack.4iQFoD/_old 2024-01-03 12:27:54.813888598 +0100
+++ /var/tmp/diff_new_pack.4iQFoD/_new 2024-01-03 12:27:54.813888598 +0100
@@ -36,6 +36,8 @@
BuildRequires: systemd-rpm-macros
BuildRequires: pkgconfig(udev)
Requires(pre): user(tss)
+Requires(post): udev
+Requires(post): coreutils
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gerbera for openSUSE:Factory checked in at 2024-01-03 12:27:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gerbera (Old)
and /work/SRC/openSUSE:Factory/.gerbera.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gerbera"
Wed Jan 3 12:27:50 2024 rev:12 rq:1135991 version:1.12.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/gerbera/gerbera.changes 2023-06-16 16:55:27.269923461 +0200
+++ /work/SRC/openSUSE:Factory/.gerbera.new.28375/gerbera.changes 2024-01-03 12:27:52.981821695 +0100
@@ -1,0 +2,11 @@
+Sun Dec 31 19:15:11 UTC 2023 - Andreas Stieger <andreas.stieger(a)gmx.de>
+
+- fix build on Tumbleweed with fmtlib 10 (boo#1218445)
+ add gerbera-1.12.1-buildfix-support-fmtlib-10.patch
+
+-------------------------------------------------------------------
+Fri Oct 6 07:21:59 UTC 2023 - Paolo Stivanin <info(a)paolostivanin.com>
+
+- Use better macro for selecting a newer GCC on Leap.
+
+-------------------------------------------------------------------
New:
----
gerbera-1.12.1-buildfix-support-fmtlib-10.patch
BETA DEBUG BEGIN:
New:- fix build on Tumbleweed with fmtlib 10 (boo#1218445)
add gerbera-1.12.1-buildfix-support-fmtlib-10.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gerbera.spec ++++++
--- /var/tmp/diff_new_pack.uaJafh/_old 2024-01-03 12:27:53.641845797 +0100
+++ /var/tmp/diff_new_pack.uaJafh/_new 2024-01-03 12:27:53.645845944 +0100
@@ -16,6 +16,10 @@
#
+%if 0%{?suse_version} && 0%{?suse_version} < 1590
+%global force_gcc_version 12
+%endif
+
Name: gerbera
Version: 1.12.1
Release: 0
@@ -27,6 +31,7 @@
Source1: config.xml
Source2: gerbera.sysusers.in
Patch0: harden_gerbera.service.patch
+Patch1: gerbera-1.12.1-buildfix-support-fmtlib-10.patch
BuildRequires: ccache
BuildRequires: cmake >= 3.13
BuildRequires: fdupes
@@ -57,11 +62,7 @@
BuildRequires: pkgconfig(zlib)
Requires: logrotate
%{?systemd_requires}
-%if 0%{?suse_version} <= 1550
-BuildRequires: gcc10-c++
-%else
-BuildRequires: gcc-c++
-%endif
+BuildRequires: gcc%{?force_gcc_version}-c++ >= 12
%description
Gerbera is a UPnP media server which allows streaming digital
@@ -84,9 +85,8 @@
-DWITH_AVCODEC=1 \
-DWITH_EXIF=0 \
-DWITH_EXIV2=1 \
-%if 0%{?suse_version} <= 1550
- -DCMAKE_CXX_COMPILER=g++-10 \
- -DCMAKE_C_COMPILER=gcc-10 \
+%if 0%{?force_gcc_version}
+ -DCMAKE_CXX_COMPILER=%{_bindir}/g++-%{?force_gcc_version} \
%endif
-DWITH_FFMPEGTHUMBNAILER=1 \
-DWITH_INOTIFY=1 \
++++++ gerbera-1.12.1-buildfix-support-fmtlib-10.patch ++++++
From 37957aac0aea776e6f843af2358916f81056a405 Mon Sep 17 00:00:00 2001
From: Mamoru TASAKA <mtasaka(a)fedoraproject.org>
Date: Thu, 29 Jun 2023 22:09:15 +0900
Subject: [PATCH] buildfix: support fmtlib 10
References: https://bugzilla.opensuse.org/show_bug.cgi?id=1218445
With fmtlib10, fmt::format does not accept pugi::xml_node as it is.
Use name() member function, as this usage appear on other places of
gerbera source code.
Closes #2839 .
---
src/config/setup/config_setup_array.cc | 6 +++---
src/config/setup/config_setup_autoscan.cc | 2 +-
src/config/setup/config_setup_client.cc | 2 +-
src/config/setup/config_setup_dictionary.cc | 6 +++---
src/config/setup/config_setup_dynamic.cc | 2 +-
src/config/setup/config_setup_transcoding.cc | 2 +-
src/config/setup/config_setup_tweak.cc | 2 +-
src/config/setup/config_setup_vector.cc | 4 ++--
8 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/config/setup/config_setup_array.cc b/src/config/setup/config_setup_array.cc
index 62dd5c9a7..a5f8958ce 100644
--- a/src/config/setup/config_setup_array.cc
+++ b/src/config/setup/config_setup_array.cc
@@ -137,11 +137,11 @@ std::vector<std::string> ConfigArraySetup::getXmlContent(const pugi::xml_node& o
std::vector<std::string> result;
if (initArray) {
if (!initArray(optValue, result, ConfigDefinition::mapConfigOption(nodeOption))) {
- throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue.name());
}
} else {
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue.name());
}
}
if (result.empty()) {
@@ -150,7 +150,7 @@ std::vector<std::string> ConfigArraySetup::getXmlContent(const pugi::xml_node& o
result = defaultEntries;
}
if (notEmpty && result.empty()) {
- throw_std_runtime_error("Invalid array {} empty '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid array {} empty '{}'", xpath, optValue.name());
}
return result;
}
diff --git a/src/config/setup/config_setup_autoscan.cc b/src/config/setup/config_setup_autoscan.cc
index 9ae4e61f8..5e1394585 100644
--- a/src/config/setup/config_setup_autoscan.cc
+++ b/src/config/setup/config_setup_autoscan.cc
@@ -245,7 +245,7 @@ std::shared_ptr<ConfigOption> ConfigAutoscanSetup::newOption(const pugi::xml_nod
{
auto result = std::vector<AutoscanDirectory>();
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Init {} autoscan failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} autoscan failed '{}'", xpath, optValue.name());
}
optionValue = std::make_shared<AutoscanListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_client.cc b/src/config/setup/config_setup_client.cc
index ffd12fc01..857db3c3e 100644
--- a/src/config/setup/config_setup_client.cc
+++ b/src/config/setup/config_setup_client.cc
@@ -183,7 +183,7 @@ std::shared_ptr<ConfigOption> ConfigClientSetup::newOption(const pugi::xml_node&
auto result = std::make_shared<ClientConfigList>();
if (!createOptionFromNode(isEnabled ? optValue : pugi::xml_node(nullptr), result)) {
- throw_std_runtime_error("Init {} client config failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} client config failed '{}'", xpath, optValue.name());
}
optionValue = std::make_shared<ClientConfigListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_dictionary.cc b/src/config/setup/config_setup_dictionary.cc
index 003b4cc59..69d1a7255 100644
--- a/src/config/setup/config_setup_dictionary.cc
+++ b/src/config/setup/config_setup_dictionary.cc
@@ -163,11 +163,11 @@ std::map<std::string, std::string> ConfigDictionarySetup::getXmlContent(const pu
std::map<std::string, std::string> result;
if (initDict) {
if (!initDict(optValue, result)) {
- throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue.name());
}
} else {
if (!createOptionFromNode(optValue, result) && required) {
- throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue.name());
}
}
if (result.empty()) {
@@ -176,7 +176,7 @@ std::map<std::string, std::string> ConfigDictionarySetup::getXmlContent(const pu
result = defaultEntries;
}
if (notEmpty && result.empty()) {
- throw_std_runtime_error("Invalid dictionary {} empty '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid dictionary {} empty '{}'", xpath, optValue.name());
}
return result;
}
diff --git a/src/config/setup/config_setup_dynamic.cc b/src/config/setup/config_setup_dynamic.cc
index 0074cb6d3..d6962afe6 100644
--- a/src/config/setup/config_setup_dynamic.cc
+++ b/src/config/setup/config_setup_dynamic.cc
@@ -192,7 +192,7 @@ std::shared_ptr<ConfigOption> ConfigDynamicContentSetup::newOption(const pugi::x
auto result = std::make_shared<DynamicContentList>();
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Init {} DynamicContentList failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} DynamicContentList failed '{}'", xpath, optValue.name());
}
optionValue = std::make_shared<DynamicContentListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_transcoding.cc b/src/config/setup/config_setup_transcoding.cc
index 17d1780dc..1f6fb0604 100644
--- a/src/config/setup/config_setup_transcoding.cc
+++ b/src/config/setup/config_setup_transcoding.cc
@@ -501,7 +501,7 @@ std::shared_ptr<ConfigOption> ConfigTranscodingSetup::newOption(const pugi::xml_
auto result = std::make_shared<TranscodingProfileList>();
if (!createOptionFromNode(isEnabled ? optValue : pugi::xml_node(nullptr), result)) {
- throw_std_runtime_error("Init {} transcoding failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} transcoding failed '{}'", xpath, optValue.name());
}
optionValue = std::make_shared<TranscodingProfileListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_tweak.cc b/src/config/setup/config_setup_tweak.cc
index 65dae2759..4da9fca1b 100644
--- a/src/config/setup/config_setup_tweak.cc
+++ b/src/config/setup/config_setup_tweak.cc
@@ -257,7 +257,7 @@ std::shared_ptr<ConfigOption> ConfigDirectorySetup::newOption(const pugi::xml_no
auto result = std::make_shared<DirectoryConfigList>();
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Init {} DirectoryConfigList failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} DirectoryConfigList failed '{}'", xpath, optValue.name());
}
optionValue = std::make_shared<DirectoryTweakOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_vector.cc b/src/config/setup/config_setup_vector.cc
index e5efe2767..9a9670569 100644
--- a/src/config/setup/config_setup_vector.cc
+++ b/src/config/setup/config_setup_vector.cc
@@ -181,7 +181,7 @@ std::vector<std::vector<std::pair<std::string, std::string>>> ConfigVectorSetup:
{
std::vector<std::vector<std::pair<std::string, std::string>>> result;
if (!createOptionFromNode(optValue, result) && required) {
- throw_std_runtime_error("Init {} vector failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} vector failed '{}'", xpath, optValue.name());
}
if (result.empty()) {
log_debug("{} assigning {} default values", xpath, defaultEntries.size());
@@ -189,7 +189,7 @@ std::vector<std::vector<std::pair<std::string, std::string>>> ConfigVectorSetup:
result = defaultEntries;
}
if (notEmpty && result.empty()) {
- throw_std_runtime_error("Invalid vector {} empty '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid vector {} empty '{}'", xpath, optValue.name());
}
return result;
}
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package sidplayfp for openSUSE:Factory checked in at 2024-01-03 12:27:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sidplayfp (Old)
and /work/SRC/openSUSE:Factory/.sidplayfp.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sidplayfp"
Wed Jan 3 12:27:48 2024 rev:5 rq:1135989 version:2.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/sidplayfp/sidplayfp.changes 2023-12-25 19:06:12.975487846 +0100
+++ /work/SRC/openSUSE:Factory/.sidplayfp.new.28375/sidplayfp.changes 2024-01-03 12:27:51.473766625 +0100
@@ -1,0 +2,6 @@
+Mon Jan 1 10:05:36 UTC 2024 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 2.6.0
+ * Added filter curve switch plus recommended 6581 filter setting.
+
+-------------------------------------------------------------------
Old:
----
sidplayfp-2.5.1.tar.gz
New:
----
sidplayfp-2.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sidplayfp.spec ++++++
--- /var/tmp/diff_new_pack.Z0I9I7/_old 2024-01-03 12:27:52.505804312 +0100
+++ /var/tmp/diff_new_pack.Z0I9I7/_new 2024-01-03 12:27:52.509804458 +0100
@@ -1,8 +1,8 @@
#
# spec file for package sidplayfp
#
-# Copyright (c) 2023 SUSE LLC
-# Copyright (c) 2023, Martin Hauke <mardnh(a)gmx.de>
+# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2023-2024, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,14 @@
Name: sidplayfp
-Version: 2.5.1
+Version: 2.6.0
Release: 0
Summary: SID chip music module player
License: GPL-2.0-or-later
Group: Productivity/Multimedia/Sound/Players
#Git-Clone: https://github.com/libsidplayfp/sidplayfp.git
URL: https://sourceforge.net/projects/sidplay-residfp/
-Source0: https://sourceforge.net/projects/sidplay-residfp/files/sidplayfp/2.5/sidpla…
+Source0: https://sourceforge.net/projects/sidplay-residfp/files/sidplayfp/2.6/sidpla…
BuildRequires: gcc-c++
BuildRequires: pkgconfig
BuildRequires: pkgconfig(alsa)
++++++ sidplayfp-2.5.1.tar.gz -> sidplayfp-2.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/AUTHORS new/sidplayfp-2.6.0/AUTHORS
--- old/sidplayfp-2.5.1/AUTHORS 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/AUTHORS 2024-01-01 09:00:21.000000000 +0100
@@ -3,7 +3,7 @@
Copyright (c) 2000 Simon White
Copyright (c) 2007-2010 Antti Lankila
-Copyright (c) 2010-2023 Leandro Nini
+Copyright (c) 2010-2024 Leandro Nini
This version of the freely available sidplayfp player source code
contains the following contributed or derived work. In the order they first
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/README new/sidplayfp-2.6.0/README
--- old/sidplayfp-2.5.1/README 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/README 2024-01-01 09:00:21.000000000 +0100
@@ -8,7 +8,7 @@
Copyright (c) 2000 Simon White
Copyright (c) 2007-2010 Antti Lankila
-Copyright (c) 2010-2023 Leandro Nini <drfiemost(a)users.sourceforge.net>
+Copyright (c) 2010-2024 Leandro Nini <drfiemost(a)users.sourceforge.net>
stilview
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/configure new/sidplayfp-2.6.0/configure
--- old/sidplayfp-2.5.1/configure 2023-12-23 11:12:30.000000000 +0100
+++ new/sidplayfp-2.6.0/configure 2024-01-01 09:00:23.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for sidplayfp 2.5.1.
+# Generated by GNU Autoconf 2.71 for sidplayfp 2.6.0.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -608,8 +608,8 @@
# Identity of this package.
PACKAGE_NAME='sidplayfp'
PACKAGE_TARNAME='sidplayfp'
-PACKAGE_VERSION='2.5.1'
-PACKAGE_STRING='sidplayfp 2.5.1'
+PACKAGE_VERSION='2.6.0'
+PACKAGE_STRING='sidplayfp 2.6.0'
PACKAGE_BUGREPORT=''
PACKAGE_URL='https://github.com/libsidplayfp/sidplayfp/'
@@ -1364,7 +1364,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures sidplayfp 2.5.1 to adapt to many kinds of systems.
+\`configure' configures sidplayfp 2.6.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1435,7 +1435,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sidplayfp 2.5.1:";;
+ short | recursive ) echo "Configuration of sidplayfp 2.6.0:";;
esac
cat <<\_ACEOF
@@ -1561,7 +1561,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sidplayfp configure 2.5.1
+sidplayfp configure 2.6.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1837,7 +1837,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by sidplayfp $as_me 2.5.1, which was
+It was created by sidplayfp $as_me 2.6.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3327,7 +3327,7 @@
# Define the identity of the package.
PACKAGE='sidplayfp'
- VERSION='2.5.1'
+ VERSION='2.6.0'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -10422,7 +10422,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by sidplayfp $as_me 2.5.1, which was
+This file was extended by sidplayfp $as_me 2.6.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10491,7 +10491,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-sidplayfp config.status 2.5.1
+sidplayfp config.status 2.6.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/configure.ac new/sidplayfp-2.6.0/configure.ac
--- old/sidplayfp-2.5.1/configure.ac 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/configure.ac 2024-01-01 09:00:21.000000000 +0100
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT([sidplayfp], [2.5.1], [], [], [https://github.com/libsidplayfp/sidplayfp/]
+AC_INIT([sidplayfp], [2.6.0], [], [], [https://github.com/libsidplayfp/sidplayfp/]
AC_CONFIG_SRCDIR([src/main.cpp])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/doc/en/sidplayfp.1 new/sidplayfp-2.6.0/doc/en/sidplayfp.1
--- old/sidplayfp-2.5.1/doc/en/sidplayfp.1 2023-12-23 11:12:34.000000000 +0100
+++ new/sidplayfp-2.6.0/doc/en/sidplayfp.1 2024-01-01 09:00:27.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SIDPLAYFP 1"
-.TH SIDPLAYFP 1 "2023-12-23" "perl v5.34.0" "User Programs"
+.TH SIDPLAYFP 1 "2024-01-01" "perl v5.34.0" "User Programs"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -276,6 +276,12 @@
Simulate c64 power on delay as number of cpu cycles.
If greater than 8191 the delay will be random.
This is the default.
+.IP "\fB\-\-fcurve=\fR\fI<num>|auto\fR" 4
+.IX Item "--fcurve=<num>|auto"
+Controls the filter curve in the ReSIDfp mulation.
+Ranges from 0.0 (light) to 1.0 (dark), the default
+value is 0.5. If set to auto it will choose a
+predefined value for 6581 depending on the tune author.
.IP "\fB\-\-noaudio\fR" 4
.IX Item "--noaudio"
Run without an audio output device.
@@ -385,8 +391,8 @@
.IX Item "Copyright (C) 2007-2010 Antti Lankila"
.IP "Copyright (C) 2009\-2015 \s-1VICE\s0 Project" 4
.IX Item "Copyright (C) 2009-2015 VICE Project"
-.IP "Copyright (C) 2010\-2022 Leandro Nini" 4
-.IX Item "Copyright (C) 2010-2022 Leandro Nini"
+.IP "Copyright (C) 2010\-2024 Leandro Nini" 4
+.IX Item "Copyright (C) 2010-2024 Leandro Nini"
.PD
.PP
This program is free software; you can redistribute it and/or modify
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/doc/en/sidplayfp.ini.5 new/sidplayfp-2.6.0/doc/en/sidplayfp.ini.5
--- old/sidplayfp-2.5.1/doc/en/sidplayfp.ini.5 2023-12-23 11:12:34.000000000 +0100
+++ new/sidplayfp-2.6.0/doc/en/sidplayfp.ini.5 2024-01-01 09:00:27.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SIDPLAYFP.INI 5"
-.TH SIDPLAYFP.INI 5 "2023-12-23" "perl v5.34.0" "File formats"
+.TH SIDPLAYFP.INI 5 "2024-01-01" "perl v5.34.0" "File formats"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -366,8 +366,8 @@
.IX Item "Copyright (C) 2007-2010 Antti Lankila"
.IP "Copyright (C) 2009\-2015 \s-1VICE\s0 Project" 4
.IX Item "Copyright (C) 2009-2015 VICE Project"
-.IP "Copyright (C) 2010\-2023 Leandro Nini" 4
-.IX Item "Copyright (C) 2010-2023 Leandro Nini"
+.IP "Copyright (C) 2010\-2024 Leandro Nini" 4
+.IX Item "Copyright (C) 2010-2024 Leandro Nini"
.PD
.PP
This program is free software; you can redistribute it and/or modify
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/doc/en/sidplayfp.ini.pod new/sidplayfp-2.6.0/doc/en/sidplayfp.ini.pod
--- old/sidplayfp-2.5.1/doc/en/sidplayfp.ini.pod 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/doc/en/sidplayfp.ini.pod 2024-01-01 09:00:21.000000000 +0100
@@ -306,7 +306,7 @@
=item Copyright (C) 2009-2015 VICE Project
-=item Copyright (C) 2010-2023 Leandro Nini
+=item Copyright (C) 2010-2024 Leandro Nini
=back
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/doc/en/sidplayfp.pod new/sidplayfp-2.6.0/doc/en/sidplayfp.pod
--- old/sidplayfp-2.5.1/doc/en/sidplayfp.pod 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/doc/en/sidplayfp.pod 2024-01-01 09:00:21.000000000 +0100
@@ -175,6 +175,13 @@
If greater than 8191 the delay will be random.
This is the default.
+=item B<--fcurve=>I<< <num>|auto >>
+
+Controls the filter curve in the ReSIDfp mulation.
+Ranges from 0.0 (light) to 1.0 (dark), the default
+value is 0.5. If set to auto it will choose a
+predefined value for 6581 depending on the tune author.
+
=item B<--noaudio>
Run without an audio output device.
@@ -339,7 +346,7 @@
=item Copyright (C) 2009-2015 VICE Project
-=item Copyright (C) 2010-2022 Leandro Nini
+=item Copyright (C) 2010-2024 Leandro Nini
=back
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/doc/en/stilview.1 new/sidplayfp-2.6.0/doc/en/stilview.1
--- old/sidplayfp-2.5.1/doc/en/stilview.1 2023-12-23 11:12:34.000000000 +0100
+++ new/sidplayfp-2.6.0/doc/en/stilview.1 2024-01-01 09:00:27.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "STILVIEW 1"
-.TH STILVIEW 1 "2023-12-23" "perl v5.34.0" "User Programs"
+.TH STILVIEW 1 "2024-01-01" "perl v5.34.0" "User Programs"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/src/args.cpp new/sidplayfp-2.6.0/src/args.cpp
--- old/sidplayfp-2.5.1/src/args.cpp 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/src/args.cpp 2024-01-01 09:00:21.000000000 +0100
@@ -1,7 +1,7 @@
/*
* This file is part of sidplayfp, a console SID player.
*
- * Copyright 2011-2021 Leandro Nini
+ * Copyright 2011-2023 Leandro Nini
* Copyright 2000-2001 Simon White
*
* This program is free software; you can redistribute it and/or modify
@@ -379,6 +379,17 @@
{
m_engCfg.powerOnDelay = (uint_least16_t) atoi(&argv[i][8]);
}
+ else if (strncmp (&argv[i][1], "-fcurve=", 8) == 0)
+ {
+ if (strncmp (&argv[i][9], "auto", 4) == 0)
+ {
+ m_autofilter = true;
+ }
+ else
+ {
+ m_fcurve = atof(&argv[i][9]);
+ }
+ }
// File format conversions
else if (argv[i][1] == 'w')
{
@@ -648,6 +659,7 @@
#endif
<< " -r[i|r][f] set resampling method (default: resample interpolate)" << endl
<< " Use 'f' to enable fast resampling (only for reSID)" << endl
+ << " --fcurve=<num>|auto Controls the filter curve in the ReSIDfp emulation" << endl
<< " -w[name] create wav file (default: <datafile>[n].wav)" << endl
<< " --au[name] create au file (default: <datafile>[n].au)" << endl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/src/menu.cpp new/sidplayfp-2.6.0/src/menu.cpp
--- old/sidplayfp-2.5.1/src/menu.cpp 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/src/menu.cpp 2024-01-01 09:00:21.000000000 +0100
@@ -161,12 +161,8 @@
consoleTable (tableStart);
consoleTable (tableMiddle);
- consoleColour (red, true);
- cerr << " SID";
- consoleColour (blue, true);
- cerr << "PLAYFP";
consoleColour (white, true);
- cerr << " - Music Player and C64 SID Chip Emulator" << endl;
+ cerr << " SIDPLAYFP - Music Player and C64 SID Chip Emulator" << endl;
consoleTable (tableMiddle);
consoleColour (white, false);
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/src/player.cpp new/sidplayfp-2.6.0/src/player.cpp
--- old/sidplayfp-2.5.1/src/player.cpp 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/src/player.cpp 2024-01-01 09:00:21.000000000 +0100
@@ -1,7 +1,7 @@
/*
* This file is part of sidplayfp, a console SID player.
*
- * Copyright 2011-2022 Leandro Nini
+ * Copyright 2011-2023 Leandro Nini
* Copyright 2000-2001 Simon White
*
* This program is free software; you can redistribute it and/or modify
@@ -52,6 +52,16 @@
#include <sidplayfp/SidInfo.h>
#include <sidplayfp/SidTuneInfo.h>
+#ifdef HAVE_CXX11
+# include <unordered_map>
+ typedef std::unordered_map<std::string, double> filter_map_t;
+ typedef std::unordered_map<std::string, double>::const_iterator filter_map_iter_t;
+#else
+# include <map>
+ typedef std::map<std::string, double> filter_map_t;
+ typedef std::map<std::string, double>::const_iterator filter_map_iter_t;
+#endif
+
// Previous song select timeout (4 secs)
#define SID2_PREV_SONG_TIMEOUT 4000
@@ -103,6 +113,70 @@
};
#endif
+// This table contains chip-profiles which allow us to adjust
+// certain settings that varied wildly between 6581 chips, even
+// made in the same factory on the same day.
+//
+// This works under the assumption that the authors used the
+// same SID chip their entire career.
+//
+// based on https://github.com/reFX/libSidplayEZ/blob/modernized/src/chip-profiles.h
+static const filter_map_t filterCurveMap =
+{
+ { "Anthony Lees", 0.450 },
+ { "Antony Crowther (Ratt)", 0.400 },
+ { "Ben Daglish", 0.900 },
+ { "Charles Deenen", 1.000 },
+ { "Chris H\xFClsbeck", 0.600 },
+ { "David Dunn", 1.100 },
+ { "David Dunn & Aidan Bell", 1.100 },
+ { "David Whittaker", 1.000 },
+ { "Thomas Mogensen (DRAX)", 0.450 },
+ { "Edwin van Santen", 0.650 },
+ { "Falco Paul", 1.100 },
+ { "Figge Wasberger (Fegolhuzz)", 1.100 },
+ { "Fred Gray", 1.250 },
+ { "Geir Tjelta", 0.700 },
+ { "Georg Feil", 1.250 },
+ { "Glenn Rune Gallefoss", 1.250 },
+ { "Graham Jarvis & Rob Hartshorne", 1.000 },
+ { "Jason Page", 1.000 },
+ { "Jeroen Tel", 0.825 },
+ { "Johannes Bjerregaard", 0.700 },
+ { "Jonathan Dunn", 0.750 },
+ { "Jouni Ikonen (Mixer)", 0.600 },
+ { "Kim Christensen (Future Freak)", 0.300 },
+ { "Linus \xC5kesson (lft)", 0.900 },
+ { "Mark Cooksey", 1.250 },
+ { "Markus M\xFCller (Superbrain)", 0.800 },
+ { "Martin Walker", 1.000 },
+ { "Matt Gray", 1.100 },
+ { "Michael Hendriks", 0.900 },
+ { "M. Nilsson-Vonderburgh (Mic)", 0.700 },
+ { "M. Nilsson-Vonderburgh (Mitch)", 0.700 },
+ { "M. Nilsson-Vonderburgh (Yankee)", 0.700 },
+ { "Neil Brennan", 0.750 },
+ { "Peter Clarke", 0.600 },
+ { "Pex Tufvesson (Mahoney)", 0.400 },
+ { "Pex Tufvesson (Zax)", 0.400 },
+ { "Renato Brosowski (Zoci-Joe)", 1.400 },
+ { "Reyn Ouwehand", 1.000 },
+ { "Richard Joseph", 0.700 },
+ { "Rob Hubbard", 0.700 },
+ { "Russell Lieblich", 0.400 },
+ { "Stellan Andersson (Dane)", 0.350 },
+ { "Steve Turner", 0.550 },
+ { "Tim Follin", 0.300 },
+ { "Thomas E. Petersen (Laxity)", 1.550 },
+ { "Thomas E. Petersen (TSS)", 1.550 },
+};
+
+double getRecommendedFilterCurve(const std::string& author)
+{
+ filter_map_iter_t it = filterCurveMap.find(author);
+ return (it != filterCurveMap.end()) ? it->second : 0.5;
+}
+
uint8_t* loadRom(const SID_STRING &romPath, const int size)
{
SID_IFSTREAM is(romPath.c_str(), std::ios::binary);
@@ -178,9 +252,11 @@
m_state(playerStopped),
m_outfile(NULL),
m_filename(""),
+ m_fcurve(-1.0),
m_quietLevel(0),
m_cpudebug(false),
- newSonglengthDB(false)
+ newSonglengthDB(false),
+ m_autofilter(false)
{
#ifdef FEAT_REGS_DUMP_SID
memset(m_registers, 0, 32*3);
@@ -263,7 +339,7 @@
m_verboseLevel = (m_iniCfg.sidplay2()).verboseLevel;
createOutput (OUT_NULL, nullptr);
- createSidEmu (EMU_NONE);
+ createSidEmu (EMU_NONE, nullptr);
uint8_t *kernalRom = loadRom((m_iniCfg.sidplay2()).kernalRom, 8192, TEXT("kernal"));
uint8_t *basicRom = loadRom((m_iniCfg.sidplay2()).basicRom, 8192, TEXT("basic"));
@@ -422,7 +498,7 @@
// Create the sid emulation
-bool ConsolePlayer::createSidEmu (SIDEMUS emu)
+bool ConsolePlayer::createSidEmu (SIDEMUS emu, const SidTuneInfo *tuneInfo)
{
// Remove old driver and emulation
if (m_engCfg.sidEmulation)
@@ -448,10 +524,45 @@
rs->create ((m_engine.info ()).maxsids());
if (!rs->getStatus()) goto createSidEmu_error;
- if (m_filter.filterCurve6581)
- rs->filter6581Curve(m_filter.filterCurve6581);
- if (m_filter.filterCurve8580)
- rs->filter8580Curve((double)m_filter.filterCurve8580);
+ double fcurve;
+ if (m_autofilter && (tuneInfo->numberOfInfoStrings() == 3))
+ {
+ fcurve = getRecommendedFilterCurve(tuneInfo->infoString(1));
+ if (m_verboseLevel > 1)
+ cerr << "Recommended filter curve: " << fcurve << endl;
+ }
+ else if (m_fcurve >= 0.0)
+ {
+ fcurve = m_fcurve;
+ }
+ else if (m_filter.filterCurve6581 >= 0.0)
+ {
+ fcurve = m_filter.filterCurve6581;
+ }
+
+ if (fcurve >= 0.0)
+ {
+ if (m_verboseLevel)
+ cerr << "6581 filter curve: " << fcurve << endl;
+ rs->filter6581Curve(fcurve);
+ }
+
+ fcurve = -1.0;
+ if (m_fcurve >= 0.0)
+ {
+ fcurve = m_fcurve;
+ }
+ if (m_filter.filterCurve8580 >= 0.0)
+ {
+ fcurve = m_filter.filterCurve8580;
+ }
+
+ if (fcurve >= 0.0)
+ {
+ if (m_verboseLevel)
+ cerr << "8580 filter curve: " << fcurve << endl;
+ rs->filter8580Curve(fcurve);
+ }
}
catch (std::bad_alloc const &ba) {}
break;
@@ -567,7 +678,7 @@
m_track.songs = tuneInfo->songs();
if (!createOutput(m_driver.output, tuneInfo))
return false;
- if (!createSidEmu(m_driver.sid))
+ if (!createSidEmu(m_driver.sid, tuneInfo))
return false;
// Configure engine with settings
@@ -649,7 +760,7 @@
// Shutdown drivers, etc
createOutput (OUT_NULL, nullptr);
- createSidEmu (EMU_NONE);
+ createSidEmu (EMU_NONE, nullptr);
m_engine.load (nullptr);
m_engine.config (m_engCfg);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.5.1/src/player.h new/sidplayfp-2.6.0/src/player.h
--- old/sidplayfp-2.5.1/src/player.h 2023-12-23 11:12:27.000000000 +0100
+++ new/sidplayfp-2.6.0/src/player.h 2024-01-01 09:00:21.000000000 +0100
@@ -1,7 +1,7 @@
/*
* This file is part of sidplayfp, a console SID player.
*
- * Copyright 2011-2022 Leandro Nini
+ * Copyright 2011-2023 Leandro Nini
* Copyright 2000-2001 Simon White
*
* This program is free software; you can redistribute it and/or modify
@@ -126,6 +126,8 @@
IniConfig m_iniCfg;
SidDatabase m_database;
+ double m_fcurve;
+
uint8_t m_registers[3][32];
uint16_t* m_freqTable;
@@ -137,6 +139,8 @@
bool newSonglengthDB;
+ bool m_autofilter;
+
bool vMute[9];
int m_channels;
@@ -200,7 +204,7 @@
void displayArgs (const char *arg = NULL);
bool createOutput (OUTPUTS driver, const SidTuneInfo *tuneInfo);
- bool createSidEmu (SIDEMUS emu);
+ bool createSidEmu (SIDEMUS emu, const SidTuneInfo *tuneInfo);
void displayError (const char *error);
void displayError (unsigned int num) { ::displayError (m_name, num); }
void decodeKeys (void);
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package OpenImageIO for openSUSE:Factory checked in at 2024-01-03 12:27:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/OpenImageIO (Old)
and /work/SRC/openSUSE:Factory/.OpenImageIO.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "OpenImageIO"
Wed Jan 3 12:27:41 2024 rev:43 rq:1135988 version:2.5.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/OpenImageIO/OpenImageIO.changes 2023-11-16 20:30:28.392598237 +0100
+++ /work/SRC/openSUSE:Factory/.OpenImageIO.new.28375/OpenImageIO.changes 2024-01-03 12:27:47.953638078 +0100
@@ -1,0 +2,10 @@
+Sat Dec 30 16:47:53 UTC 2023 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2.5.6.0:
+ * autocc bugfix and color config inventory cleanup
+ * Fix issue when computing perceptual diff
+ * Better cmake verbose behavior
+ * Fix typo in slack-release-notifier version
+ * More relicensing code under Apache 2.0
+
+-------------------------------------------------------------------
Old:
----
OpenImageIO-2.5.5.0.tar.gz
New:
----
OpenImageIO-2.5.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ OpenImageIO.spec ++++++
--- /var/tmp/diff_new_pack.5OC7hi/_old 2024-01-03 12:27:49.841707026 +0100
+++ /var/tmp/diff_new_pack.5OC7hi/_new 2024-01-03 12:27:49.869708048 +0100
@@ -35,7 +35,7 @@
%define so_ver 2_5
%define major_minor_ver 2.5
Name: OpenImageIO
-Version: 2.5.5.0
+Version: 2.5.6.0
Release: 0
Summary: Library for Reading and Writing Images
License: BSD-3-Clause
++++++ OpenImageIO-2.5.5.0.tar.gz -> OpenImageIO-2.5.6.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/OpenImageIO/OpenImageIO-2.5.5.0.tar.gz /work/SRC/openSUSE:Factory/.OpenImageIO.new.28375/OpenImageIO-2.5.6.0.tar.gz differ: char 12, line 1
++++++ _service ++++++
--- /var/tmp/diff_new_pack.5OC7hi/_old 2024-01-03 12:27:50.405727622 +0100
+++ /var/tmp/diff_new_pack.5OC7hi/_new 2024-01-03 12:27:50.437728791 +0100
@@ -1,12 +1,12 @@
<services>
- <service name="tar_scm" mode="disabled">
+ <service name="tar_scm" mode="manual">
<param name="scm">git</param>
<param name="url">https://github.com/OpenImageIO/oiio-images</param>
<param name="revision">master</param>
<param name="versionformat">%ci</param>
<param name="exclude">.git</param>
</service>
- <service name="recompress" mode="disabled">
+ <service name="recompress" mode="manual">
<param name="compression">xz</param>
<param name="file">*.tar</param>
</service>
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package racket for openSUSE:Factory checked in at 2024-01-03 12:27:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/racket (Old)
and /work/SRC/openSUSE:Factory/.racket.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "racket"
Wed Jan 3 12:27:38 2024 rev:28 rq:1135983 version:8.11.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/racket/racket.changes 2023-11-16 20:28:33.084346799 +0100
+++ /work/SRC/openSUSE:Factory/.racket.new.28375/racket.changes 2024-01-03 12:27:45.777558612 +0100
@@ -1,0 +2,7 @@
+Sat Dec 16 09:35:49 UTC 2023 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 8.11.1:
+ * This bug-fix release repairs a problem with building from source
+ when using the “builtpkgs” source distribution
+
+-------------------------------------------------------------------
Old:
----
racket-8.11-src.tgz
New:
----
racket-8.11.1-src.tgz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ racket.spec ++++++
--- /var/tmp/diff_new_pack.HtQ5ON/_old 2024-01-03 12:27:46.709592647 +0100
+++ /var/tmp/diff_new_pack.HtQ5ON/_new 2024-01-03 12:27:46.709592647 +0100
@@ -18,7 +18,7 @@
Name: racket
-Version: 8.11
+Version: 8.11.1
Release: 0
Summary: Scheme implementation with teaching tools
License: Apache-2.0 OR MIT
++++++ racket-8.11-src.tgz -> racket-8.11.1-src.tgz ++++++
/work/SRC/openSUSE:Factory/racket/racket-8.11-src.tgz /work/SRC/openSUSE:Factory/.racket.new.28375/racket-8.11.1-src.tgz differ: char 5, line 1
1
0