openSUSE Commits
Threads by month
- ----- 2024 -----
- 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
February 2021
- 1 participants
- 2358 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-sshtunnel for openSUSE:Factory checked in at 2021-02-02 14:25:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sshtunnel (Old)
and /work/SRC/openSUSE:Factory/.python-sshtunnel.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sshtunnel"
Tue Feb 2 14:25:41 2021 rev:5 rq:868477 version:0.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sshtunnel/python-sshtunnel.changes 2019-07-22 17:20:02.397900218 +0200
+++ /work/SRC/openSUSE:Factory/.python-sshtunnel.new.28504/python-sshtunnel.changes 2021-02-02 14:26:00.051422532 +0100
@@ -1,0 +2,23 @@
+Mon Feb 1 22:00:48 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 0.4.0:
+ + Change the daemon mod flag for all tunnel threads (is not fully backward
+ compatible) to prevent unexpected hangs (`#219`_) + Add docker based end to end
+ functinal tests for Mongo/Postgres/MySQL
+ + Add docker based end to end hangs tests
+ + Fix host key directory detection
+ + Unify default ssh config folder to `~/.ssh`
+ + Increase open connection timeout to 10 secods
+ + Change default with context behavior to use `.stop(force=True)` on exit
+ + Remove useless `daemon_forward_servers = True` hack for hangs prevention
+ + Set transport keepalive to 5 second by default
+ + Set default transport timeout to 0.1
+ + Deprecate and remove `block_on_close` option
+ + Fix "deadlocks" / "tunneling hangs"
+ + Add `.stop(force=True)` for force close active connections
+ + Fixes bug with orphan thread for a tunnel that is DOWN
+ + Support IPv6 without proxy command. Use built-in paramiko create socket
+ logic. The logic tries to use ipv6 socket family first, then ipv4 socket
+ family.
+
+-------------------------------------------------------------------
Old:
----
sshtunnel-0.1.5.tar.gz
New:
----
sshtunnel-0.4.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sshtunnel.spec ++++++
--- /var/tmp/diff_new_pack.hNM97M/_old 2021-02-02 14:26:00.771423652 +0100
+++ /var/tmp/diff_new_pack.hNM97M/_new 2021-02-02 14:26:00.771423652 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-sshtunnel
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 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 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-sshtunnel
-Version: 0.1.5
+Version: 0.4.0
Release: 0
Summary: SSH tunnels to remote server
License: MIT
@@ -26,7 +26,7 @@
URL: https://github.com/pahaz/sshtunnel/
Source: https://files.pythonhosted.org/packages/source/s/sshtunnel/sshtunnel-%{vers…
BuildRequires: %{python_module mock}
-BuildRequires: %{python_module paramiko >= 1.15.2}
+BuildRequires: %{python_module paramiko >= 2.7.2}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module setuptools}
# for the tests to validate some things
@@ -34,7 +34,7 @@
BuildRequires: openssh
BuildRequires: python-rpm-macros
Requires: openssh
-Requires: python-paramiko >= 1.15.2
+Requires: python-paramiko >= 2.7.2
BuildArch: noarch
%python_subpackages
++++++ sshtunnel-0.1.5.tar.gz -> sshtunnel-0.4.0.tar.gz ++++++
++++ 2441 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-ujson for openSUSE:Factory checked in at 2021-02-02 14:25:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ujson (Old)
and /work/SRC/openSUSE:Factory/.python-ujson.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ujson"
Tue Feb 2 14:25:39 2021 rev:12 rq:868446 version:4.0.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ujson/python-ujson.changes 2020-11-26 23:15:36.245047369 +0100
+++ /work/SRC/openSUSE:Factory/.python-ujson.new.28504/python-ujson.changes 2021-02-02 14:25:56.443416921 +0100
@@ -1,0 +2,10 @@
+Mon Feb 1 18:19:31 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 4.0.2:
+ * Travis CI: Test on 3.9 final, remove 3.8
+ * Toward matching Python standard library output for float
+ * Fix errors on reading long decimal floats
+ * Fix #429: Make empty dict/list indented serialization match stdlib json
+ * Fix dealing with None types
+
+-------------------------------------------------------------------
Old:
----
ujson-4.0.1.tar.gz
New:
----
ujson-4.0.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ujson.spec ++++++
--- /var/tmp/diff_new_pack.4dMvJr/_old 2021-02-02 14:25:59.743422053 +0100
+++ /var/tmp/diff_new_pack.4dMvJr/_new 2021-02-02 14:25:59.747422059 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-ujson
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%global skip_python2 1
Name: python-ujson
-Version: 4.0.1
+Version: 4.0.2
Release: 0
Summary: JSON encoder and decoder for Python
License: BSD-3-Clause
++++++ ujson-4.0.1.tar.gz -> ujson-4.0.2.tar.gz ++++++
/work/SRC/openSUSE:Factory/python-ujson/ujson-4.0.1.tar.gz /work/SRC/openSUSE:Factory/.python-ujson.new.28504/ujson-4.0.2.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 python-hvac for openSUSE:Factory checked in at 2021-02-02 14:25:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hvac (Old)
and /work/SRC/openSUSE:Factory/.python-hvac.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hvac"
Tue Feb 2 14:25:37 2021 rev:5 rq:868438 version:0.10.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-hvac/python-hvac.changes 2020-09-16 19:42:48.967027589 +0200
+++ /work/SRC/openSUSE:Factory/.python-hvac.new.28504/python-hvac.changes 2021-02-02 14:25:54.803414370 +0100
@@ -1,0 +2,14 @@
+Mon Feb 1 18:05:31 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 0.10.6:
+ - Enable response wrapping of PKI secrets. GH-649
+ - Fix OIDC login and add working example. GH-638
+ - Add rabbitmq vhost_topics parameter. GH-626
+ - Expand auth_methods module to support AppRole. GH-637
+ - Template "auth method not implemented" error message. GH-651
+ - Fix health.py read_health_status GET method. GH-653
+ - Fix transit constants for "generate_data_key". GH-632
+ - Fix PUT method in secrets engine kv_v1 to use PUT instead of POST. GH-629
+ - Remove Erroneous json() Calls In rabbitmq Class. GH-624
+
+-------------------------------------------------------------------
Old:
----
v0.10.5.tar.gz
New:
----
v0.10.6.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-hvac.spec ++++++
--- /var/tmp/diff_new_pack.tJbioP/_old 2021-02-02 14:25:55.971416187 +0100
+++ /var/tmp/diff_new_pack.tJbioP/_new 2021-02-02 14:25:55.975416192 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-hvac
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 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 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-hvac
-Version: 0.10.5
+Version: 0.10.6
Release: 0
Summary: HashiCorp Vault API client
License: BSD-3-Clause
++++++ v0.10.5.tar.gz -> v0.10.6.tar.gz ++++++
++++ 2107 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-natsort for openSUSE:Factory checked in at 2021-02-02 14:25:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-natsort (Old)
and /work/SRC/openSUSE:Factory/.python-natsort.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-natsort"
Tue Feb 2 14:25:35 2021 rev:18 rq:868437 version:7.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-natsort/python-natsort.changes 2021-01-20 18:27:46.855537339 +0100
+++ /work/SRC/openSUSE:Factory/.python-natsort.new.28504/python-natsort.changes 2021-02-02 14:25:53.723412690 +0100
@@ -1,0 +2,8 @@
+Mon Feb 1 18:02:55 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 7.1.1:
+ - Use GitHub Actions instead of Travis-CI (issue #125)
+ - No longer pin testing dependencies (issue #126)
+ - Correct a minor typo
+
+-------------------------------------------------------------------
Old:
----
natsort-7.1.0.tar.gz
New:
----
natsort-7.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-natsort.spec ++++++
--- /var/tmp/diff_new_pack.EAJvYP/_old 2021-02-02 14:25:54.467413848 +0100
+++ /var/tmp/diff_new_pack.EAJvYP/_new 2021-02-02 14:25:54.475413860 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-natsort
-Version: 7.1.0
+Version: 7.1.1
Release: 0
Summary: Natural sorting in Python
License: MIT
++++++ natsort-7.1.0.tar.gz -> natsort-7.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/CHANGELOG.md new/natsort-7.1.1/CHANGELOG.md
--- old/natsort-7.1.0/CHANGELOG.md 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/CHANGELOG.md 2021-01-25 06:20:07.000000000 +0100
@@ -1,6 +1,16 @@
Unreleased
---
+[7.1.1] - 2021-01-24
+---
+
+### Changed
+ - Use GitHub Actions instead of Travis-CI (issue #125)
+ - No longer pin testing dependencies (issue #126)
+
+### Fixed
+ - Correct a minor typo ([@madphysicist](https://github.com/madphysicist), issue #127)
+
[7.1.0] - 2020-11-19
---
@@ -550,6 +560,7 @@
- Sorting algorithm to support floats (including exponentials) and basic version number support
<!---Comparison links-->
+[7.1.1]: https://github.com/SethMMorton/natsort/compare/7.1.0...7.1.1
[7.1.0]: https://github.com/SethMMorton/natsort/compare/7.0.1...7.1.0
[7.0.1]: https://github.com/SethMMorton/natsort/compare/7.0.0...7.0.1
[7.0.0]: https://github.com/SethMMorton/natsort/compare/6.2.0...7.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/PKG-INFO new/natsort-7.1.1/PKG-INFO
--- old/natsort-7.1.0/PKG-INFO 2020-11-21 02:39:03.000000000 +0100
+++ new/natsort-7.1.1/PKG-INFO 2021-01-25 06:20:09.147655500 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: natsort
-Version: 7.1.0
+Version: 7.1.1
Summary: Simple yet flexible natural sorting in Python.
Home-page: https://github.com/SethMMorton/natsort
Author: Seth M. Morton
@@ -18,15 +18,12 @@
.. image:: https://img.shields.io/pypi/l/natsort.svg
:target: https://github.com/SethMMorton/natsort/blob/master/LICENSE
- .. image:: https://img.shields.io/travis/SethMMorton/natsort/master.svg?label=travis-ci
- :target: https://travis-ci.com/SethMMorton/natsort
+ .. image:: https://github.com/SethMMorton/natsort/workflows/Tests/badge.svg
+ :target: https://github.com/SethMMorton/natsort/actions
.. image:: https://codecov.io/gh/SethMMorton/natsort/branch/master/graph/badge.svg
:target: https://codecov.io/gh/SethMMorton/natsort
- .. image:: https://api.codacy.com/project/badge/Grade/f2bf04b1fc5d4792bf546f6e497cf4b8
- :target: https://www.codacy.com/app/SethMMorton/natsort
-
Simple yet flexible natural sorting in Python.
- Source Code: https://github.com/SethMMorton/natsort
@@ -554,5 +551,5 @@
Classifier: Topic :: Text Processing
Requires-Python: >=3.4
Description-Content-Type: text/x-rst
-Provides-Extra: icu
Provides-Extra: fast
+Provides-Extra: icu
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/README.rst new/natsort-7.1.1/README.rst
--- old/natsort-7.1.0/README.rst 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/README.rst 2021-01-25 06:20:07.000000000 +0100
@@ -10,15 +10,12 @@
.. image:: https://img.shields.io/pypi/l/natsort.svg
:target: https://github.com/SethMMorton/natsort/blob/master/LICENSE
-.. image:: https://img.shields.io/travis/SethMMorton/natsort/master.svg?label=travis-ci
- :target: https://travis-ci.com/SethMMorton/natsort
+.. image:: https://github.com/SethMMorton/natsort/workflows/Tests/badge.svg
+ :target: https://github.com/SethMMorton/natsort/actions
.. image:: https://codecov.io/gh/SethMMorton/natsort/branch/master/graph/badge.svg
:target: https://codecov.io/gh/SethMMorton/natsort
-.. image:: https://api.codacy.com/project/badge/Grade/f2bf04b1fc5d4792bf546f6e497cf4b8
- :target: https://www.codacy.com/app/SethMMorton/natsort
-
Simple yet flexible natural sorting in Python.
- Source Code: https://github.com/SethMMorton/natsort
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/dev/README.md new/natsort-7.1.1/dev/README.md
--- old/natsort-7.1.0/dev/README.md 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/dev/README.md 2021-01-25 06:20:07.000000000 +0100
@@ -9,5 +9,5 @@
- `clean.py` - This file cleans most files that are created during development.
Run in the project home directory.
It is not really intended to be called directly, but instead through `tox -e clean`.
-- `requirements.in` - Our direct requirements to run tests.
-- `requirements.txt` - All pinned requirements to run tests.
+- `generate_new_unicode_numbers.py` is used to update `natsort/unicode_numeric_hex.py`
+ when new Python versions are released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/dev/bump.py new/natsort-7.1.1/dev/bump.py
--- old/natsort-7.1.0/dev/bump.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/dev/bump.py 2021-01-25 06:20:07.000000000 +0100
@@ -33,7 +33,9 @@
cmd = ["bump2version", *args, severity]
try:
if catch:
- return subprocess.run(cmd, check=True, capture_output=True, text=True).stdout
+ return subprocess.run(
+ cmd, check=True, capture_output=True, text=True
+ ).stdout
else:
subprocess.run(cmd, check=True, text=True)
except subprocess.CalledProcessError as e:
@@ -57,8 +59,8 @@
"<!---Comparison links-->\n[{new}]: {url}/{current}...{new}".format(
new=data["new_version"],
current=data["current_version"],
- url="https://github.com/SethMMorton/natsort/compare"
- )
+ url="https://github.com/SethMMorton/natsort/compare",
+ ),
)
with open("CHANGELOG.md", "w") as fl:
fl.write(changelog)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/dev/requirements.in new/natsort-7.1.1/dev/requirements.in
--- old/natsort-7.1.0/dev/requirements.in 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/dev/requirements.in 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-coverage
-pytest
-pytest-cov
-pytest-mock
-hypothesis
-# pytest-faulthandler; platform_python_implementation == 'CPython'
-semver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/dev/requirements.txt new/natsort-7.1.1/dev/requirements.txt
--- old/natsort-7.1.0/dev/requirements.txt 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/dev/requirements.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-#
-# This file is autogenerated by pip-compile
-# To update, run:
-#
-# pip-compile requirements.in
-#
-attrs==19.3.0 # via hypothesis, pytest
-coverage==5.0.2
-hypothesis==5.1.1
-importlib-metadata==1.3.0 # via pluggy, pytest
-more-itertools==8.0.2 # via pytest, zipp
-packaging==20.0 # via pytest
-pluggy==0.13.1 # via pytest
-py==1.8.1 # via pytest
-pyparsing==2.4.6 # via packaging
-pytest-cov==2.8.1
-pytest-mock==2.0.0
-pytest==5.3.2
-semver==2.9.0
-six==1.13.0 # via packaging
-sortedcontainers==2.1.0 # via hypothesis
-wcwidth==0.1.8 # via pytest
-zipp==0.6.0 # via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/docs/conf.py new/natsort-7.1.1/docs/conf.py
--- old/natsort-7.1.0/docs/conf.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/docs/conf.py 2021-01-25 06:20:07.000000000 +0100
@@ -28,39 +28,39 @@
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
- 'sphinx.ext.autodoc',
- 'sphinx.ext.autosummary',
- 'sphinx.ext.intersphinx',
- 'sphinx.ext.mathjax',
- 'sphinx.ext.napoleon',
- 'm2r',
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.mathjax",
+ "sphinx.ext.napoleon",
+ "m2r2",
]
# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
# The suffix of source filenames.
-source_suffix = ['.rst', '.md']
+source_suffix = [".rst", ".md"]
# The encoding of source files.
# source_encoding = 'utf-8-sig'
# The master toctree document.
-master_doc = 'index'
+master_doc = "index"
# General information about the project.
-project = 'natsort'
+project = "natsort"
# noinspection PyShadowingBuiltins
-copyright = '2014, Seth M. Morton'
+copyright = "2014, Seth M. Morton"
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The full version, including alpha/beta/rc tags.
-release = '7.1.0'
+release = "7.1.1"
# The short X.Y version.
-version = '.'.join(release.split('.')[0:2])
+version = ".".join(release.split(".")[0:2])
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@@ -92,8 +92,8 @@
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-highlight_language = 'python'
+pygments_style = "sphinx"
+highlight_language = "python"
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
@@ -106,13 +106,13 @@
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-on_rtd = os.environ.get('READTHEDOCS') == 'True'
+on_rtd = os.environ.get("READTHEDOCS") == "True"
if on_rtd:
- html_theme = 'default'
+ html_theme = "default"
else:
import sphinx_rtd_theme # noqa: F401
- html_theme = 'sphinx_rtd_theme'
+ html_theme = "sphinx_rtd_theme"
# html_theme = 'solar'
# Theme options are theme-specific and customize the look and feel of a theme
@@ -121,7 +121,7 @@
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = ['.']
+html_theme_path = ["."]
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
@@ -191,17 +191,15 @@
# html_file_suffix = None
# Output file base name for HTML help builder.
-htmlhelp_basename = 'natsortdoc'
+htmlhelp_basename = "natsortdoc"
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
# 'papersize': 'letterpaper',
-
# The font size ('10pt', '11pt' or '12pt').
# 'pointsize': '10pt',
-
# Additional stuff for the LaTeX preamble.
# 'preamble': '',
}
@@ -210,8 +208,7 @@
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
- ('index', 'natsort.tex', 'natsort Documentation',
- 'Seth M. Morton', 'manual'),
+ ("index", "natsort.tex", "natsort Documentation", "Seth M. Morton", "manual"),
]
# The name of an image file (relative to this directory) to place at the top of
@@ -239,10 +236,7 @@
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
-man_pages = [
- ('index', 'natsort', 'natsort Documentation',
- ['Seth M. Morton'], 1)
-]
+man_pages = [("index", "natsort", "natsort Documentation", ["Seth M. Morton"], 1)]
# If true, show URL addresses after external links.
# man_show_urls = False
@@ -254,9 +248,15 @@
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- ('index', 'natsort', 'natsort Documentation',
- 'Seth M. Morton', 'natsort', 'One line description of project.',
- 'Miscellaneous'),
+ (
+ "index",
+ "natsort",
+ "natsort Documentation",
+ "Seth M. Morton",
+ "natsort",
+ "One line description of project.",
+ "Miscellaneous",
+ ),
]
# Documents to append as an appendix to all manuals.
@@ -273,4 +273,4 @@
# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}
+intersphinx_mapping = {"python": ("https://docs.python.org/3", None)}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/docs/examples.rst new/natsort-7.1.1/docs/examples.rst
--- old/natsort-7.1.0/docs/examples.rst 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/docs/examples.rst 2021-01-25 06:20:07.000000000 +0100
@@ -81,9 +81,9 @@
.. code-block:: pycon
- >>> from semver import parse_version_info
+ >>> from semver import VersionInfo
>>> a = ['3.4.5-pre.1', '3.4.5', '3.4.5-pre.2+build.4']
- >>> sorted(a, key=parse_version_info)
+ >>> sorted(a, key=VersionInfo.parse)
['3.4.5-pre.1', '3.4.5-pre.2+build.4', '3.4.5']
.. _path_sort:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/docs/locale_issues.rst new/natsort-7.1.1/docs/locale_issues.rst
--- old/natsort-7.1.0/docs/locale_issues.rst 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/docs/locale_issues.rst 2021-01-25 06:20:07.000000000 +0100
@@ -23,7 +23,7 @@
When :func:`~natsort.natsort_keygen` is called it returns a key function that
hard-codes the provided settings. This means that the key returned when
-``ns.LOCALE`` is used contins the settings specifed by the locale
+``ns.LOCALE`` is used contains the settings specifed by the locale
*loaded at the time the key is generated*. If you change the locale,
you should regenerate the key to account for the new locale.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/docs/requirements.in new/natsort-7.1.1/docs/requirements.in
--- old/natsort-7.1.0/docs/requirements.in 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/docs/requirements.in 2021-01-25 06:20:07.000000000 +0100
@@ -1 +1 @@
-m2r @ git+https://github.com/crossnox/m2r@dev#egg=m2r
+m2r2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/docs/requirements.txt new/natsort-7.1.1/docs/requirements.txt
--- old/natsort-7.1.0/docs/requirements.txt 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/docs/requirements.txt 2021-01-25 06:20:07.000000000 +0100
@@ -4,6 +4,6 @@
#
# pip-compile
#
-docutils==0.16 # via m2r
-git+https://github.com/crossnox/m2r@dev#egg=m2r # via -r requirements.in
-mistune==0.8.4 # via m2r
+docutils==0.16 # via m2r2
+m2r2==0.2.7 # via -r requirements.in
+mistune==0.8.4 # via m2r2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/natsort/__init__.py new/natsort-7.1.1/natsort/__init__.py
--- old/natsort-7.1.0/natsort/__init__.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/natsort/__init__.py 2021-01-25 06:20:07.000000000 +0100
@@ -21,7 +21,7 @@
)
from natsort.utils import chain_functions
-__version__ = "7.1.0"
+__version__ = "7.1.1"
__all__ = [
"natsort_key",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/natsort/compat/fake_fastnumbers.py new/natsort-7.1.1/natsort/compat/fake_fastnumbers.py
--- old/natsort-7.1.0/natsort/compat/fake_fastnumbers.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/natsort/compat/fake_fastnumbers.py 2021-01-25 06:20:07.000000000 +0100
@@ -81,10 +81,7 @@
# noinspection PyIncorrectDocstring
def fast_int(
- x,
- key=lambda x: x,
- _uni=unicodedata.digit,
- _first_char=POTENTIAL_FIRST_CHAR,
+ x, key=lambda x: x, _uni=unicodedata.digit, _first_char=POTENTIAL_FIRST_CHAR
):
"""
Convert a string to a int quickly, return input as-is if not possible.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/natsort/natsort.py new/natsort-7.1.1/natsort/natsort.py
--- old/natsort-7.1.0/natsort/natsort.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/natsort/natsort.py 2021-01-25 06:20:07.000000000 +0100
@@ -646,9 +646,7 @@
except ImportError:
# No ICU installed
def os_sort_keygen(key=None):
- return natsort_keygen(
- key=key, alg=ns.LOCALE | ns.PATH | ns.IGNORECASE
- )
+ return natsort_keygen(key=key, alg=ns.LOCALE | ns.PATH | ns.IGNORECASE)
else:
# ICU installed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/natsort/ns_enum.py new/natsort-7.1.1/natsort/ns_enum.py
--- old/natsort-7.1.0/natsort/ns_enum.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/natsort/ns_enum.py 2021-01-25 06:20:07.000000000 +0100
@@ -65,9 +65,7 @@
combined_value |= enum_fields[combo_name]
enum_fields[name] = combined_value
-enum_fields.update(
- (alias, enum_fields[name]) for alias, name in enum_aliases
-)
+enum_fields.update((alias, enum_fields[name]) for alias, name in enum_aliases)
# Subclass the namedtuple to improve the docstring.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/natsort.egg-info/PKG-INFO new/natsort-7.1.1/natsort.egg-info/PKG-INFO
--- old/natsort-7.1.0/natsort.egg-info/PKG-INFO 2020-11-21 02:39:03.000000000 +0100
+++ new/natsort-7.1.1/natsort.egg-info/PKG-INFO 2021-01-25 06:20:09.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: natsort
-Version: 7.1.0
+Version: 7.1.1
Summary: Simple yet flexible natural sorting in Python.
Home-page: https://github.com/SethMMorton/natsort
Author: Seth M. Morton
@@ -18,15 +18,12 @@
.. image:: https://img.shields.io/pypi/l/natsort.svg
:target: https://github.com/SethMMorton/natsort/blob/master/LICENSE
- .. image:: https://img.shields.io/travis/SethMMorton/natsort/master.svg?label=travis-ci
- :target: https://travis-ci.com/SethMMorton/natsort
+ .. image:: https://github.com/SethMMorton/natsort/workflows/Tests/badge.svg
+ :target: https://github.com/SethMMorton/natsort/actions
.. image:: https://codecov.io/gh/SethMMorton/natsort/branch/master/graph/badge.svg
:target: https://codecov.io/gh/SethMMorton/natsort
- .. image:: https://api.codacy.com/project/badge/Grade/f2bf04b1fc5d4792bf546f6e497cf4b8
- :target: https://www.codacy.com/app/SethMMorton/natsort
-
Simple yet flexible natural sorting in Python.
- Source Code: https://github.com/SethMMorton/natsort
@@ -554,5 +551,5 @@
Classifier: Topic :: Text Processing
Requires-Python: >=3.4
Description-Content-Type: text/x-rst
-Provides-Extra: icu
Provides-Extra: fast
+Provides-Extra: icu
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/natsort.egg-info/SOURCES.txt new/natsort-7.1.1/natsort.egg-info/SOURCES.txt
--- old/natsort-7.1.0/natsort.egg-info/SOURCES.txt 2020-11-21 02:39:03.000000000 +0100
+++ new/natsort-7.1.1/natsort.egg-info/SOURCES.txt 2021-01-25 06:20:09.000000000 +0100
@@ -10,8 +10,6 @@
dev/bump.py
dev/clean.py
dev/generate_new_unicode_numbers.py
-dev/requirements.in
-dev/requirements.txt
docs/api.rst
docs/changelog.rst
docs/conf.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/setup.cfg new/natsort-7.1.1/setup.cfg
--- old/natsort-7.1.0/setup.cfg 2020-11-21 02:39:03.000000000 +0100
+++ new/natsort-7.1.1/setup.cfg 2021-01-25 06:20:09.151655400 +0100
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 7.1.0
+current_version = 7.1.1
commit = True
tag = True
tag_name = {new_version}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/setup.py new/natsort-7.1.1/setup.py
--- old/natsort-7.1.0/setup.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/setup.py 2021-01-25 06:20:07.000000000 +0100
@@ -1,14 +1,12 @@
#! /usr/bin/env python
from setuptools import find_packages, setup
+
setup(
- name='natsort',
- version='7.1.0',
+ name="natsort",
+ version="7.1.1",
packages=find_packages(),
- entry_points={'console_scripts': ['natsort = natsort.__main__:main']},
+ entry_points={"console_scripts": ["natsort = natsort.__main__:main"]},
python_requires=">=3.4",
- extras_require={
- 'fast': ["fastnumbers >= 2.0.0"],
- 'icu': ["PyICU >= 1.0.0"]
- }
+ extras_require={"fast": ["fastnumbers >= 2.0.0"], "icu": ["PyICU >= 1.0.0"]},
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/conftest.py new/natsort-7.1.1/tests/conftest.py
--- old/natsort-7.1.0/tests/conftest.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/conftest.py 2021-01-25 06:20:07.000000000 +0100
@@ -12,8 +12,7 @@
# For some reason it thinks that the text/binary generation is too
# slow then causes the tests to fail.
hypothesis.settings.register_profile(
- "slow-tests",
- suppress_health_check=[hypothesis.HealthCheck.too_slow],
+ "slow-tests", suppress_health_check=[hypothesis.HealthCheck.too_slow]
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_final_data_transform_factory.py new/natsort-7.1.1/tests/test_final_data_transform_factory.py
--- old/natsort-7.1.0/tests/test_final_data_transform_factory.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_final_data_transform_factory.py 2021-01-25 06:20:07.000000000 +0100
@@ -26,8 +26,8 @@
(ns.LOCALE | ns.UNGROUPLETTERS | NS_DUMB, lambda x: x),
(ns.LOCALE | ns.UNGROUPLETTERS | ns.LOWERCASEFIRST, lambda x: x),
(
- ns.LOCALE | ns.UNGROUPLETTERS | NS_DUMB | ns.LOWERCASEFIRST,
- lambda x: x.swapcase(),
+ ns.LOCALE | ns.UNGROUPLETTERS | NS_DUMB | ns.LOWERCASEFIRST,
+ lambda x: x.swapcase(),
),
],
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_main.py new/natsort-7.1.1/tests/test_main.py
--- old/natsort-7.1.0/tests/test_main.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_main.py 2021-01-25 06:20:07.000000000 +0100
@@ -151,11 +151,11 @@
assert range_check(6.4, 30) == (6.4, 30.0)
-@given(x=floats(allow_nan=False, min_value=-1E8, max_value=1E8) | integers(), d=data())
+@given(x=floats(allow_nan=False, min_value=-1e8, max_value=1e8) | integers(), d=data())
def test_range_check_returns_range_as_is_if_first_is_less_than_second(x, d):
# Pull data such that the first is less than the second.
if isinstance(x, float):
- y = d.draw(floats(min_value=x + 1.0, max_value=1E9, allow_nan=False))
+ y = d.draw(floats(min_value=x + 1.0, max_value=1e9, allow_nan=False))
else:
y = d.draw(integers(min_value=x + 1))
assert range_check(x, y) == (x, y)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_natsorted.py new/natsort-7.1.1/tests/test_natsorted.py
--- old/natsort-7.1.0/tests/test_natsorted.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_natsorted.py 2021-01-25 06:20:07.000000000 +0100
@@ -88,12 +88,12 @@
@pytest.mark.parametrize(
"alg, expected, slc",
[
- (ns.DEFAULT, [float("nan"), 5, "25", 1E40], slice(1, None)),
- (ns.NANLAST, [5, "25", 1E40, float("nan")], slice(None, 3)),
+ (ns.DEFAULT, [float("nan"), 5, "25", 1e40], slice(1, None)),
+ (ns.NANLAST, [5, "25", 1e40, float("nan")], slice(None, 3)),
],
)
def test_natsorted_handles_nan(alg, expected, slc):
- given = ["25", 5, float("nan"), 1E40]
+ given = ["25", 5, float("nan"), 1e40]
# The slice is because NaN != NaN
# noinspection PyUnresolvedReferences
assert natsorted(given, alg=alg)[slc] == expected[slc]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_natsorted_convenience.py new/natsort-7.1.1/tests/test_natsorted_convenience.py
--- old/natsort-7.1.0/tests/test_natsorted_convenience.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_natsorted_convenience.py 2021-01-25 06:20:07.000000000 +0100
@@ -43,9 +43,7 @@
int_obj = 14
assert func(b"bytes") == str_obj
assert func(int_obj) is int_obj # returns as-is, same object ID
- assert (
- func(str_obj) is str_obj
- ) # same object returned b/c only bytes has decode
+ assert func(str_obj) is str_obj # same object returned b/c only bytes has decode
def test_as_ascii_converts_bytes_to_ascii():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_parse_string_function.py new/natsort-7.1.1/tests/test_parse_string_function.py
--- old/natsort-7.1.0/tests/test_parse_string_function.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_parse_string_function.py 2021-01-25 06:20:07.000000000 +0100
@@ -33,12 +33,11 @@
return t
-(a)pytest.fixture
-def parse_string_func(request):
+def parse_string_func_factory(alg):
"""A parse_string_factory result with sample arguments."""
sep = ""
return parse_string_factory(
- request.param, # algorirhm
+ alg,
sep,
NumRegex.int_nosign().split,
input_transform,
@@ -47,22 +46,21 @@
)
-(a)pytest.mark.parametrize("parse_string_func", [ns.DEFAULT], indirect=True)
@given(x=floats() | integers())
-def test_parse_string_factory_raises_type_error_if_given_number(x, parse_string_func):
+def test_parse_string_factory_raises_type_error_if_given_number(x):
+ parse_string_func = parse_string_func_factory(ns.DEFAULT)
with pytest.raises(TypeError):
assert parse_string_func(x)
# noinspection PyCallingNonCallable
@pytest.mark.parametrize(
- "parse_string_func, orig_func",
+ "alg, orig_func",
[
(ns.DEFAULT, lambda x: x.upper()),
(ns.LOCALE, lambda x: x.upper()),
(ns.LOCALE | NS_DUMB, lambda x: x), # This changes the "original" handling.
],
- indirect=["parse_string_func"],
)
@given(
x=lists(
@@ -70,7 +68,8 @@
)
)
@pytest.mark.usefixtures("with_locale_en_us")
-def test_parse_string_factory_invariance(x, parse_string_func, orig_func):
+def test_parse_string_factory_invariance(x, alg, orig_func):
+ parse_string_func = parse_string_func_factory(alg)
# parse_string_factory is the high-level combination of several dedicated
# functions involved in splitting and manipulating a string. The details of
# what those functions do is not relevant to testing parse_string_factory.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_regex.py new/natsort-7.1.1/tests/test_regex.py
--- old/natsort-7.1.0/tests/test_regex.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_regex.py 2021-01-25 06:20:07.000000000 +0100
@@ -81,7 +81,7 @@
f_s: ["", "12", "", "���", "", "���", "", "���", "", "���", "", "���", ""],
f_ue: ["", "12", "", "���", "", "���", "", "���", "", "���", "", "���", ""],
f_se: ["", "12", "", "���", "", "���", "", "���", "", "���", "", "���", ""],
- }
+ },
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tests/test_string_component_transform_factory.py new/natsort-7.1.1/tests/test_string_component_transform_factory.py
--- old/natsort-7.1.0/tests/test_string_component_transform_factory.py 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tests/test_string_component_transform_factory.py 2021-01-25 06:20:07.000000000 +0100
@@ -15,9 +15,7 @@
# library on BSD systems that has nothing to do with natsort (a ValueError is
# raised by strxfrm). Let's filter them out.
try:
- bad_uni_chars = frozenset(
- chr(x) for x in range(0X10fefd, 0X10ffff + 1)
- )
+ bad_uni_chars = frozenset(chr(x) for x in range(0x10FEFD, 0x10FFFF + 1))
except ValueError:
# Narrow unicode build... no worries.
bad_uni_chars = frozenset()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/natsort-7.1.0/tox.ini new/natsort-7.1.1/tox.ini
--- old/natsort-7.1.0/tox.ini 2020-11-21 02:38:43.000000000 +0100
+++ new/natsort-7.1.1/tox.ini 2021-01-25 06:20:07.000000000 +0100
@@ -20,7 +20,12 @@
passenv =
WITH_EXTRAS
deps =
- -r dev/requirements.txt
+ coverage
+ pytest
+ pytest-cov
+ pytest-mock
+ hypothesis
+ semver
extras =
{env:WITH_EXTRAS:}
commands =
@@ -52,7 +57,7 @@
# will already be installed on readthedocs.
[testenv:docs]
deps =
- sphinx < 3.3.0
+ sphinx
sphinx_rtd_theme
-r docs/requirements.txt
commands =
@@ -83,3 +88,12 @@
deps =
commands = {envpython} dev/clean.py
skip_install = true
+
+# Get GitHub actions to run the correct tox environment
+[gh-actions]
+python =
+ 3.5: py35
+ 3.6: py36
+ 3.7: py37
+ 3.8: py38
+ 3.9: py39
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-cfn-lint for openSUSE:Factory checked in at 2021-02-02 14:25:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-cfn-lint (Old)
and /work/SRC/openSUSE:Factory/.python-cfn-lint.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cfn-lint"
Tue Feb 2 14:25:32 2021 rev:9 rq:868436 version:0.44.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-cfn-lint/python-cfn-lint.changes 2021-01-04 19:09:26.327393359 +0100
+++ /work/SRC/openSUSE:Factory/.python-cfn-lint.new.28504/python-cfn-lint.changes 2021-02-02 14:25:49.771406544 +0100
@@ -1,0 +2,16 @@
+Mon Feb 1 17:47:47 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 0.44.5:
+ - Update resource specs to `25.0.0`
+ - Add support for `AWS::SSO::PermissionSet` `InlinePolicy`
+ - Update resource specs to `24.0.0`
+ - Update `AWS::DataBrew::Recipe.Action` `Parameters` `Type` to `Map`
+ - Fix an issue when we parse a json string in [E2507] and used the parsed
+ json to append to the location
+ - Update spec files as of 2021.01.08
+ - Update `AWS::Lambda::Function.MemorySize` to new service limits
+ - Replace `ContentUri` to a s3 path when doing a SAM transform
+ - Add `RouteSelectionExpression` to exludes on rule
+ - Remove newlines from parseable format messages
+
+-------------------------------------------------------------------
Old:
----
cfn-python-lint-0.44.2.tar.gz
New:
----
cfn-python-lint-0.44.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-cfn-lint.spec ++++++
--- /var/tmp/diff_new_pack.PGMYxu/_old 2021-02-02 14:25:50.695407981 +0100
+++ /var/tmp/diff_new_pack.PGMYxu/_new 2021-02-02 14:25:50.699407987 +0100
@@ -20,8 +20,9 @@
%if 0%{?suse_version} >= 1500
%define skip_python2 1
%endif
+%define skip_python36 1
Name: python-cfn-lint
-Version: 0.44.2
+Version: 0.44.5
Release: 0
Summary: Tool to checks cloudformation for practices and behaviour
License: MIT
++++++ cfn-python-lint-0.44.2.tar.gz -> cfn-python-lint-0.44.5.tar.gz ++++++
++++ 109867 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-aniso8601 for openSUSE:Factory checked in at 2021-02-02 14:25:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-aniso8601 (Old)
and /work/SRC/openSUSE:Factory/.python-aniso8601.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-aniso8601"
Tue Feb 2 14:25:30 2021 rev:9 rq:868435 version:8.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-aniso8601/python-aniso8601.changes 2020-12-21 10:26:55.308218270 +0100
+++ /work/SRC/openSUSE:Factory/.python-aniso8601.new.28504/python-aniso8601.changes 2021-02-02 14:25:43.883397387 +0100
@@ -1,0 +2,13 @@
+Mon Feb 1 17:43:29 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 8.1.1:
+ * Deprecate running tests with python setup.py tests as the test suite
+ support in Setuptools is deprecated
+ * Add version to __init__.py
+ * Cleaner reading of README.rst into the long_description field of setup.py
+ * Define long_description_content_type as text/x-rst
+ * Simplify Sphinx configuration
+ * Add compat.is_string method, returns True for str, unicode types, False
+ otherwise, used to fix 28
+
+-------------------------------------------------------------------
Old:
----
aniso8601-8.1.0.tar.gz
New:
----
aniso8601-8.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-aniso8601.spec ++++++
--- /var/tmp/diff_new_pack.sPYRpc/_old 2021-02-02 14:25:44.423398226 +0100
+++ /var/tmp/diff_new_pack.sPYRpc/_new 2021-02-02 14:25:44.427398233 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-aniso8601
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
%define modname aniso8601
%bcond_without python2
Name: python-%{modname}
-Version: 8.1.0
+Version: 8.1.1
Release: 0
Summary: A library for parsing ISO 8601 strings
License: BSD-3-Clause
++++++ aniso8601-8.1.0.tar.gz -> aniso8601-8.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/PKG-INFO new/aniso8601-8.1.1/PKG-INFO
--- old/aniso8601-8.1.0/PKG-INFO 2020-11-30 21:16:01.733981800 +0100
+++ new/aniso8601-8.1.1/PKG-INFO 2021-01-29 21:58:42.280650100 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
Name: aniso8601
-Version: 8.1.0
+Version: 8.1.1
Summary: A library for parsing ISO 8601 strings.
Home-page: https://bitbucket.org/nielsenb/aniso8601
Author: Brandon Nielsen
@@ -386,9 +386,9 @@
Tests
-----
- Tests can be run using `setuptools <https://setuptools.readthedocs.io/en/latest/setuptools.html>`::
+ Tests can be run using the `unittest testing framework <https://docs.python.org/3/library/unittest.html>`_::
- $ python setup.py test
+ $ python -m unittest discover aniso8601
Contributing
============
@@ -424,3 +424,4 @@
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/README.rst new/aniso8601-8.1.1/README.rst
--- old/aniso8601-8.1.0/README.rst 2020-11-24 03:24:37.000000000 +0100
+++ new/aniso8601-8.1.1/README.rst 2020-12-01 02:23:07.000000000 +0100
@@ -375,9 +375,9 @@
Tests
-----
-Tests can be run using `setuptools <https://setuptools.readthedocs.io/en/latest/setuptools.html>`::
+Tests can be run using the `unittest testing framework <https://docs.python.org/3/library/unittest.html>`_::
- $ python setup.py test
+ $ python -m unittest discover aniso8601
Contributing
============
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/__init__.py new/aniso8601-8.1.1/aniso8601/__init__.py
--- old/aniso8601-8.1.0/aniso8601/__init__.py 2020-11-23 20:30:16.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/__init__.py 2021-01-29 21:56:45.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
@@ -11,3 +11,5 @@
from aniso8601.date import parse_date, get_date_resolution
from aniso8601.duration import parse_duration
from aniso8601.interval import parse_interval, parse_repeating_interval
+
+__version__ = "8.1.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/builders/__init__.py new/aniso8601-8.1.1/aniso8601/builders/__init__.py
--- old/aniso8601-8.1.0/aniso8601/builders/__init__.py 2020-11-23 20:31:43.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/builders/__init__.py 2021-01-29 21:53:37.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/builders/python.py new/aniso8601-8.1.1/aniso8601/builders/python.py
--- old/aniso8601-8.1.0/aniso8601/builders/python.py 2020-11-23 20:31:59.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/builders/python.py 2021-01-29 21:53:26.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/builders/tests/__init__.py new/aniso8601-8.1.1/aniso8601/builders/tests/__init__.py
--- old/aniso8601-8.1.0/aniso8601/builders/tests/__init__.py 2020-11-23 20:32:57.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/builders/tests/__init__.py 2021-01-29 21:54:19.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/builders/tests/test_init.py new/aniso8601-8.1.1/aniso8601/builders/tests/test_init.py
--- old/aniso8601-8.1.0/aniso8601/builders/tests/test_init.py 2020-11-23 20:32:42.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/builders/tests/test_init.py 2021-01-29 21:54:07.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/builders/tests/test_python.py new/aniso8601-8.1.1/aniso8601/builders/tests/test_python.py
--- old/aniso8601-8.1.0/aniso8601/builders/tests/test_python.py 2020-11-23 20:33:05.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/builders/tests/test_python.py 2021-01-29 21:53:55.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/compat.py new/aniso8601-8.1.1/aniso8601/compat.py
--- old/aniso8601-8.1.0/aniso8601/compat.py 2020-11-23 20:31:26.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/compat.py 2021-01-29 21:53:11.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
@@ -14,3 +14,9 @@
range = xrange
else:
range = range
+
+def is_string(tocheck):
+ if PY2:
+ return isinstance(tocheck, str) or isinstance(tocheck, unicode)
+
+ return isinstance(tocheck, str)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/date.py new/aniso8601-8.1.1/aniso8601/date.py
--- old/aniso8601-8.1.0/aniso8601/date.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/date.py 2021-01-29 21:53:00.000000000 +0100
@@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
# of the BSD license. See the LICENSE file for details.
-from aniso8601.exceptions import ISOFormatError
from aniso8601.builders.python import PythonTimeBuilder
+from aniso8601.compat import is_string
+from aniso8601.exceptions import ISOFormatError
from aniso8601.resolution import DateResolution
def get_date_resolution(isodatestr):
@@ -23,7 +24,7 @@
#YYYYWwwD
#YYYY-DDD
#YYYYDDD
- if not isinstance(isodatestr, str):
+ if is_string(isodatestr) is False:
raise ValueError('Date must be string.')
if isodatestr.startswith('+') or isodatestr.startswith('-'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/decimalfraction.py new/aniso8601-8.1.1/aniso8601/decimalfraction.py
--- old/aniso8601-8.1.0/aniso8601/decimalfraction.py 2020-11-23 20:30:56.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/decimalfraction.py 2021-01-29 21:52:49.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/duration.py new/aniso8601-8.1.1/aniso8601/duration.py
--- old/aniso8601-8.1.0/aniso8601/duration.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/duration.py 2021-01-29 21:52:40.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
@@ -21,7 +21,7 @@
#PnYnMnDTnHnMnS (or any reduced precision equivalent)
#P<date>T<time>
- if not isinstance(isodurationstr, str):
+ if compat.is_string(isodurationstr) is False:
raise ValueError('Duration must be string.')
if len(isodurationstr) == 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/exceptions.py new/aniso8601-8.1.1/aniso8601/exceptions.py
--- old/aniso8601-8.1.0/aniso8601/exceptions.py 2020-11-23 20:30:27.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/exceptions.py 2021-01-29 21:52:26.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/interval.py new/aniso8601-8.1.1/aniso8601/interval.py
--- old/aniso8601-8.1.0/aniso8601/interval.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/interval.py 2021-01-29 21:52:02.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
@@ -8,6 +8,7 @@
from aniso8601.builders import TupleBuilder
from aniso8601.builders.python import PythonTimeBuilder
+from aniso8601.compat import is_string
from aniso8601.date import parse_date
from aniso8601.duration import parse_duration
from aniso8601.exceptions import ISOFormatError
@@ -32,7 +33,7 @@
#Is expressly not supported as there is no way to provide the additional
#required context.
- if not isinstance(isointervalstr, str):
+ if is_string(isointervalstr) is False:
raise ValueError('Interval must be string.')
if len(isointervalstr) == 0:
@@ -58,7 +59,7 @@
#Rnn/<interval>
#R/<interval>
- if not isinstance(isointervalstr, str):
+ if is_string(isointervalstr) is False:
raise ValueError('Interval must be string.')
if len(isointervalstr) == 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/resolution.py new/aniso8601-8.1.1/aniso8601/resolution.py
--- old/aniso8601-8.1.0/aniso8601/resolution.py 2020-11-23 20:29:50.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/resolution.py 2021-01-29 21:51:48.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/__init__.py new/aniso8601-8.1.1/aniso8601/tests/__init__.py
--- old/aniso8601-8.1.0/aniso8601/tests/__init__.py 2020-11-23 20:29:30.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/__init__.py 2021-01-29 21:50:39.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/compat.py new/aniso8601-8.1.1/aniso8601/tests/compat.py
--- old/aniso8601-8.1.0/aniso8601/tests/compat.py 2020-11-23 20:29:15.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/compat.py 2021-01-29 21:50:54.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_compat.py new/aniso8601-8.1.1/aniso8601/tests/test_compat.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_compat.py 1970-01-01 01:00:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_compat.py 2021-01-29 21:49:14.000000000 +0100
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021, Brandon Nielsen
+# All rights reserved.
+#
+# This software may be modified and distributed under the terms
+# of the BSD license. See the LICENSE file for details.
+
+import unittest
+
+from aniso8601.compat import PY2, is_string
+
+class TestCompatFunctions(unittest.TestCase):
+ def test_is_string(self):
+ self.assertTrue(is_string('asdf'))
+ self.assertTrue(is_string(''))
+
+ if PY2 is True:
+ self.assertTrue(is_string(unicode('asdf')))
+
+ self.assertFalse(is_string(None))
+ self.assertFalse(is_string(123))
+ self.assertFalse(is_string(4.56))
+ self.assertFalse(is_string([]))
+ self.assertFalse(is_string({}))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_date.py new/aniso8601-8.1.1/aniso8601/tests/test_date.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_date.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_date.py 2021-01-29 21:50:06.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_decimalfraction.py new/aniso8601-8.1.1/aniso8601/tests/test_decimalfraction.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_decimalfraction.py 2020-11-23 20:28:35.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_decimalfraction.py 2021-01-29 21:51:31.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_duration.py new/aniso8601-8.1.1/aniso8601/tests/test_duration.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_duration.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_duration.py 2021-01-29 21:49:58.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_init.py new/aniso8601-8.1.1/aniso8601/tests/test_init.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_init.py 2020-11-23 20:29:01.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_init.py 2021-01-29 21:51:09.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_interval.py new/aniso8601-8.1.1/aniso8601/tests/test_interval.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_interval.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_interval.py 2021-01-29 21:49:43.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_time.py new/aniso8601-8.1.1/aniso8601/tests/test_time.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_time.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_time.py 2021-01-29 21:49:28.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_timezone.py new/aniso8601-8.1.1/aniso8601/tests/test_timezone.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_timezone.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_timezone.py 2021-01-29 21:50:26.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/tests/test_utcoffset.py new/aniso8601-8.1.1/aniso8601/tests/test_utcoffset.py
--- old/aniso8601-8.1.0/aniso8601/tests/test_utcoffset.py 2020-11-23 20:28:47.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/tests/test_utcoffset.py 2021-01-29 21:51:21.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/time.py new/aniso8601-8.1.1/aniso8601/time.py
--- old/aniso8601-8.1.0/aniso8601/time.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/time.py 2021-01-29 21:49:01.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
@@ -8,6 +8,7 @@
from aniso8601.builders import TupleBuilder
from aniso8601.builders.python import PythonTimeBuilder
+from aniso8601.compat import is_string
from aniso8601.date import parse_date
from aniso8601.decimalfraction import find_separator, normalize
from aniso8601.exceptions import ISOFormatError
@@ -42,7 +43,7 @@
#hh:mm��hh
#hhmm��hh
#hh��hh
- if not isinstance(isotimestr, str):
+ if is_string(isotimestr) is False:
raise ValueError('Time must be string.')
timestr = _split_tz(isotimestr)[0].replace(':', '')
@@ -118,7 +119,7 @@
#By default, the ISO 8601 specified T delimiter is used to split the
#date and time (<date>T<time>). Fixed offset tzdata will be included
#if UTC offset is given in the input string.
- if not isinstance(isodatetimestr, str):
+ if is_string(isodatetimestr) is False:
raise ValueError('Date time must be string.')
if delimiter not in isodatetimestr:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/timezone.py new/aniso8601-8.1.1/aniso8601/timezone.py
--- old/aniso8601-8.1.0/aniso8601/timezone.py 2020-11-24 03:10:00.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/timezone.py 2021-01-29 21:48:47.000000000 +0100
@@ -1,17 +1,18 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
# of the BSD license. See the LICENSE file for details.
from aniso8601.builders.python import PythonTimeBuilder
+from aniso8601.compat import is_string
from aniso8601.exceptions import ISOFormatError
def parse_timezone(tzstr, builder=PythonTimeBuilder):
#tzstr can be Z, ��hh:mm, ��hhmm, ��hh
- if not isinstance(tzstr, str):
+ if is_string(tzstr) is False:
raise ValueError('Time zone must be string.')
if 'Z' in tzstr:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601/utcoffset.py new/aniso8601-8.1.1/aniso8601/utcoffset.py
--- old/aniso8601-8.1.0/aniso8601/utcoffset.py 2020-11-23 20:26:49.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601/utcoffset.py 2021-01-29 21:48:37.000000000 +0100
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Brandon Nielsen
+# Copyright (c) 2021, Brandon Nielsen
# All rights reserved.
#
# This software may be modified and distributed under the terms
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601.egg-info/PKG-INFO new/aniso8601-8.1.1/aniso8601.egg-info/PKG-INFO
--- old/aniso8601-8.1.0/aniso8601.egg-info/PKG-INFO 2020-11-30 21:16:01.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601.egg-info/PKG-INFO 2021-01-29 21:58:42.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
Name: aniso8601
-Version: 8.1.0
+Version: 8.1.1
Summary: A library for parsing ISO 8601 strings.
Home-page: https://bitbucket.org/nielsenb/aniso8601
Author: Brandon Nielsen
@@ -386,9 +386,9 @@
Tests
-----
- Tests can be run using `setuptools <https://setuptools.readthedocs.io/en/latest/setuptools.html>`::
+ Tests can be run using the `unittest testing framework <https://docs.python.org/3/library/unittest.html>`_::
- $ python setup.py test
+ $ python -m unittest discover aniso8601
Contributing
============
@@ -424,3 +424,4 @@
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/aniso8601.egg-info/SOURCES.txt new/aniso8601-8.1.1/aniso8601.egg-info/SOURCES.txt
--- old/aniso8601-8.1.0/aniso8601.egg-info/SOURCES.txt 2020-11-30 21:16:01.000000000 +0100
+++ new/aniso8601-8.1.1/aniso8601.egg-info/SOURCES.txt 2021-01-29 21:58:42.000000000 +0100
@@ -25,6 +25,7 @@
aniso8601/builders/tests/test_python.py
aniso8601/tests/__init__.py
aniso8601/tests/compat.py
+aniso8601/tests/test_compat.py
aniso8601/tests/test_date.py
aniso8601/tests/test_decimalfraction.py
aniso8601/tests/test_duration.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aniso8601-8.1.0/setup.py new/aniso8601-8.1.1/setup.py
--- old/aniso8601-8.1.0/setup.py 2020-11-30 21:11:27.000000000 +0100
+++ new/aniso8601-8.1.1/setup.py 2020-12-01 02:55:12.000000000 +0100
@@ -1,5 +1,7 @@
import sys
+from aniso8601 import __version__
+from os import path
from setuptools import setup, find_packages
TESTS_REQUIRE = []
@@ -10,15 +12,16 @@
if PY2:
TESTS_REQUIRE.append('mock>=2.0.0')
-readme = open('README.rst', 'r')
-README_TEXT = readme.read()
-readme.close()
+THIS_DIRECTORY = path.abspath(path.dirname(__file__))
+with open(path.join(THIS_DIRECTORY, 'README.rst')) as f:
+ README_TEXT = f.read()
setup(
name='aniso8601',
- version='8.1.0',
+ version=__version__,
description='A library for parsing ISO 8601 strings.',
long_description=README_TEXT,
+ long_description_content_type='text/x-rst',
author='Brandon Nielsen',
author_email='nielsenb(a)jetfuse.net',
url='https://bitbucket.org/nielsenb/aniso8601',
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-APScheduler for openSUSE:Factory checked in at 2021-02-02 14:25:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-APScheduler (Old)
and /work/SRC/openSUSE:Factory/.python-APScheduler.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-APScheduler"
Tue Feb 2 14:25:28 2021 rev:13 rq:868433 version:3.7.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-APScheduler/python-APScheduler.changes 2021-01-22 21:52:58.581904591 +0100
+++ /work/SRC/openSUSE:Factory/.python-APScheduler.new.28504/python-APScheduler.changes 2021-02-02 14:25:42.815395725 +0100
@@ -1,0 +2,30 @@
+Mon Feb 1 17:38:33 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 3.7.0:
+ * Dropped support for Python 3.4
+ * Added PySide2 support (PR by Abdulla Ibrahim)
+ * Pinned ``tzlocal`` to a version compatible with pytz
+ * Ensured that jitter is always non-negative to prevent triggers from firing
+ more often than intended
+ * Changed ``AsyncIOScheduler`` to obtain the event loop in ``start()``
+ instead of ``__init__()``,
+ to prevent situations where the scheduler won't run because it's using a
+ different event loop than then one currently running
+ * Made it possible to create weak references to ``Job`` instances
+ * Made the schedulers explicitly raise a descriptive ``TypeError`` when serialization is attempted
+ * Fixed Zookeeper job store using backslashes instead of forward slashes for paths
+ on Windows
+ * Fixed deprecation warnings on the MongoDB job store and increased the minimum PyMongo
+ * Fixed ``BlockingScheduler`` and ``BackgroundScheduler`` shutdown hanging after the user has
+ erroneously tried to start it twice
+ * Fixed memory leak when coroutine jobs raise exceptions
+ * Fixed inability to schedule wrapped functions with extra arguments when the wrapped function
+ cannot accept them but the wrapper can (original PR by Egor Malykh)
+ * Fixed potential ``where`` clause error in the SQLAlchemy job store when a subclass uses more than
+ one search condition
+ * Fixed a problem where bound methods added as jobs via textual references were called with an
+ unwanted extra ``self`` argument (PR by Pengjie Song)
+ * Fixed ``BrokenPoolError`` in ``ProcessPoolExecutor`` so that it will automatically replace the
+ broken pool with a fresh instance
+
+-------------------------------------------------------------------
Old:
----
APScheduler-3.6.3.tar.gz
New:
----
APScheduler-3.7.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-APScheduler.spec ++++++
--- /var/tmp/diff_new_pack.KoocFM/_old 2021-02-02 14:25:43.531396839 +0100
+++ /var/tmp/diff_new_pack.KoocFM/_new 2021-02-02 14:25:43.531396839 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-APScheduler
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without python2
Name: python-APScheduler
-Version: 3.6.3
+Version: 3.7.0
Release: 0
Summary: In-process task scheduler with Cron-like capabilities
License: MIT
@@ -28,27 +28,27 @@
BuildRequires: %{python_module SQLAlchemy >= 0.8}
BuildRequires: %{python_module Twisted}
BuildRequires: %{python_module gevent}
+BuildRequires: %{python_module pytest < 6}
BuildRequires: %{python_module pytest-asyncio}
BuildRequires: %{python_module pytest-cov}
BuildRequires: %{python_module pytest-tornado}
-BuildRequires: %{python_module pytest}
BuildRequires: %{python_module pytz}
BuildRequires: %{python_module setuptools >= 36.2.7}
BuildRequires: %{python_module setuptools_scm >= 1.7.0}
BuildRequires: %{python_module six >= 1.4.0}
BuildRequires: %{python_module tornado}
-BuildRequires: %{python_module tzlocal >= 1.2}
+BuildRequires: %{python_module tzlocal >= 2.0}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
BuildRequires: python3-pytest-asyncio
Requires: python-pytz
Requires: python-six >= 1.4.0
-Requires: python-tzlocal >= 1.2
+Requires: python-tzlocal >= 2.0
Recommends: python-SQLAlchemy >= 0.8
Recommends: python-Twisted
Recommends: python-gevent
Suggests: python-kazoo
-Suggests: python-pymongo >= 2.8
+Suggests: python-pymongo >= 3.0
Suggests: python-redis
Suggests: python-tornado >= 4.3
BuildArch: noarch
++++++ APScheduler-3.6.3.tar.gz -> APScheduler-3.7.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/.travis.yml new/APScheduler-3.7.0/.travis.yml
--- old/APScheduler-3.6.3/.travis.yml 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/.travis.yml 2021-01-19 15:34:44.000000000 +0100
@@ -17,7 +17,7 @@
- &test
stage: test
env: TOXENV=pypy
- python: pypy2.7-6.0
+ python: pypy
before_install: docker-compose up -d
after_success:
- pip install coveralls
@@ -25,17 +25,13 @@
- <<: *test
env: TOXENV=pypy3
- python: pypy3.5-6.0
+ python: pypy3
- <<: *test
env: TOXENV=py27
python: "2.7"
- <<: *test
- env: TOXENV=py34
- python: "3.4"
-
- - <<: *test
env: TOXENV=py35
python: "3.5"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/APScheduler.egg-info/PKG-INFO new/APScheduler-3.7.0/APScheduler.egg-info/PKG-INFO
--- old/APScheduler-3.6.3/APScheduler.egg-info/PKG-INFO 2019-11-05 08:51:47.000000000 +0100
+++ new/APScheduler-3.7.0/APScheduler.egg-info/PKG-INFO 2021-01-19 15:35:14.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: APScheduler
-Version: 3.6.3
+Version: 3.7.0
Summary: In-process task scheduler with Cron-like capabilities
Home-page: https://github.com/agronholm/apscheduler
Author: Alex Gr��nholm
@@ -49,9 +49,16 @@
* `Tornado <http://www.tornadoweb.org/>`_
* `Twisted <http://twistedmatrix.com/>`_
* `Qt <http://qt-project.org/>`_ (using either
- `PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ or
+ `PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ ,
+ `PySide2 <https://wiki.qt.io/Qt_for_Python>`_ or
`PySide <http://qt-project.org/wiki/PySide>`_)
+ There are third party solutions for integrating APScheduler with other frameworks:
+
+ * `Django <https://github.com/jarekwg/django-apscheduler>`_
+ * `Flask <https://github.com/viniciuschiele/flask-apscheduler>`_
+
+
.. [#f1] The cutoff period for this is also configurable.
@@ -91,10 +98,10 @@
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
Provides-Extra: asyncio
Provides-Extra: gevent
Provides-Extra: mongodb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/APScheduler.egg-info/requires.txt new/APScheduler-3.7.0/APScheduler.egg-info/requires.txt
--- old/APScheduler-3.6.3/APScheduler.egg-info/requires.txt 2019-11-05 08:51:47.000000000 +0100
+++ new/APScheduler-3.7.0/APScheduler.egg-info/requires.txt 2021-01-19 15:35:14.000000000 +0100
@@ -1,11 +1,13 @@
setuptools>=0.7
six>=1.4.0
pytz
-tzlocal>=1.2
+tzlocal~=2.0
+
+[:python_version < "3.5"]
+funcsigs
[:python_version == "2.7"]
futures
-funcsigs
[asyncio:python_version == "2.7"]
trollius
@@ -18,7 +20,7 @@
gevent
[mongodb]
-pymongo>=2.8
+pymongo>=3.0
[redis]
redis>=3.0
@@ -30,7 +32,7 @@
sqlalchemy>=0.8
[testing]
-pytest
+pytest<6
pytest-cov
pytest-tornado5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/PKG-INFO new/APScheduler-3.7.0/PKG-INFO
--- old/APScheduler-3.6.3/PKG-INFO 2019-11-05 08:51:47.000000000 +0100
+++ new/APScheduler-3.7.0/PKG-INFO 2021-01-19 15:35:15.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: APScheduler
-Version: 3.6.3
+Version: 3.7.0
Summary: In-process task scheduler with Cron-like capabilities
Home-page: https://github.com/agronholm/apscheduler
Author: Alex Gr��nholm
@@ -49,9 +49,16 @@
* `Tornado <http://www.tornadoweb.org/>`_
* `Twisted <http://twistedmatrix.com/>`_
* `Qt <http://qt-project.org/>`_ (using either
- `PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ or
+ `PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ ,
+ `PySide2 <https://wiki.qt.io/Qt_for_Python>`_ or
`PySide <http://qt-project.org/wiki/PySide>`_)
+ There are third party solutions for integrating APScheduler with other frameworks:
+
+ * `Django <https://github.com/jarekwg/django-apscheduler>`_
+ * `Flask <https://github.com/viniciuschiele/flask-apscheduler>`_
+
+
.. [#f1] The cutoff period for this is also configurable.
@@ -91,10 +98,10 @@
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
Provides-Extra: asyncio
Provides-Extra: gevent
Provides-Extra: mongodb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/README.rst new/APScheduler-3.7.0/README.rst
--- old/APScheduler-3.6.3/README.rst 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/README.rst 2021-01-19 15:34:44.000000000 +0100
@@ -41,9 +41,16 @@
* `Tornado <http://www.tornadoweb.org/>`_
* `Twisted <http://twistedmatrix.com/>`_
* `Qt <http://qt-project.org/>`_ (using either
- `PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ or
+ `PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ ,
+ `PySide2 <https://wiki.qt.io/Qt_for_Python>`_ or
`PySide <http://qt-project.org/wiki/PySide>`_)
+There are third party solutions for integrating APScheduler with other frameworks:
+
+* `Django <https://github.com/jarekwg/django-apscheduler>`_
+* `Flask <https://github.com/viniciuschiele/flask-apscheduler>`_
+
+
.. [#f1] The cutoff period for this is also configurable.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/executors/base_py3.py new/APScheduler-3.7.0/apscheduler/executors/base_py3.py
--- old/APScheduler-3.6.3/apscheduler/executors/base_py3.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/executors/base_py3.py 2021-01-19 15:34:44.000000000 +0100
@@ -1,5 +1,6 @@
import logging
import sys
+import traceback
from datetime import datetime, timedelta
from traceback import format_tb
@@ -33,6 +34,7 @@
events.append(JobExecutionEvent(EVENT_JOB_ERROR, job.id, jobstore_alias, run_time,
exception=exc, traceback=formatted_tb))
logger.exception('Job "%s" raised an exception', job)
+ traceback.clear_frames(tb)
else:
events.append(JobExecutionEvent(EVENT_JOB_EXECUTED, job.id, jobstore_alias, run_time,
retval=retval))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/executors/pool.py new/APScheduler-3.7.0/apscheduler/executors/pool.py
--- old/APScheduler-3.6.3/apscheduler/executors/pool.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/executors/pool.py 2021-01-19 15:34:44.000000000 +0100
@@ -3,6 +3,11 @@
from apscheduler.executors.base import BaseExecutor, run_job
+try:
+ from concurrent.futures.process import BrokenProcessPool
+except ImportError:
+ BrokenProcessPool = None
+
class BasePoolExecutor(BaseExecutor):
@abstractmethod
@@ -19,7 +24,13 @@
else:
self._run_job_success(job.id, f.result())
- f = self._pool.submit(run_job, job, job._jobstore_alias, run_times, self._logger.name)
+ try:
+ f = self._pool.submit(run_job, job, job._jobstore_alias, run_times, self._logger.name)
+ except BrokenProcessPool:
+ self._logger.warning('Process pool is broken; replacing pool with a fresh instance')
+ self._pool = self._pool.__class__(self._pool._max_workers)
+ f = self._pool.submit(run_job, job, job._jobstore_alias, run_times, self._logger.name)
+
f.add_done_callback(callback)
def shutdown(self, wait=True):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/job.py new/APScheduler-3.7.0/apscheduler/job.py
--- old/APScheduler-3.6.3/apscheduler/job.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/job.py 2021-01-19 15:34:44.000000000 +0100
@@ -28,7 +28,7 @@
:var trigger: the trigger object that controls the schedule of this job
:var str executor: the name of the executor that will run this job
:var int misfire_grace_time: the time (in seconds) how much this job's execution is allowed to
- be late
+ be late (``None`` means "allow the job to run no matter how late it is")
:var int max_instances: the maximum number of concurrently executing instances allowed for this
job
:var datetime.datetime next_run_time: the next scheduled run time of this job
@@ -40,7 +40,7 @@
__slots__ = ('_scheduler', '_jobstore_alias', 'id', 'trigger', 'executor', 'func', 'func_ref',
'args', 'kwargs', 'name', 'misfire_grace_time', 'coalesce', 'max_instances',
- 'next_run_time')
+ 'next_run_time', '__weakref__')
def __init__(self, scheduler, id=None, **kwargs):
super(Job, self).__init__()
@@ -242,8 +242,9 @@
# Instance methods cannot survive serialization as-is, so store the "self" argument
# explicitly
- if ismethod(self.func) and not isclass(self.func.__self__):
- args = (self.func.__self__,) + tuple(self.args)
+ func = self.func
+ if ismethod(func) and not isclass(func.__self__) and obj_to_ref(func) == self.func_ref:
+ args = (func.__self__,) + tuple(self.args)
else:
args = self.args
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/jobstores/mongodb.py new/APScheduler-3.7.0/apscheduler/jobstores/mongodb.py
--- old/APScheduler-3.6.3/apscheduler/jobstores/mongodb.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/jobstores/mongodb.py 2021-01-19 15:34:44.000000000 +0100
@@ -54,7 +54,7 @@
def start(self, scheduler, alias):
super(MongoDBJobStore, self).start(scheduler, alias)
- self.collection.ensure_index('next_run_time', sparse=True)
+ self.collection.create_index('next_run_time', sparse=True)
@property
def connection(self):
@@ -83,7 +83,7 @@
def add_job(self, job):
try:
- self.collection.insert({
+ self.collection.insert_one({
'_id': job.id,
'next_run_time': datetime_to_utc_timestamp(job.next_run_time),
'job_state': Binary(pickle.dumps(job.__getstate__(), self.pickle_protocol))
@@ -96,13 +96,13 @@
'next_run_time': datetime_to_utc_timestamp(job.next_run_time),
'job_state': Binary(pickle.dumps(job.__getstate__(), self.pickle_protocol))
}
- result = self.collection.update({'_id': job.id}, {'$set': changes})
- if result and result['n'] == 0:
+ result = self.collection.update_one({'_id': job.id}, {'$set': changes})
+ if result and result.matched_count == 0:
raise JobLookupError(job.id)
def remove_job(self, job_id):
- result = self.collection.remove(job_id)
- if result and result['n'] == 0:
+ result = self.collection.delete_one({'_id': job_id})
+ if result and result.deleted_count == 0:
raise JobLookupError(job_id)
def remove_all_jobs(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/jobstores/sqlalchemy.py new/APScheduler-3.7.0/apscheduler/jobstores/sqlalchemy.py
--- old/APScheduler-3.6.3/apscheduler/jobstores/sqlalchemy.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/jobstores/sqlalchemy.py 2021-01-19 15:34:44.000000000 +0100
@@ -11,7 +11,7 @@
try:
from sqlalchemy import (
- create_engine, Table, Column, MetaData, Unicode, Float, LargeBinary, select)
+ create_engine, Table, Column, MetaData, Unicode, Float, LargeBinary, select, and_)
from sqlalchemy.exc import IntegrityError
from sqlalchemy.sql.expression import null
except ImportError: # pragma: nocover
@@ -134,7 +134,7 @@
jobs = []
selectable = select([self.jobs_t.c.id, self.jobs_t.c.job_state]).\
order_by(self.jobs_t.c.next_run_time)
- selectable = selectable.where(*conditions) if conditions else selectable
+ selectable = selectable.where(and_(*conditions)) if conditions else selectable
failed_job_ids = set()
for row in self.engine.execute(selectable):
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/jobstores/zookeeper.py new/APScheduler-3.7.0/apscheduler/jobstores/zookeeper.py
--- old/APScheduler-3.6.3/apscheduler/jobstores/zookeeper.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/jobstores/zookeeper.py 2021-01-19 15:34:44.000000000 +0100
@@ -1,6 +1,5 @@
from __future__ import absolute_import
-import os
from datetime import datetime
from pytz import utc
@@ -65,7 +64,7 @@
def lookup_job(self, job_id):
self._ensure_paths()
- node_path = os.path.join(self.path, job_id)
+ node_path = self.path + "/" + str(job_id)
try:
content, _ = self.client.get(node_path)
doc = pickle.loads(content)
@@ -92,7 +91,7 @@
def add_job(self, job):
self._ensure_paths()
- node_path = os.path.join(self.path, str(job.id))
+ node_path = self.path + "/" + str(job.id)
value = {
'next_run_time': datetime_to_utc_timestamp(job.next_run_time),
'job_state': job.__getstate__()
@@ -105,7 +104,7 @@
def update_job(self, job):
self._ensure_paths()
- node_path = os.path.join(self.path, str(job.id))
+ node_path = self.path + "/" + str(job.id)
changes = {
'next_run_time': datetime_to_utc_timestamp(job.next_run_time),
'job_state': job.__getstate__()
@@ -118,7 +117,7 @@
def remove_job(self, job_id):
self._ensure_paths()
- node_path = os.path.join(self.path, str(job_id))
+ node_path = self.path + "/" + str(job_id)
try:
self.client.delete(node_path)
except NoNodeError:
@@ -151,7 +150,7 @@
all_ids = self.client.get_children(self.path)
for node_name in all_ids:
try:
- node_path = os.path.join(self.path, node_name)
+ node_path = self.path + "/" + node_name
content, _ = self.client.get(node_path)
doc = pickle.loads(content)
job_def = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/schedulers/asyncio.py new/APScheduler-3.7.0/apscheduler/schedulers/asyncio.py
--- old/APScheduler-3.6.3/apscheduler/schedulers/asyncio.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/schedulers/asyncio.py 2021-01-19 15:34:44.000000000 +0100
@@ -38,13 +38,19 @@
_eventloop = None
_timeout = None
+ def start(self, paused=False):
+ if not self._eventloop:
+ self._eventloop = asyncio.get_event_loop()
+
+ super(AsyncIOScheduler, self).start(paused)
+
@run_in_event_loop
def shutdown(self, wait=True):
super(AsyncIOScheduler, self).shutdown(wait)
self._stop_timer()
def _configure(self, config):
- self._eventloop = maybe_ref(config.pop('event_loop', None)) or asyncio.get_event_loop()
+ self._eventloop = maybe_ref(config.pop('event_loop', None))
super(AsyncIOScheduler, self)._configure(config)
def _start_timer(self, wait_seconds):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/schedulers/background.py new/APScheduler-3.7.0/apscheduler/schedulers/background.py
--- old/APScheduler-3.6.3/apscheduler/schedulers/background.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/schedulers/background.py 2021-01-19 15:34:44.000000000 +0100
@@ -29,7 +29,9 @@
super(BackgroundScheduler, self)._configure(config)
def start(self, *args, **kwargs):
- self._event = Event()
+ if self._event is None or self._event.is_set():
+ self._event = Event()
+
BaseScheduler.start(self, *args, **kwargs)
self._thread = Thread(target=self._main_loop, name='APScheduler')
self._thread.daemon = self._daemon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/schedulers/base.py new/APScheduler-3.7.0/apscheduler/schedulers/base.py
--- old/APScheduler-3.6.3/apscheduler/schedulers/base.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/schedulers/base.py 2021-01-19 15:34:44.000000000 +0100
@@ -86,6 +86,11 @@
self.state = STATE_STOPPED
self.configure(gconfig, **options)
+ def __getstate__(self):
+ raise TypeError("Schedulers cannot be serialized. Ensure that you are not passing a "
+ "scheduler instance as an argument to a job, or scheduling an instance "
+ "method where the instance contains a scheduler as an attribute.")
+
def configure(self, gconfig={}, prefix='apscheduler.', **options):
"""
Reconfigures the scheduler with the given options.
@@ -402,7 +407,7 @@
:param str|unicode id: explicit identifier for the job (for modifying it later)
:param str|unicode name: textual description of the job
:param int misfire_grace_time: seconds after the designated runtime that the job is still
- allowed to be run
+ allowed to be run (or ``None`` to allow the job to run no matter how late it is)
:param bool coalesce: run once instead of many times if the scheduler determines that the
job should be run more than once in succession
:param int max_instances: maximum number of concurrently running instances allowed for this
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/schedulers/blocking.py new/APScheduler-3.7.0/apscheduler/schedulers/blocking.py
--- old/APScheduler-3.6.3/apscheduler/schedulers/blocking.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/schedulers/blocking.py 2021-01-19 15:34:44.000000000 +0100
@@ -14,7 +14,9 @@
_event = None
def start(self, *args, **kwargs):
- self._event = Event()
+ if self._event is None or self._event.is_set():
+ self._event = Event()
+
super(BlockingScheduler, self).start(*args, **kwargs)
self._main_loop()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/schedulers/qt.py new/APScheduler-3.7.0/apscheduler/schedulers/qt.py
--- old/APScheduler-3.6.3/apscheduler/schedulers/qt.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/schedulers/qt.py 2021-01-19 15:34:44.000000000 +0100
@@ -9,9 +9,13 @@
from PyQt4.QtCore import QObject, QTimer
except ImportError:
try:
- from PySide.QtCore import QObject, QTimer # noqa
+ from PySide2.QtCore import QObject, QTimer # noqa
except ImportError:
- raise ImportError('QtScheduler requires either PyQt5, PyQt4 or PySide installed')
+ try:
+ from PySide.QtCore import QObject, QTimer # noqa
+ except ImportError:
+ raise ImportError('QtScheduler requires either PyQt5, PyQt4, PySide2 '
+ 'or PySide installed')
class QtScheduler(BaseScheduler):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/triggers/base.py new/APScheduler-3.7.0/apscheduler/triggers/base.py
--- old/APScheduler-3.6.3/apscheduler/triggers/base.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/triggers/base.py 2021-01-19 15:34:44.000000000 +0100
@@ -22,27 +22,16 @@
def _apply_jitter(self, next_fire_time, jitter, now):
"""
- Randomize ``next_fire_time`` by adding or subtracting a random value (the jitter). If the
- resulting datetime is in the past, returns the initial ``next_fire_time`` without jitter.
-
- ``next_fire_time - jitter <= result <= next_fire_time + jitter``
+ Randomize ``next_fire_time`` by adding a random value (the jitter).
:param datetime.datetime|None next_fire_time: next fire time without jitter applied. If
``None``, returns ``None``.
- :param int|None jitter: maximum number of seconds to add or subtract to
- ``next_fire_time``. If ``None`` or ``0``, returns ``next_fire_time``
+ :param int|None jitter: maximum number of seconds to add to ``next_fire_time``
+ (if ``None`` or ``0``, returns ``next_fire_time``)
:param datetime.datetime now: current datetime
:return datetime.datetime|None: next fire time with a jitter.
"""
if next_fire_time is None or not jitter:
return next_fire_time
- next_fire_time_with_jitter = next_fire_time + timedelta(
- seconds=random.uniform(-jitter, jitter))
-
- if next_fire_time_with_jitter < now:
- # Next fire time with jitter is in the past.
- # Ignore jitter to avoid false misfire.
- return next_fire_time
-
- return next_fire_time_with_jitter
+ return next_fire_time + timedelta(seconds=random.uniform(0, jitter))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/triggers/combining.py new/APScheduler-3.7.0/apscheduler/triggers/combining.py
--- old/APScheduler-3.6.3/apscheduler/triggers/combining.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/triggers/combining.py 2021-01-19 15:34:44.000000000 +0100
@@ -45,7 +45,7 @@
Trigger alias: ``and``
:param list triggers: triggers to combine
- :param int|None jitter: advance or delay the job execution by ``jitter`` seconds at most.
+ :param int|None jitter: delay the job execution by ``jitter`` seconds at most
"""
__slots__ = ()
@@ -73,7 +73,7 @@
Trigger alias: ``or``
:param list triggers: triggers to combine
- :param int|None jitter: advance or delay the job execution by ``jitter`` seconds at most.
+ :param int|None jitter: delay the job execution by ``jitter`` seconds at most
.. note:: Triggers that depends on the previous fire time, such as the interval trigger, may
seem to behave strangely since they are always passed the previous fire time produced by
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/triggers/cron/__init__.py new/APScheduler-3.7.0/apscheduler/triggers/cron/__init__.py
--- old/APScheduler-3.6.3/apscheduler/triggers/cron/__init__.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/triggers/cron/__init__.py 2021-01-19 15:34:44.000000000 +0100
@@ -16,7 +16,7 @@
:param int|str year: 4-digit year
:param int|str month: month (1-12)
- :param int|str day: day of the (1-31)
+ :param int|str day: day of month (1-31)
:param int|str week: ISO week (1-53)
:param int|str day_of_week: number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)
:param int|str hour: hour (0-23)
@@ -26,7 +26,7 @@
:param datetime|str end_date: latest possible date/time to trigger on (inclusive)
:param datetime.tzinfo|str timezone: time zone to use for the date/time calculations (defaults
to scheduler timezone)
- :param int|None jitter: advance or delay the job execution by ``jitter`` seconds at most.
+ :param int|None jitter: delay the job execution by ``jitter`` seconds at most
.. note:: The first weekday is always **monday**.
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/triggers/interval.py new/APScheduler-3.7.0/apscheduler/triggers/interval.py
--- old/APScheduler-3.6.3/apscheduler/triggers/interval.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/triggers/interval.py 2021-01-19 15:34:44.000000000 +0100
@@ -20,7 +20,7 @@
:param datetime|str start_date: starting point for the interval calculation
:param datetime|str end_date: latest possible date/time to trigger on
:param datetime.tzinfo|str timezone: time zone to use for the date/time calculations
- :param int|None jitter: advance or delay the job execution by ``jitter`` seconds at most.
+ :param int|None jitter: delay the job execution by ``jitter`` seconds at most
"""
__slots__ = 'timezone', 'start_date', 'end_date', 'interval', 'interval_length', 'jitter'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/apscheduler/util.py new/APScheduler-3.7.0/apscheduler/util.py
--- old/APScheduler-3.6.3/apscheduler/util.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/apscheduler/util.py 2021-01-19 15:34:44.000000000 +0100
@@ -7,6 +7,7 @@
from functools import partial
from inspect import isclass, ismethod
import re
+import sys
from pytz import timezone, utc, FixedOffset
import six
@@ -352,7 +353,10 @@
has_varargs = has_var_kwargs = False
try:
- sig = signature(func)
+ if sys.version_info >= (3, 5):
+ sig = signature(func, follow_wrapped=False)
+ else:
+ sig = signature(func)
except ValueError:
# signature() doesn't work against every kind of callable
return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/docs/modules/schedulers/qt.rst new/APScheduler-3.7.0/docs/modules/schedulers/qt.rst
--- old/APScheduler-3.6.3/docs/modules/schedulers/qt.rst 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/docs/modules/schedulers/qt.rst 2021-01-19 15:34:44.000000000 +0100
@@ -13,7 +13,7 @@
Introduction
------------
-QtScheduler lets you integrate APScheduler with your `PySide <https://en.wikipedia.org/wiki/PySide>` or
+QtScheduler lets you integrate APScheduler with your `PySide2 <https://wiki.qt.io/Qt_for_Python>`, `PySide <https://en.wikipedia.org/wiki/PySide>` or
`PyQt <http://www.riverbankcomputing.co.uk/software/pyqt/intro>`_ application.
.. list-table::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/docs/modules/triggers/combining.rst new/APScheduler-3.7.0/docs/modules/triggers/combining.rst
--- old/APScheduler-3.6.3/docs/modules/triggers/combining.rst 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/docs/modules/triggers/combining.rst 2021-01-19 15:34:44.000000000 +0100
@@ -28,8 +28,8 @@
CronTrigger(day_of_week='sat,sun')])
scheduler.add_job(job_function, trigger)
-Run ``job_function`` every Monday at 2pm and every Tuesday at 3pm::
+Run ``job_function`` every Monday at 2am and every Tuesday at 3pm::
trigger = OrTrigger([CronTrigger(day_of_week='mon', hour=2),
- CronTrigger(day_of_week='tue', hour=3)])
+ CronTrigger(day_of_week='tue', hour=15)])
scheduler.add_job(job_function, trigger)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/docs/modules/triggers/interval.rst new/APScheduler-3.7.0/docs/modules/triggers/interval.rst
--- old/APScheduler-3.6.3/docs/modules/triggers/interval.rst 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/docs/modules/triggers/interval.rst 2021-01-19 15:34:44.000000000 +0100
@@ -54,8 +54,7 @@
The :meth:`~apscheduler.schedulers.base.BaseScheduler.scheduled_job` decorator works nicely too::
- from apscheduler.scheduler import BlockingScheduler
-
+
@sched.scheduled_job('interval', id='my_job_id', hours=2)
def job_function():
print("Hello World")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/docs/versionhistory.rst new/APScheduler-3.7.0/docs/versionhistory.rst
--- old/APScheduler-3.6.3/docs/versionhistory.rst 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/docs/versionhistory.rst 2021-01-19 15:34:44.000000000 +0100
@@ -4,6 +4,36 @@
To find out how to migrate your application from a previous version of
APScheduler, see the :doc:`migration section <migration>`.
+3.7.0
+-----
+
+* Dropped support for Python 3.4
+* Added PySide2 support (PR by Abdulla Ibrahim)
+* Pinned ``tzlocal`` to a version compatible with pytz
+* Ensured that jitter is always non-negative to prevent triggers from firing more often than
+ intended
+* Changed ``AsyncIOScheduler`` to obtain the event loop in ``start()`` instead of ``__init__()``,
+ to prevent situations where the scheduler won't run because it's using a different event loop
+ than then one currently running
+* Made it possible to create weak references to ``Job`` instances
+* Made the schedulers explicitly raise a descriptive ``TypeError`` when serialization is attempted
+* Fixed Zookeeper job store using backslashes instead of forward slashes for paths
+ on Windows (PR by Laurel-rao)
+* Fixed deprecation warnings on the MongoDB job store and increased the minimum PyMongo
+ version to 3.0
+* Fixed ``BlockingScheduler`` and ``BackgroundScheduler`` shutdown hanging after the user has
+ erroneously tried to start it twice
+* Fixed memory leak when coroutine jobs raise exceptions (due to reference cycles in tracebacks)
+* Fixed inability to schedule wrapped functions with extra arguments when the wrapped function
+ cannot accept them but the wrapper can (original PR by Egor Malykh)
+* Fixed potential ``where`` clause error in the SQLAlchemy job store when a subclass uses more than
+ one search condition
+* Fixed a problem where bound methods added as jobs via textual references were called with an
+ unwanted extra ``self`` argument (PR by Pengjie Song)
+* Fixed ``BrokenPoolError`` in ``ProcessPoolExecutor`` so that it will automatically replace the
+ broken pool with a fresh instance
+
+
3.6.3
-----
@@ -343,7 +373,7 @@
* Added optional job execution coalescing for situations where several
executions of the job are due
-* Added an option to limit the maximum number of concurrenctly executing
+* Added an option to limit the maximum number of concurrently executing
instances of the job
* Allowed configuration of misfire grace times on a per-job basis
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/examples/schedulers/qt.py new/APScheduler-3.7.0/examples/schedulers/qt.py
--- old/APScheduler-3.6.3/examples/schedulers/qt.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/examples/schedulers/qt.py 2021-01-19 15:34:44.000000000 +0100
@@ -15,7 +15,10 @@
try:
from PyQt4.QtGui import QApplication, QLabel
except ImportError:
- from PySide.QtGui import QApplication, QLabel
+ try:
+ from PySide2.QtWidgets import QApplication, QLabel
+ except ImportError:
+ from PySide.QtGui import QApplication, QLabel
def tick():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/setup.py new/APScheduler-3.7.0/setup.py
--- old/APScheduler-3.6.3/setup.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/setup.py 2021-01-19 15:34:44.000000000 +0100
@@ -26,7 +26,6 @@
'Programming Language :: Python',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7'
@@ -34,6 +33,7 @@
keywords='scheduling cron',
license='MIT',
packages=find_packages(exclude=['tests']),
+ python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4',
setup_requires=[
'setuptools_scm'
],
@@ -41,13 +41,14 @@
'setuptools >= 0.7',
'six >= 1.4.0',
'pytz',
- 'tzlocal >= 1.2',
+ 'tzlocal ~= 2.0',
],
extras_require={
- ':python_version == "2.7"': ['futures', 'funcsigs'],
+ ':python_version == "2.7"': ['futures'],
+ ':python_version < "3.5"': ['funcsigs'],
'asyncio:python_version == "2.7"': ['trollius'],
'gevent': ['gevent'],
- 'mongodb': ['pymongo >= 2.8'],
+ 'mongodb': ['pymongo >= 3.0'],
'redis': ['redis >= 3.0'],
'rethinkdb': ['rethinkdb >= 2.4.0'],
'sqlalchemy': ['sqlalchemy >= 0.8'],
@@ -55,7 +56,7 @@
'twisted': ['twisted'],
'zookeeper': ['kazoo'],
'testing': [
- 'pytest',
+ 'pytest < 6',
'pytest-cov',
'pytest-tornado5'
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_executors.py new/APScheduler-3.7.0/tests/test_executors.py
--- old/APScheduler-3.6.3/tests/test_executors.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_executors.py 2021-01-19 15:34:44.000000000 +0100
@@ -2,15 +2,20 @@
from threading import Event
from types import TracebackType
import gc
+import os
+import signal
import time
import pytest
from pytz import UTC
-from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED, EVENT_JOB_EXECUTED
+from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_EXECUTED, EVENT_JOB_MISSED
from apscheduler.executors.base import MaxInstancesReachedError, run_job
+from apscheduler.executors.pool import ProcessPoolExecutor
from apscheduler.job import Job
+from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.schedulers.base import BaseScheduler
+from tests.conftest import minpython
try:
from unittest.mock import Mock, MagicMock, patch
@@ -144,3 +149,31 @@
foos = [x for x in gc.get_objects() if type(x) is FooBar]
assert len(foos) == 0
+
+
+@minpython(3, 3)
+def test_broken_pool():
+ def listener(evt):
+ pid[0] = evt.retval
+ event.set()
+
+ pid = [None]
+ event = Event()
+ scheduler = BackgroundScheduler(executors={'default': ProcessPoolExecutor(1)})
+ scheduler.add_listener(listener, EVENT_JOB_EXECUTED)
+ scheduler.add_job(os.getpid, 'date', run_date=datetime.now(UTC))
+ scheduler.start()
+
+ event.wait(3)
+ killed_pid = pid[0]
+ os.kill(pid[0], signal.SIGTERM)
+ try:
+ os.waitpid(pid[0], 0)
+ except OSError:
+ pass
+
+ event.clear()
+ scheduler.add_job(os.getpid, 'date', run_date=datetime.now(UTC))
+ event.wait(3)
+ assert pid[0] != killed_pid
+ scheduler.shutdown(True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_executors_py35.py new/APScheduler-3.7.0/tests/test_executors_py35.py
--- old/APScheduler-3.6.3/tests/test_executors_py35.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_executors_py35.py 2021-01-19 15:34:44.000000000 +0100
@@ -1,13 +1,18 @@
"""Contains test functions using Python 3.3+ syntax."""
+import gc
from asyncio import CancelledError
from datetime import datetime
+from unittest.mock import Mock, patch
import pytest
+from pytz import utc
+
from apscheduler.executors.asyncio import AsyncIOExecutor
+from apscheduler.executors.base_py3 import run_coroutine_job
from apscheduler.executors.tornado import TornadoExecutor
+from apscheduler.job import Job
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.schedulers.tornado import TornadoScheduler
-from pytz import utc
@pytest.fixture
@@ -100,3 +105,21 @@
asyncio_executor.shutdown()
with pytest.raises(CancelledError):
await futures.pop()
+
+
+(a)pytest.mark.asyncio
+async def test_run_job_memory_leak():
+ class FooBar:
+ pass
+
+ async def func():
+ foo = FooBar() # noqa: F841
+ raise Exception('dummy')
+
+ fake_job = Mock(Job, func=func, args=(), kwargs={}, misfire_grace_time=1)
+ with patch('logging.getLogger'):
+ for _ in range(5):
+ await run_coroutine_job(fake_job, 'foo', [datetime.now(utc)], __name__)
+
+ foos = [x for x in gc.get_objects() if type(x) is FooBar]
+ assert len(foos) == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_job.py new/APScheduler-3.7.0/tests/test_job.py
--- old/APScheduler-3.6.3/tests/test_job.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_job.py 2021-01-19 15:34:44.000000000 +0100
@@ -1,4 +1,6 @@
# coding: utf-8
+import gc
+import weakref
from datetime import datetime, timedelta
from functools import partial
@@ -64,6 +66,14 @@
job._scheduler.remove_job.assert_called_once_with(job.id, None)
+def test_weakref(create_job):
+ job = create_job(func=dummyfunc)
+ ref = weakref.ref(job)
+ del job
+ gc.collect()
+ assert ref() is None
+
+
def test_pending(job):
"""
Tests that the "pending" property return True when _jobstore_alias is a string, ``False``
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_jobstores.py new/APScheduler-3.7.0/tests/test_jobstores.py
--- old/APScheduler-3.6.3/tests/test_jobstores.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_jobstores.py 2021-01-19 15:34:44.000000000 +0100
@@ -27,6 +27,9 @@
return a + b
+dummy_instance = DummyClass()
+
+
@pytest.fixture
def memjobstore():
yield MemoryJobStore()
@@ -112,18 +115,32 @@
return create
-def test_add_instance_method_job(jobstore, create_add_job):
+def test_add_callable_instance_method_job(jobstore, create_add_job):
instance = DummyClass()
initial_job = create_add_job(jobstore, instance.dummy_method, kwargs={'a': 1, 'b': 2})
job = jobstore.lookup_job(initial_job.id)
assert job.func(*job.args, **job.kwargs) == 3
-def test_add_class_method_job(jobstore, create_add_job):
+def test_add_callable_class_method_job(jobstore, create_add_job):
initial_job = create_add_job(jobstore, DummyClass.dummy_classmethod, kwargs={'a': 1, 'b': 2})
job = jobstore.lookup_job(initial_job.id)
assert job.func(*job.args, **job.kwargs) == 3
+
+def test_add_textual_instance_method_job(jobstore, create_add_job):
+ initial_job = create_add_job(jobstore, 'tests.test_jobstores:dummy_instance.dummy_method',
+ kwargs={'a': 1, 'b': 2})
+ job = jobstore.lookup_job(initial_job.id)
+ assert job.func(*job.args, **job.kwargs) == 3
+
+
+def test_add_textual_class_method_job(jobstore, create_add_job):
+ initial_job = create_add_job(jobstore, 'tests.test_jobstores:DummyClass.dummy_classmethod',
+ kwargs={'a': 1, 'b': 2})
+ job = jobstore.lookup_job(initial_job.id)
+ assert job.func(*job.args, **job.kwargs) == 3
+
def test_lookup_job(jobstore, create_add_job):
initial_job = create_add_job(jobstore)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_schedulers.py new/APScheduler-3.7.0/tests/test_schedulers.py
--- old/APScheduler-3.6.3/tests/test_schedulers.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_schedulers.py 2021-01-19 15:34:44.000000000 +0100
@@ -1,4 +1,5 @@
import logging
+import pickle
from datetime import datetime, timedelta
from threading import Thread
@@ -772,6 +773,9 @@
assert len(scheduler_events) == 1
assert scheduler_events[0].scheduled_run_times == [freeze_time.get(scheduler.timezone)]
+ def test_serialize_scheduler(self, scheduler):
+ pytest.raises(TypeError, pickle.dumps, scheduler).match('Schedulers cannot be serialized')
+
class TestProcessJobs(object):
@pytest.fixture
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_triggers.py new/APScheduler-3.7.0/tests/test_triggers.py
--- old/APScheduler-3.6.3/tests/test_triggers.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_triggers.py 2021-01-19 15:34:44.000000000 +0100
@@ -50,16 +50,6 @@
trigger = _DummyTriggerWithJitter(dt, 60)
assert trigger.get_next_fire_time(None, now) == expected_dt
- def test_jitter_in_past_but_initial_date_in_future(self, monkeypatch):
- monkeypatch.setattr(random, 'uniform', lambda a, b: -30.)
-
- now = datetime(2017, 5, 25, 13, 40, 44)
- dt = datetime(2017, 5, 25, 13, 40, 47)
- expected_dt = dt
-
- trigger = _DummyTriggerWithJitter(dt, 60)
- assert trigger.get_next_fire_time(None, now) == expected_dt
-
def test_jitter_in_future_but_initial_date_in_past(self, monkeypatch):
monkeypatch.setattr(random, 'uniform', lambda a, b: 30.)
@@ -69,16 +59,6 @@
trigger = _DummyTriggerWithJitter(dt, 60)
assert trigger.get_next_fire_time(None, now) == expected_dt
-
- def test_jitter_misfire(self, monkeypatch):
- monkeypatch.setattr(random, 'uniform', lambda a, b: -30.)
-
- now = datetime(2017, 5, 25, 13, 40, 44)
- dt = datetime(2017, 5, 25, 13, 40, 40)
- expected_dt = dt
-
- trigger = _DummyTriggerWithJitter(dt, 60)
- assert trigger.get_next_fire_time(None, now) == expected_dt
def test_jitter_is_now(self, monkeypatch):
monkeypatch.setattr(random, 'uniform', lambda a, b: 4.)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tests/test_util.py new/APScheduler-3.7.0/tests/test_util.py
--- old/APScheduler-3.6.3/tests/test_util.py 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tests/test_util.py 2021-01-19 15:34:44.000000000 +0100
@@ -1,20 +1,22 @@
# coding: utf-8
import platform
+import sys
from datetime import date, datetime, timedelta, tzinfo
-from functools import partial
+from functools import partial, wraps
from types import ModuleType
import pytest
import pytz
import six
-import sys
from apscheduler.job import Job
-from apscheduler.util import (
- asint, asbool, astimezone, convert_to_datetime, datetime_to_utc_timestamp,
- utc_timestamp_to_datetime, timedelta_seconds, datetime_ceil, get_callable_name, obj_to_ref,
- ref_to_obj, maybe_ref, check_callable_args, datetime_repr, repr_escape)
-from tests.conftest import minpython, maxpython
+from apscheduler.util import (asbool, asint, astimezone, check_callable_args,
+ convert_to_datetime, datetime_ceil,
+ datetime_repr, datetime_to_utc_timestamp,
+ get_callable_name, maybe_ref, obj_to_ref,
+ ref_to_obj, repr_escape, timedelta_seconds,
+ utc_timestamp_to_datetime)
+from tests.conftest import maxpython, minpython
try:
from unittest.mock import Mock
@@ -351,3 +353,17 @@
exc = pytest.raises(ValueError, check_callable_args, func, [1], {})
assert str(exc.value) == ('The following keyword-only arguments have not been supplied in '
'kwargs: y')
+
+ def test_wrapped_func(self):
+ """
+ Test that a wrapped function can be scheduled even if it cannot accept the arguments given
+ in add_job() if the wrapper can.
+ """
+ def func():
+ pass
+
+ @wraps(func)
+ def wrapper(arg):
+ func()
+
+ check_callable_args(wrapper, (1,), {})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.6.3/tox.ini new/APScheduler-3.7.0/tox.ini
--- old/APScheduler-3.6.3/tox.ini 2019-11-05 08:51:24.000000000 +0100
+++ new/APScheduler-3.7.0/tox.ini 2021-01-19 15:34:44.000000000 +0100
@@ -1,8 +1,9 @@
[tox]
-envlist = py27, py34, py35, py36, py37, pypy, pypy3, flake8
+envlist = py27, py35, py36, py37, pypy, pypy3, flake8
skip_missing_interpreters = true
[testenv]
+download = true
commands = pytest {posargs}
extras = testing
asyncio
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnuastro for openSUSE:Factory checked in at 2021-02-02 14:25:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnuastro (Old)
and /work/SRC/openSUSE:Factory/.gnuastro.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnuastro"
Tue Feb 2 14:25:22 2021 rev:5 rq:868423 version:0.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnuastro/gnuastro.changes 2020-09-25 16:31:15.487875674 +0200
+++ /work/SRC/openSUSE:Factory/.gnuastro.new.28504/gnuastro.changes 2021-02-02 14:25:36.111385299 +0100
@@ -1,0 +2,13 @@
+Sat Jan 30 07:55:39 UTC 2021 - Andreas Stieger <andreas.stieger(a)gmx.de>
+
+- GNU Astronomy Utilities 0.14 (library 12.0.0):
+ * new program Query ('astquery') to query to external datasets
+ and retrieve the resulting datasets from the command-line.
+ The package now recommends curl for this purpose.
+ * Gnuastro programs will first attempt to write the array in RAM,
+ only when it fails will they use a memory-mapped file.
+ Directory changes from .gnuastro_mmap to gnuastro_mmap
+ * Various documentation updates, extensions and fixes
+- remove obsolete texinfo packaging macros
+
+-------------------------------------------------------------------
Old:
----
gnuastro-0.13.tar.gz
gnuastro-0.13.tar.gz.sig
New:
----
gnuastro-0.14.tar.gz
gnuastro-0.14.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnuastro.spec ++++++
--- /var/tmp/diff_new_pack.4OIfbW/_old 2021-02-02 14:25:36.887386506 +0100
+++ /var/tmp/diff_new_pack.4OIfbW/_new 2021-02-02 14:25:36.887386506 +0100
@@ -1,7 +1,7 @@
#
# spec file for package gnuastro
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,10 +16,10 @@
#
-%define sover 11
+%define sover 12
%bcond_with tests
Name: gnuastro
-Version: 0.13
+Version: 0.14
Release: 0
Summary: GNU Astronomy Utilities
License: GPL-3.0-or-later
@@ -36,9 +36,8 @@
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libtiff-4)
BuildRequires: pkgconfig(wcslib)
-Requires(post): %{install_info_prereq}
-Requires(preun): %{install_info_prereq}
Recommends: %{name}-doc
+Recommends: curl
Recommends: ghostscript_any >= 9.10
%if %{with tests}
BuildRequires: ghostscript_any
@@ -93,15 +92,6 @@
%post -n libgnuastro%{sover} -p /sbin/ldconfig
%postun -n libgnuastro%{sover} -p /sbin/ldconfig
-%post doc
-for infoname in %{name}.info %{name}.info-{1..6}; do
-%install_info --info-dir=%{_infodir} %{_infodir}/${infoname}.gz
-done
-
-%preun doc
-for infoname in %{name}.info %{name}.info-{1..6}; do
-%install_info_delete --info-dir=%{_infodir} %{_infodir}/${infoname}.gz
-done
%files
%license COPYING*
++++++ gnuastro-0.13.tar.gz -> gnuastro-0.14.tar.gz ++++++
++++ 184890 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rocksndiamonds for openSUSE:Factory checked in at 2021-02-02 14:25:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rocksndiamonds (Old)
and /work/SRC/openSUSE:Factory/.rocksndiamonds.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rocksndiamonds"
Tue Feb 2 14:25:20 2021 rev:34 rq:868416 version:4.2.2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/rocksndiamonds/rocksndiamonds.changes 2021-01-05 18:15:59.975493494 +0100
+++ /work/SRC/openSUSE:Factory/.rocksndiamonds.new.28504/rocksndiamonds.changes 2021-02-02 14:25:29.939375700 +0100
@@ -1,0 +2,19 @@
+Sat Jan 23 01:27:33 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- don't recreate games user - managed by systemd-users-game
+- update to 4.2.2.1:
+ * fixed bug with playing team mode tapes with changed visible playfield size
+ * added patch mode to patch tapes to force visible playfield size of 34 x 34
+ * added patch mode to automatically fix tapes for visible playfield size
+ * fixed single step mode for R���n���D game engine when used in team mode
+ * fixed triggering custom element actions by digging or collecting
+ * added option in level editor to use time score for 1 or 10 seconds left
+ * fixed time score for native Emerald Mine and Diamond Caves levels
+ * fixed bug with screen keyboard still being active during request dialogs
+ * fixed bug with screen keyboard causing overlay buttons to be disabled
+ * added option to disable warning about read-only levels when entering editor
+ * fixed bug with not updating game panel when leaving invisible warp mode
+ * fixed displaying new high score entry if new entry is not on the first page
+ * fixed graphical bug with envelope style request dialog after the game ended
+
+-------------------------------------------------------------------
Old:
----
rocksndiamonds-4.2.2.0.tar.gz
New:
----
rocksndiamonds-4.2.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rocksndiamonds.spec ++++++
--- /var/tmp/diff_new_pack.RDc7H5/_old 2021-02-02 14:25:30.599376726 +0100
+++ /var/tmp/diff_new_pack.RDc7H5/_new 2021-02-02 14:25:30.603376733 +0100
@@ -17,7 +17,7 @@
Name: rocksndiamonds
-Version: 4.2.2.0
+Version: 4.2.2.1
Release: 0
Summary: Colorful Boulderdash'n'Emerald Mine'n'Sokoban'n'Stuff
License: GPL-2.0-or-later
@@ -31,16 +31,13 @@
BuildRequires: fdupes
BuildRequires: hicolor-icon-theme
BuildRequires: pkgconfig
-#BuildRequires: libsmpeg-devel
+BuildRequires: system-user-games
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(SDL2_image)
BuildRequires: pkgconfig(SDL2_mixer)
BuildRequires: pkgconfig(SDL2_net)
BuildRequires: pkgconfig(zlib)
Requires: %{name}-data
-Requires(pre): %{_sbindir}/groupadd
-Requires(pre): %{_sbindir}/useradd
-Requires(pre): group(games)
Requires(pre): user(games)
%description
@@ -90,10 +87,6 @@
%fdupes -s %{buildroot}%{_prefix}
-%pre
-getent group games >/dev/null || groupadd -r games
-getent passwd games >/dev/null || useradd -r -g games -d %{_localstatedir}/games -s /sbin/nologin
-
%files
%license COPYING
%doc CREDITS ChangeLog
++++++ rocksndiamonds-4.2.2.0.tar.gz -> rocksndiamonds-4.2.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/CREDITS new/rocksndiamonds-4.2.2.1/CREDITS
--- old/rocksndiamonds-4.2.2.0/CREDITS 2020-10-02 12:38:50.000000000 +0200
+++ new/rocksndiamonds-4.2.2.1/CREDITS 2021-01-15 17:16:52.000000000 +0100
@@ -51,5 +51,7 @@
Thanks to Simon Forsberg for being the moderator of the R'n'D forum.
+Thanks to Rick Jansen for white X-mas.
+
And not to forget: Many thanks to all those who contributed levels to this game
since 1995!
Binary files old/rocksndiamonds-4.2.2.0/rocksndiamonds and new/rocksndiamonds-4.2.2.1/rocksndiamonds differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/confhash.h new/rocksndiamonds-4.2.2.1/src/confhash.h
--- old/rocksndiamonds-4.2.2.0/src/confhash.h 2020-12-23 13:04:59.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/confhash.h 2021-01-15 17:17:14.000000000 +0100
@@ -1 +1 @@
-#define SOURCE_HASH_STRING "ba02ca3"
+#define SOURCE_HASH_STRING "b2c4f6e"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/conftime.h new/rocksndiamonds-4.2.2.1/src/conftime.h
--- old/rocksndiamonds-4.2.2.0/src/conftime.h 2020-12-23 13:04:59.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/conftime.h 2021-01-15 17:17:14.000000000 +0100
@@ -1 +1 @@
-#define SOURCE_DATE_STRING "2020-12-23 12:03"
+#define SOURCE_DATE_STRING "2021-01-10 00:08"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/editor.c new/rocksndiamonds-4.2.2.1/src/editor.c
--- old/rocksndiamonds-4.2.2.0/src/editor.c 2020-12-14 02:15:48.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/editor.c 2021-01-15 17:16:52.000000000 +0100
@@ -559,6 +559,7 @@
// selectbox identifiers
GADGET_ID_TIME_OR_STEPS,
+ GADGET_ID_TIME_SCORE_BASE,
GADGET_ID_GAME_ENGINE_TYPE,
GADGET_ID_LEVELSET_SAVE_MODE,
GADGET_ID_WIND_DIRECTION,
@@ -648,6 +649,7 @@
GADGET_ID_SB_OBJECTS_NEEDED,
GADGET_ID_AUTO_EXIT_SOKOBAN,
GADGET_ID_SOLVED_BY_ONE_PLAYER,
+ GADGET_ID_FINISH_DIG_COLLECT,
GADGET_ID_CONTINUOUS_SNAPPING,
GADGET_ID_BLOCK_SNAP_FIELD,
GADGET_ID_BLOCK_LAST_FIELD,
@@ -839,6 +841,7 @@
enum
{
ED_SELECTBOX_ID_TIME_OR_STEPS,
+ ED_SELECTBOX_ID_TIME_SCORE_BASE,
ED_SELECTBOX_ID_GAME_ENGINE_TYPE,
ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
ED_SELECTBOX_ID_WIND_DIRECTION,
@@ -953,6 +956,7 @@
ED_CHECKBUTTON_ID_SB_OBJECTS_NEEDED,
ED_CHECKBUTTON_ID_AUTO_EXIT_SOKOBAN,
ED_CHECKBUTTON_ID_SOLVED_BY_ONE_PLAYER,
+ ED_CHECKBUTTON_ID_FINISH_DIG_COLLECT,
ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING,
ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD,
ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD,
@@ -1408,7 +1412,7 @@
GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP,
GADGET_ID_LEVEL_TIMESCORE_TEXT, GADGET_ID_NONE,
&level.score[SC_TIME_BONUS],
- "score for each second/step left:", NULL, NULL
+ "score for time or steps left:", NULL, NULL
},
{
ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12),
@@ -1731,6 +1735,14 @@
{ -1, NULL }
};
+static struct ValueTextInfo options_time_score_base[] =
+{
+ { 1, "per second/step" },
+ { 10, "per 10 seconds/steps" },
+
+ { -1, NULL }
+};
+
static struct ValueTextInfo options_game_engine_type[] =
{
{ GAME_ENGINE_TYPE_RND, "Rocks'n'Diamonds" },
@@ -2466,6 +2478,14 @@
NULL, NULL, "(0 => no limit)", "time or step limit"
},
{
+ -1, ED_LEVEL_SETTINGS_YPOS(10),
+ GADGET_ID_TIME_SCORE_BASE, GADGET_ID_LEVEL_TIMESCORE_UP,
+ -1,
+ options_time_score_base,
+ &level.time_score_base,
+ NULL, NULL, NULL, "time score for 1 or 10 seconds/steps"
+ },
+ {
ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11),
GADGET_ID_GAME_ENGINE_TYPE, GADGET_ID_NONE,
-1,
@@ -3111,6 +3131,13 @@
"only one player must enter exit", "level solved by first player in exit"
},
{
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3),
+ GADGET_ID_FINISH_DIG_COLLECT, GADGET_ID_NONE,
+ &level.finish_dig_collect,
+ NULL, NULL,
+ "CE action on finished dig/collect", "only finished dig/collect triggers CE"
+ },
+ {
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9),
GADGET_ID_CONTINUOUS_SNAPPING, GADGET_ID_NONE,
&level.continuous_snapping,
@@ -7722,7 +7749,7 @@
return TRUE;
}
- if (!Request("This level is read only! "
+ if (!Request("This level is read-only! "
"Save into personal level set?", REQ_ASK))
return FALSE;
@@ -9983,6 +10010,7 @@
// draw checkbutton gadgets
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_FINISH_DIG_COLLECT);
// draw counter gadgets
MapCounterButtons(ED_COUNTER_ID_INVENTORY_SIZE);
@@ -13382,7 +13410,7 @@
if (levelset_save_mode == LEVELSET_SAVE_MODE_UPDATE &&
leveldir_current->readonly)
{
- Request("This level set is read only!", REQ_CONFIRM);
+ Request("This level set is read-only!", REQ_CONFIRM);
return;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/engines.h new/rocksndiamonds-4.2.2.1/src/engines.h
--- old/rocksndiamonds-4.2.2.0/src/engines.h 2020-12-14 02:15:48.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/engines.h 2021-01-15 17:16:52.000000000 +0100
@@ -31,6 +31,9 @@
boolean getTeamMode_EM(void);
boolean isActivePlayer_EM(int);
+int getScreenFieldSizeX(void);
+int getScreenFieldSizeY(void);
+
void PlayLevelSound_EM(int, int, int, int);
void InitGraphicInfo_EM(void);
boolean CheckSingleStepMode_EM(byte action[], int, boolean, boolean, boolean);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/events.c new/rocksndiamonds-4.2.2.1/src/events.c
--- old/rocksndiamonds-4.2.2.0/src/events.c 2020-12-23 13:04:38.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/events.c 2021-01-15 17:16:52.000000000 +0100
@@ -1476,7 +1476,7 @@
if (key_status == KEY_PRESSED)
SetOverlayEnabled(!GetOverlayEnabled());
}
- else
+ else if (!textinput_status)
{
// for any other "real" key event, disable virtual buttons
SetOverlayEnabled(FALSE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/files.c new/rocksndiamonds-4.2.2.1/src/files.c
--- old/rocksndiamonds-4.2.2.0/src/files.c 2020-12-23 13:04:38.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/files.c 2021-01-15 17:16:52.000000000 +0100
@@ -59,6 +59,7 @@
#define TAPE_CHUNK_VERS_SIZE 8 // size of file version chunk
#define TAPE_CHUNK_HEAD_SIZE 20 // size of tape file header
#define TAPE_CHUNK_HEAD_UNUSED 1 // unused tape header bytes
+#define TAPE_CHUNK_SCRN_SIZE 2 // size of screen size chunk
#define LEVEL_CHUNK_CNT3_SIZE(x) (LEVEL_CHUNK_CNT3_HEADER + (x))
#define LEVEL_CHUNK_CUS3_SIZE(x) (2 + (x) * LEVEL_CPART_CUS3_SIZE)
@@ -259,6 +260,12 @@
{
-1, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(12),
+ &li.time_score_base, 1
+ },
+
+ {
+ -1, -1,
-1, -1,
NULL, -1
}
@@ -307,6 +314,11 @@
TYPE_BOOLEAN, CONF_VALUE_8_BIT(15),
&li.lazy_relocation, FALSE
},
+ {
+ EL_PLAYER_1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(16),
+ &li.finish_dig_collect, TRUE
+ },
// (these values are different for each player)
{
@@ -3710,6 +3722,9 @@
if (jx != -1 && jy != -1)
level->field[jx][jy] = EL_PLAYER_1 + nr;
}
+
+ // time score is counted for each 10 seconds left in Emerald Mine levels
+ level->time_score_base = 10;
}
@@ -5727,6 +5742,9 @@
// Diamond Caves has the same (strange) behaviour as Emerald Mine that gems
// can slip down from flat walls, like normal walls and steel walls
level->em_slippery_gems = TRUE;
+
+ // time score is counted for each 10 seconds left in Diamond Caves levels
+ level->time_score_base = 10;
}
static void LoadLevelFromFileInfo_DC(struct LevelInfo *level,
@@ -6250,7 +6268,7 @@
if (level->game_version < VERSION_IDENT(3,2,0,5))
{
// time bonus score was given for 10 s instead of 1 s before 3.2.0-5
- level->score[SC_TIME_BONUS] /= 10;
+ level->time_score_base = 10;
}
if (leveldir_current->latest_engine)
@@ -6422,6 +6440,10 @@
// only Sokoban fields (but not objects) had to be solved before 4.1.1.1
if (level->game_version < VERSION_IDENT(4,1,1,1))
level->sb_objects_needed = FALSE;
+
+ // CE actions were triggered by unfinished digging/collecting up to 4.2.2.0
+ if (level->game_version <= VERSION_IDENT(4,2,2,0))
+ level->finish_dig_collect = FALSE;
}
static void LoadLevel_InitStandardElements(struct LevelInfo *level)
@@ -7628,6 +7650,9 @@
tape.playing = FALSE;
tape.pausing = FALSE;
+ tape.scr_fieldx = SCR_FIELDX_DEFAULT;
+ tape.scr_fieldy = SCR_FIELDY_DEFAULT;
+
tape.no_valid_file = FALSE;
}
@@ -7718,6 +7743,14 @@
return chunk_size;
}
+static int LoadTape_SCRN(File *file, int chunk_size, struct TapeInfo *tape)
+{
+ tape->scr_fieldx = getFile8Bit(file);
+ tape->scr_fieldy = getFile8Bit(file);
+
+ return chunk_size;
+}
+
static int LoadTape_INFO(File *file, int chunk_size, struct TapeInfo *tape)
{
int level_identifier_size;
@@ -8008,6 +8041,7 @@
{
{ "VERS", TAPE_CHUNK_VERS_SIZE, LoadTape_VERS },
{ "HEAD", TAPE_CHUNK_HEAD_SIZE, LoadTape_HEAD },
+ { "SCRN", TAPE_CHUNK_SCRN_SIZE, LoadTape_SCRN },
{ "INFO", -1, LoadTape_INFO },
{ "BODY", -1, LoadTape_BODY },
{ NULL, 0, NULL }
@@ -8088,6 +8122,14 @@
CopyNativeTape_SP_to_RND(&level);
}
+static boolean checkSaveTape_SCRN(struct TapeInfo *tape)
+{
+ // chunk required for team mode tapes with non-default screen size
+ return (tape->num_participating_players > 1 &&
+ (tape->scr_fieldx != SCR_FIELDX_DEFAULT ||
+ tape->scr_fieldy != SCR_FIELDY_DEFAULT));
+}
+
static void SaveTape_VERS(FILE *file, struct TapeInfo *tape)
{
putFileVersion(file, tape->file_version);
@@ -8120,6 +8162,12 @@
putFileVersion(file, tape->engine_version);
}
+static void SaveTape_SCRN(FILE *file, struct TapeInfo *tape)
+{
+ putFile8Bit(file, tape->scr_fieldx);
+ putFile8Bit(file, tape->scr_fieldy);
+}
+
static void SaveTape_INFO(FILE *file, struct TapeInfo *tape)
{
int level_identifier_size = strlen(tape->level_identifier) + 1;
@@ -8185,6 +8233,12 @@
putFileChunkBE(file, "HEAD", TAPE_CHUNK_HEAD_SIZE);
SaveTape_HEAD(file, &tape);
+ if (checkSaveTape_SCRN(&tape))
+ {
+ putFileChunkBE(file, "SCRN", TAPE_CHUNK_SCRN_SIZE);
+ SaveTape_SCRN(file, &tape);
+ }
+
putFileChunkBE(file, "INFO", info_chunk_size);
SaveTape_INFO(file, &tape);
@@ -8693,6 +8747,10 @@
TYPE_SWITCH,
&setup.editor.show_element_token, "editor.show_element_token"
},
+ {
+ TYPE_SWITCH,
+ &setup.editor.show_read_only_warning, "editor.show_read_only_warning"
+ },
};
static struct TokenInfo editor_cascade_setup_tokens[] =
@@ -9324,6 +9382,8 @@
si->editor.show_element_token = FALSE;
+ si->editor.show_read_only_warning = TRUE;
+
si->editor.use_template_for_new_levels = TRUE;
si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/game.c new/rocksndiamonds-4.2.2.1/src/game.c
--- old/rocksndiamonds-4.2.2.0/src/game.c 2020-12-23 13:04:38.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/game.c 2021-01-15 17:16:52.000000000 +0100
@@ -1119,6 +1119,8 @@
static int getInvisibleActiveFromInvisibleElement(int);
static int getInvisibleFromInvisibleActiveElement(int);
+static void TestFieldAfterSnapping(int, int, int, int, int);
+
static struct GadgetInfo *game_gadget[NUM_GAME_BUTTONS];
// for detection of endless loops, caused by custom element programming
@@ -2867,12 +2869,10 @@
DisplayGameControlValues();
}
-#if 0
-static void UpdateGameDoorValues(void)
+void UpdateGameDoorValues(void)
{
UpdateGameControlValues();
}
-#endif
void DrawGameDoorValues(void)
{
@@ -3576,11 +3576,15 @@
InitGameEngine();
InitGameControlValues();
- // initialize tape actions from game when recording tape
if (tape.recording)
{
+ // initialize tape actions from game when recording tape
tape.use_key_actions = game.use_key_actions;
tape.use_mouse_actions = game.use_mouse_actions;
+
+ // initialize visible playfield size when recording tape (for team mode)
+ tape.scr_fieldx = SCR_FIELDX;
+ tape.scr_fieldy = SCR_FIELDY;
}
// don't play tapes over network
@@ -3713,6 +3717,8 @@
player->shield_normal_time_left = 0;
player->shield_deadly_time_left = 0;
+ player->last_removed_element = EL_UNDEFINED;
+
player->inventory_infinite_element = EL_UNDEFINED;
player->inventory_size = 0;
@@ -4710,7 +4716,7 @@
{
static int time_count_steps;
static int time, time_final;
- static int score, score_final;
+ static float score, score_final; // needed for time score < 10 for 10 seconds
static int health, health_final;
static int game_over_delay_1 = 0;
static int game_over_delay_2 = 0;
@@ -4718,6 +4724,8 @@
int game_over_delay_value_1 = 50;
int game_over_delay_value_2 = 25;
int game_over_delay_value_3 = 50;
+ int time_score_base = MIN(MAX(1, level.time_score_base), 10);
+ float time_score = (float)level.score[SC_TIME_BONUS] / time_score_base;
if (!game.LevelSolved_GameWon)
{
@@ -4751,19 +4759,23 @@
score = score_final = game.score_final;
health = health_final = game.health_final;
- if (level.score[SC_TIME_BONUS] > 0)
+ if (time_score > 0)
{
+ int time_frames = 0;
+
if (TimeLeft > 0)
{
time_final = 0;
- score_final += TimeLeft * level.score[SC_TIME_BONUS];
+ time_frames = TimeLeft * FRAMES_PER_SECOND - TimeFrames;
}
else if (game.no_time_limit && TimePlayed < 999)
{
time_final = 999;
- score_final += (999 - TimePlayed) * level.score[SC_TIME_BONUS];
+ time_frames = (999 - TimePlayed) * FRAMES_PER_SECOND - TimeFrames;
}
+ score_final += time_score * time_frames / FRAMES_PER_SECOND + 0.5;
+
time_count_steps = MAX(1, ABS(time_final - time) / 100);
game_over_delay_1 = game_over_delay_value_1;
@@ -4771,7 +4783,7 @@
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
{
health_final = 0;
- score_final += health * level.score[SC_TIME_BONUS];
+ score_final += health * time_score;
game_over_delay_2 = game_over_delay_value_2;
}
@@ -4860,7 +4872,11 @@
time_count_steps = 1;
time += time_count_steps * time_count_dir;
- score += time_count_steps * level.score[SC_TIME_BONUS];
+ score += time_count_steps * time_score;
+
+ // set final score to correct rounding differences after counting score
+ if (time == time_final)
+ score = score_final;
game.LevelSolved_CountingTime = time;
game.LevelSolved_CountingScore = score;
@@ -4892,7 +4908,7 @@
int health_count_dir = (health < health_final ? +1 : -1);
health += health_count_dir;
- score += level.score[SC_TIME_BONUS];
+ score += time_score;
game.LevelSolved_CountingHealth = health;
game.LevelSolved_CountingScore = score;
@@ -11282,13 +11298,14 @@
{
if (tape.single_step && tape.recording && !tape.pausing)
{
- /* as it is called "single step mode", just return to pause mode when the
- player stopped moving after one tile (or never starts moving at all) */
- if (!player->is_moving &&
- !player->is_pushing &&
- !player->is_dropping_pressed &&
- !player->effective_mouse_action.button)
- TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+ // as it is called "single step mode", just return to pause mode when the
+ // player stopped moving after one tile (or never starts moving at all)
+ // (reverse logic needed here in case single step mode used in team mode)
+ if (player->is_moving ||
+ player->is_pushing ||
+ player->is_dropping_pressed ||
+ player->effective_mouse_action.button)
+ game.enter_single_step_mode = FALSE;
}
CheckSaveEngineSnapshot(player);
@@ -11951,6 +11968,10 @@
DrawGameDoorValues();
}
+ // check single step mode (set flag and clear again if any player is active)
+ game.enter_single_step_mode =
+ (tape.single_step && tape.recording && !tape.pausing);
+
for (i = 0; i < MAX_PLAYERS; i++)
{
int actual_player_action = stored_player[i].effective_action;
@@ -11975,6 +11996,10 @@
ScrollPlayer(&stored_player[i], SCROLL_GO_ON);
}
+ // single step pause mode may already have been toggled by "ScrollPlayer()"
+ if (game.enter_single_step_mode && !tape.pausing)
+ TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+
ScrollScreen(NULL, SCROLL_GO_ON);
/* for backwards compatibility, the following code emulates a fixed bug that
@@ -12027,10 +12052,17 @@
MovDelay[x][y]--;
if (MovDelay[x][y] <= 0)
{
+ int element = Store[x][y];
+ int move_direction = MovDir[x][y];
+ int player_index_bit = Store2[x][y];
+
+ Store[x][y] = 0;
+ Store2[x][y] = 0;
+
RemoveField(x, y);
TEST_DrawLevelField(x, y);
- TestIfElementTouchesCustomElement(x, y); // for empty space
+ TestFieldAfterSnapping(x, y, element, move_direction, player_index_bit);
}
}
@@ -12448,6 +12480,8 @@
static boolean AllPlayersInSight(struct PlayerInfo *player, int x, int y)
{
int min_x = x, min_y = y, max_x = x, max_y = y;
+ int scr_fieldx = getScreenFieldSizeX();
+ int scr_fieldy = getScreenFieldSizeY();
int i;
for (i = 0; i < MAX_PLAYERS; i++)
@@ -12463,7 +12497,7 @@
max_y = MAX(max_y, jy);
}
- return (max_x - min_x < SCR_FIELDX && max_y - min_y < SCR_FIELDY);
+ return (max_x - min_x < scr_fieldx && max_y - min_y < scr_fieldy);
}
static boolean AllPlayersInVisibleScreen(void)
@@ -13029,6 +13063,21 @@
if (!player->is_pushing)
TestIfElementTouchesCustomElement(jx, jy); // for empty space
+ if (level.finish_dig_collect &&
+ (player->is_digging || player->is_collecting))
+ {
+ int last_element = player->last_removed_element;
+ int move_direction = player->MovDir;
+ int enter_side = MV_DIR_OPPOSITE(move_direction);
+ int change_event = (player->is_digging ? CE_PLAYER_DIGS_X :
+ CE_PLAYER_COLLECTS_X);
+
+ CheckTriggeredElementChangeByPlayer(jx, jy, last_element, change_event,
+ player->index_bit, enter_side);
+
+ player->last_removed_element = EL_UNDEFINED;
+ }
+
if (!player->active)
RemovePlayer(player);
}
@@ -13763,7 +13812,8 @@
game.players_still_needed--;
}
-static void setFieldForSnapping(int x, int y, int element, int direction)
+static void SetFieldForSnapping(int x, int y, int element, int direction,
+ int player_index_bit)
{
struct ElementInfo *ei = &element_info[element];
int direction_bit = MV_DIR_TO_BIT(direction);
@@ -13773,6 +13823,9 @@
Tile[x][y] = EL_ELEMENT_SNAPPING;
MovDelay[x][y] = MOVE_DELAY_NORMAL_SPEED + 1 - 1;
+ MovDir[x][y] = direction;
+ Store[x][y] = element;
+ Store2[x][y] = player_index_bit;
ResetGfxAnimation(x, y);
@@ -13782,6 +13835,20 @@
GfxFrame[x][y] = -1;
}
+static void TestFieldAfterSnapping(int x, int y, int element, int direction,
+ int player_index_bit)
+{
+ TestIfElementTouchesCustomElement(x, y); // for empty space
+
+ if (level.finish_dig_collect)
+ {
+ int dig_side = MV_DIR_OPPOSITE(direction);
+
+ CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
+ player_index_bit, dig_side);
+ }
+}
+
/*
=============================================================================
checkDiagonalPushing()
@@ -14061,22 +14128,28 @@
PlayLevelSoundElementAction(x, y, element, ACTION_DIGGING);
- CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_DIGS_X,
- player->index_bit, dig_side);
+ // use old behaviour for old levels (digging)
+ if (!level.finish_dig_collect)
+ {
+ CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_DIGS_X,
+ player->index_bit, dig_side);
- // if digging triggered player relocation, finish digging tile
- if (mode == DF_DIG && (player->jx != jx || player->jy != jy))
- setFieldForSnapping(x, y, element, move_direction);
+ // if digging triggered player relocation, finish digging tile
+ if (mode == DF_DIG && (player->jx != jx || player->jy != jy))
+ SetFieldForSnapping(x, y, element, move_direction, player->index_bit);
+ }
if (mode == DF_SNAP)
{
if (level.block_snap_field)
- setFieldForSnapping(x, y, element, move_direction);
+ SetFieldForSnapping(x, y, element, move_direction, player->index_bit);
else
- TestIfElementTouchesCustomElement(x, y); // for empty space
+ TestFieldAfterSnapping(x, y, element, move_direction, player->index_bit);
- CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
- player->index_bit, dig_side);
+ // use old behaviour for old levels (snapping)
+ if (!level.finish_dig_collect)
+ CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
+ player->index_bit, dig_side);
}
}
else if (player_can_move_or_snap && IS_COLLECTIBLE(element))
@@ -14188,25 +14261,28 @@
RaiseScoreElement(element);
PlayLevelSoundElementAction(x, y, element, ACTION_COLLECTING);
- if (is_player)
+ // use old behaviour for old levels (collecting)
+ if (!level.finish_dig_collect && is_player)
{
CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_COLLECTS_X,
player->index_bit, dig_side);
// if collecting triggered player relocation, finish collecting tile
if (mode == DF_DIG && (player->jx != jx || player->jy != jy))
- setFieldForSnapping(x, y, element, move_direction);
+ SetFieldForSnapping(x, y, element, move_direction, player->index_bit);
}
if (mode == DF_SNAP)
{
if (level.block_snap_field)
- setFieldForSnapping(x, y, element, move_direction);
+ SetFieldForSnapping(x, y, element, move_direction, player->index_bit);
else
- TestIfElementTouchesCustomElement(x, y); // for empty space
+ TestFieldAfterSnapping(x, y, element, move_direction, player->index_bit);
- CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
- player->index_bit, dig_side);
+ // use old behaviour for old levels (snapping)
+ if (!level.finish_dig_collect)
+ CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
+ player->index_bit, dig_side);
}
}
else if (player_can_move_or_snap && IS_PUSHABLE(element))
@@ -14544,6 +14620,8 @@
{
player->is_collecting = !player->is_digging;
player->is_active = TRUE;
+
+ player->last_removed_element = element;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/game.h new/rocksndiamonds-4.2.2.1/src/game.h
--- old/rocksndiamonds-4.2.2.0/src/game.h 2020-12-23 13:04:38.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/game.h 2021-01-15 17:16:52.000000000 +0100
@@ -244,6 +244,9 @@
boolean set_centered_player;
boolean set_centered_player_wrap;
+ // values for single step mode control
+ boolean enter_single_step_mode;
+
// values for random number generator initialization after snapshot
unsigned int num_random_calls;
@@ -378,6 +381,8 @@
int shield_normal_time_left;
int shield_deadly_time_left;
+ int last_removed_element;
+
int inventory_element[MAX_INVENTORY_SIZE];
int inventory_infinite_element;
int inventory_size;
@@ -396,7 +401,7 @@
int getPlayerInventorySize(int);
-void DrawGameValue_Time(int);
+void UpdateGameDoorValues(void);
void DrawGameDoorValues(void);
void UpdateAndDisplayGameControlValues(void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/game_em/graphics.c new/rocksndiamonds-4.2.2.1/src/game_em/graphics.c
--- old/rocksndiamonds-4.2.2.0/src/game_em/graphics.c 2020-12-05 10:47:39.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/game_em/graphics.c 2021-01-15 17:16:52.000000000 +0100
@@ -553,11 +553,13 @@
boolean checkIfAllPlayersFitToScreen(void)
{
int sx1 = 0, sy1 = 0, sx2 = 0, sy2 = 0;
+ int scr_fieldx = getScreenFieldSizeX();
+ int scr_fieldy = getScreenFieldSizeY();
setMinimalPlayerBoundaries(&sx1, &sy1, &sx2, &sy2);
- return (sx2 - sx1 <= SCR_FIELDX * TILEX &&
- sy2 - sy1 <= SCR_FIELDY * TILEY);
+ return (sx2 - sx1 <= scr_fieldx * TILEX &&
+ sy2 - sy1 <= scr_fieldy * TILEY);
}
static void setScreenCenteredToAllPlayers(int *sx, int *sy)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/game_em/reademc.c new/rocksndiamonds-4.2.2.1/src/game_em/reademc.c
--- old/rocksndiamonds-4.2.2.0/src/game_em/reademc.c 2020-10-02 12:38:50.000000000 +0200
+++ new/rocksndiamonds-4.2.2.1/src/game_em/reademc.c 2021-01-15 17:16:52.000000000 +0100
@@ -312,7 +312,7 @@
cav.nut_score = src[2090];
cav.dynamite_score = src[2091];
cav.key_score = src[2092];
- cav.exit_score = src[2093] * 8 / 5;
+ cav.exit_score = src[2093];
cav.lenses_score = src[2151];
cav.magnify_score = src[2152];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/game_mm/mm_tools.c new/rocksndiamonds-4.2.2.1/src/game_mm/mm_tools.c
--- old/rocksndiamonds-4.2.2.0/src/game_mm/mm_tools.c 2020-12-14 02:15:48.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/game_mm/mm_tools.c 2021-01-15 17:16:52.000000000 +0100
@@ -648,6 +648,7 @@
#define XSN_CHANGE_DELAY 30
#define XSN_CHANGE_FACTOR 3
#define XSN_ALPHA_DEFAULT XSN_ALPHA_VALUE(95)
+#define XSN_ALPHA_VISIBLE XSN_ALPHA_VALUE(50)
#define XSN_DEBUG_STEPS 5
static byte xsn_bits_0[] = { 0x05, 0x02, 0x05 };
@@ -707,6 +708,8 @@
struct XsnItem items[XSN_MAX_ITEMS];
Bitmap *bitmap;
+
+ int alpha;
};
static struct Xsn xsn = { 0 };
@@ -847,7 +850,7 @@
BlitBitmapMasked(xsn.bitmap, xsn.bitmap, xpos1, xsn.max_height,
xsize, xsn.max_height, xpos1, 0);
- SDLSetAlpha(surface_masked, TRUE, XSN_ALPHA_DEFAULT);
+ SDLSetAlpha(surface_masked, TRUE, xsn.alpha);
for (i = xpos1; i < xpos2; i++)
xsn.height[i] = MIN(xsn.height[i] + shrink, xsn.area_ysize - 1);
@@ -1015,6 +1018,8 @@
xsn.change_type = 0;
xsn.change_dir = 0;
+ xsn.alpha = XSN_ALPHA_DEFAULT;
+
for (i = 0; i < xsn.max_items; i++)
xsn_init_item(i);
}
@@ -1045,8 +1050,8 @@
SDL_SetColorKey(surface_masked, SET_TRANSPARENT_PIXEL,
SDL_MapRGB(surface_masked->format, 0x00, 0x00, 0x00));
- SDLSetAlpha(surface, TRUE, XSN_ALPHA_DEFAULT);
- SDLSetAlpha(surface_masked, TRUE, XSN_ALPHA_DEFAULT);
+ SDLSetAlpha(surface, TRUE, xsn.alpha);
+ SDLSetAlpha(surface_masked, TRUE, xsn.alpha);
SDLCreateBitmapTextures(xsn.bitmap);
@@ -1103,6 +1108,20 @@
change_delay_value = xsn.change_delay * 1000;
}
+ int xsn_alpha_dx = (gfx.mouse_y > xsn.area_ysize - xsn.max_height ?
+ (xsn.alpha > XSN_ALPHA_VISIBLE ? -1 : 0) :
+ (xsn.alpha < XSN_ALPHA_DEFAULT ? +1 : 0));
+
+ if (xsn_alpha_dx != 0)
+ {
+ xsn.alpha += xsn_alpha_dx;
+
+ SDLSetAlpha(xsn.bitmap->surface_masked, TRUE, xsn.alpha);
+
+ SDLFreeBitmapTextures(xsn.bitmap);
+ SDLCreateBitmapTextures(xsn.bitmap);
+ }
+
BlitToScreenMasked(xsn.bitmap, 0, 0, xsn.area_xsize, xsn.max_height,
0, xsn.area_ysize - xsn.max_height);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/libgame/system.h new/rocksndiamonds-4.2.2.1/src/libgame/system.h
--- old/rocksndiamonds-4.2.2.0/src/libgame/system.h 2020-12-23 13:04:38.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/libgame/system.h 2021-01-15 17:16:52.000000000 +0100
@@ -1284,6 +1284,8 @@
boolean show_element_token;
+ boolean show_read_only_warning;
+
boolean use_template_for_new_levels;
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/main.h new/rocksndiamonds-4.2.2.1/src/main.h
--- old/rocksndiamonds-4.2.2.0/src/main.h 2020-12-23 13:04:38.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/main.h 2021-01-15 17:16:52.000000000 +0100
@@ -2571,7 +2571,7 @@
#define PROGRAM_VERSION_SUPER 4
#define PROGRAM_VERSION_MAJOR 2
#define PROGRAM_VERSION_MINOR 2
-#define PROGRAM_VERSION_PATCH 0
+#define PROGRAM_VERSION_PATCH 1
#define PROGRAM_VERSION_EXTRA ""
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
@@ -3186,6 +3186,7 @@
boolean sb_objects_needed; // all Sokoban objects must be solved
boolean auto_exit_sokoban; // automatically finish solved Sokoban levels
boolean solved_by_one_player; // level is solved if one player enters exit
+ boolean finish_dig_collect; // only finished dig/collect triggers ce action
boolean continuous_snapping; // repeated snapping without releasing key
boolean block_snap_field; // snapping blocks field to show animation
@@ -3203,6 +3204,8 @@
// ('int' instead of 'boolean' because used as selectbox value in editor)
int use_step_counter; // count steps instead of seconds for level
+ int time_score_base; // use time score for 1 or 10 seconds/steps
+
short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
boolean use_custom_template; // use custom properties from template file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/screens.c new/rocksndiamonds-4.2.2.1/src/screens.c
--- old/rocksndiamonds-4.2.2.0/src/screens.c 2020-12-23 13:04:39.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/screens.c 2021-01-15 17:16:52.000000000 +0100
@@ -2168,10 +2168,10 @@
else if (pos == MAIN_CONTROL_EDITOR)
{
if (leveldir_current->readonly &&
- !strEqual(setup.player_name, "Artsoft"))
- Request("This level is read only!", REQ_CONFIRM);
+ setup.editor.show_read_only_warning)
+ Request("This level is read-only!", REQ_CONFIRM | REQ_STAY_OPEN);
- CloseDoor(DOOR_CLOSE_2);
+ CloseDoor(DOOR_CLOSE_ALL);
SetGameStatus(GAME_MODE_EDITOR);
@@ -4258,15 +4258,13 @@
name[xpos] = 0;
}
- else if (key == KSYM_Return)
+ else if (key == KSYM_Return || key == KSYM_Escape)
{
- setTypeNameValues(name, pos, TRUE);
+ boolean changed = (key == KSYM_Return);
- active = FALSE;
- }
- else if (key == KSYM_Escape)
- {
- setTypeNameValues(name, pos, FALSE);
+ StopTextInput();
+
+ setTypeNameValues(name, pos, changed);
active = FALSE;
}
@@ -4275,8 +4273,6 @@
if (!active)
{
- StopTextInput();
-
SetGameStatus(game_status_last_screen);
if (game_status == GAME_MODE_MAIN)
@@ -5084,9 +5080,15 @@
if (button == MB_MENU_INITIALIZE)
{
level_nr = mx;
- first_entry = 0;
highlight_position = my;
+ first_entry = highlight_position - (NUM_MENU_ENTRIES_ON_SCREEN + 1) / 2 + 1;
+
+ if (first_entry < 0)
+ first_entry = 0;
+ else if (first_entry + NUM_MENU_ENTRIES_ON_SCREEN > MAX_SCORE_ENTRIES)
+ first_entry = MAX(0, MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN);
+
drawHallOfFameList(level_nr, first_entry, highlight_position);
return;
@@ -6733,6 +6735,8 @@
#endif
{ TYPE_SWITCH, &setup.editor.show_element_token, "Show element token:" },
{ TYPE_EMPTY, NULL, "" },
+ { TYPE_SWITCH, &setup.editor.show_read_only_warning, "Show read-only warning:" },
+ { TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Back" },
{ 0, NULL, NULL }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/tape.c new/rocksndiamonds-4.2.2.1/src/tape.c
--- old/rocksndiamonds-4.2.2.0/src/tape.c 2020-12-14 02:15:48.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/tape.c 2021-01-15 17:16:52.000000000 +0100
@@ -459,6 +459,8 @@
if (redraw_display)
{
RedrawPlayfield();
+
+ UpdateGameDoorValues();
DrawGameDoorValues();
}
}
@@ -1237,6 +1239,7 @@
{
"original tape",
"em_random_bug",
+ "screen_34x34",
NULL
};
@@ -1244,6 +1247,7 @@
{
VERSION_IDENT(0,0,0,0),
VERSION_IDENT(3,3,1,0),
+ VERSION_IDENT(0,0,0,0),
-1
};
@@ -1251,6 +1255,7 @@
{
VERSION_IDENT(9,9,9,9),
VERSION_IDENT(4,0,1,1),
+ VERSION_IDENT(4,2,2,0),
-1
};
@@ -1258,6 +1263,7 @@
{
TAPE_PROPERTY_NONE,
TAPE_PROPERTY_EM_RANDOM_BUG,
+ TAPE_PROPERTY_NONE,
-1
};
@@ -1408,6 +1414,8 @@
if (global.autoplay_mode == AUTOPLAY_MODE_FIX)
{
+ boolean skip_patch = FALSE;
+
if (tape.engine_version < patch_version_first[patch_nr] ||
tape.engine_version > patch_version_last[patch_nr])
{
@@ -1420,6 +1428,22 @@
(tape.engine_version / 100 ) % 100,
(tape.engine_version ) % 100);
+ skip_patch = TRUE;
+ }
+
+ if (strEqual(patch_name[patch_nr], "screen_34x34") &&
+ tape.num_participating_players == 1)
+ {
+ Print("Tape %03d %s[%02d:%02d]: (%s) - skipped.\n",
+ level_nr, tape_patch_info,
+ tape.length_seconds / 60, tape.length_seconds % 60,
+ "not suitable for single player tapes");
+
+ skip_patch = TRUE;
+ }
+
+ if (skip_patch)
+ {
if (patch_name[patch_nr + 1] != NULL)
{
// continue with next patch
@@ -1434,7 +1458,15 @@
continue;
}
- tape.property_bits |= patch_property_bit[patch_nr];
+ if (strEqual(patch_name[patch_nr], "screen_34x34"))
+ {
+ tape.scr_fieldx = SCR_FIELDX_DEFAULT * 2;
+ tape.scr_fieldy = SCR_FIELDY_DEFAULT * 2;
+ }
+ else
+ {
+ tape.property_bits |= patch_property_bit[patch_nr];
+ }
}
InitCounter();
@@ -1493,14 +1525,14 @@
return FALSE;
}
- byte property_bits = tape->property_bits;
+ boolean unpatch_tape = FALSE;
+ boolean use_property_bit = FALSE;
byte property_bitmask = 0;
- boolean set_property_bit = TRUE;
if (strSuffix(mode, ":0") ||
strSuffix(mode, ":off") ||
strSuffix(mode, ":clear"))
- set_property_bit = FALSE;
+ unpatch_tape = TRUE;
if (strEqual(mode, "em_random_bug") || strPrefix(mode, "em_random_bug:"))
{
@@ -1514,6 +1546,41 @@
}
property_bitmask = TAPE_PROPERTY_EM_RANDOM_BUG;
+
+ use_property_bit = TRUE;
+ }
+ else if (strEqual(mode, "screen_34x34") || strPrefix(mode, "screen_34x34:"))
+ {
+ // this bug only affects team mode tapes
+ if (tape->num_participating_players == 1)
+ {
+ Print("Only team mode tapes can be patched against screen size bug!\n");
+
+ return FALSE;
+ }
+
+ // this bug (that always existed before) was fixed in version 4.2.2.1
+ if (tape->engine_version >= VERSION_IDENT(4,2,2,1))
+ {
+ Print("This tape version cannot be patched against screen size bug!\n");
+
+ return FALSE;
+ }
+
+ int factor = (unpatch_tape ? 1 : 2);
+ int scr_fieldx_new = SCR_FIELDX_DEFAULT * factor;
+ int scr_fieldy_new = SCR_FIELDY_DEFAULT * factor;
+
+ if (scr_fieldx_new == tape->scr_fieldx &&
+ scr_fieldy_new == tape->scr_fieldy)
+ {
+ Print("Tape already patched for '%s'!\n", mode);
+
+ return FALSE;
+ }
+
+ tape->scr_fieldx = scr_fieldx_new;
+ tape->scr_fieldy = scr_fieldy_new;
}
else
{
@@ -1522,22 +1589,29 @@
return FALSE;
}
- if (set_property_bit)
- property_bits |= property_bitmask;
- else
- property_bits &= ~property_bitmask;
-
- if (property_bits == tape->property_bits)
+ // patching tapes using property bits may be used for several patch modes
+ if (use_property_bit)
{
- Print("Tape already patched for '%s'!\n", mode);
+ byte property_bits = tape->property_bits;
+ boolean set_property_bit = (unpatch_tape ? FALSE : TRUE);
- return FALSE;
+ if (set_property_bit)
+ property_bits |= property_bitmask;
+ else
+ property_bits &= ~property_bitmask;
+
+ if (property_bits == tape->property_bits)
+ {
+ Print("Tape already patched for '%s'!\n", mode);
+
+ return FALSE;
+ }
+
+ tape->property_bits = property_bits;
}
Print("Patching for '%s' ... ", mode);
- tape->property_bits = property_bits;
-
return TRUE;
}
@@ -1554,6 +1628,7 @@
PrintLine("=", 79);
Print("Supported patch modes:\n");
Print("- \"em_random_bug\" - use 64-bit random value bug for EM engine\n");
+ Print("- \"screen_34x34\" - force visible playfield size of 34 x 34\n");
PrintLine("-", 79);
Print("Supported modifiers:\n");
Print("- add \":0\", \":off\" or \":clear\" to patch mode to un-patch tape file\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/tape.h new/rocksndiamonds-4.2.2.1/src/tape.h
--- old/rocksndiamonds-4.2.2.0/src/tape.h 2020-11-11 21:13:14.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/tape.h 2021-01-15 17:16:52.000000000 +0100
@@ -211,6 +211,10 @@
// bits to indicate which tape properties are stored in this tape
byte property_bits;
+ // visible playfield size when recording this tape (for team mode)
+ int scr_fieldx;
+ int scr_fieldy;
+
struct
{
byte action[MAX_TAPE_ACTIONS];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/tools.c new/rocksndiamonds-4.2.2.1/src/tools.c
--- old/rocksndiamonds-4.2.2.0/src/tools.c 2020-12-23 13:04:39.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/tools.c 2021-01-15 17:16:52.000000000 +0100
@@ -391,6 +391,16 @@
return getLevelFromScreenY_RND(y);
}
+int getScreenFieldSizeX(void)
+{
+ return (tape.playing ? tape.scr_fieldx : SCR_FIELDX);
+}
+
+int getScreenFieldSizeY(void)
+{
+ return (tape.playing ? tape.scr_fieldy : SCR_FIELDY);
+}
+
void DumpTile(int x, int y)
{
int sx = SCREENX(x);
@@ -4264,7 +4274,7 @@
#define MAX_REQUEST_LINE_FONT1_LEN 7
#define MAX_REQUEST_LINE_FONT2_LEN 10
-static int RequestHandleEvents(unsigned int req_state)
+static int RequestHandleEvents(unsigned int req_state, int draw_buffer_game)
{
boolean game_just_ended = (game_status == GAME_MODE_PLAYING &&
checkGameEnded());
@@ -4293,7 +4303,7 @@
if (game_just_ended)
{
- SetDrawtoField(draw_buffer_last);
+ SetDrawtoField(draw_buffer_game);
HandleGameActions();
@@ -4594,6 +4604,7 @@
static boolean RequestDoor(char *text, unsigned int req_state)
{
+ int draw_buffer_last = GetDrawtoField();
unsigned int old_door_state;
int max_request_line_len = MAX_REQUEST_LINE_FONT1_LEN;
int font_nr = FONT_TEXT_2;
@@ -4735,7 +4746,7 @@
SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
// ---------- handle request buttons ----------
- result = RequestHandleEvents(req_state);
+ result = RequestHandleEvents(req_state, draw_buffer_last);
UnmapToolButtons();
@@ -4776,6 +4787,7 @@
static boolean RequestEnvelope(char *text, unsigned int req_state)
{
+ int draw_buffer_last = GetDrawtoField();
int result;
if (game_status == GAME_MODE_PLAYING)
@@ -4827,7 +4839,7 @@
SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
// ---------- handle request buttons ----------
- result = RequestHandleEvents(req_state);
+ result = RequestHandleEvents(req_state, draw_buffer_last);
UnmapToolButtons();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rocksndiamonds-4.2.2.0/src/tools.h new/rocksndiamonds-4.2.2.1/src/tools.h
--- old/rocksndiamonds-4.2.2.0/src/tools.h 2020-12-23 13:04:39.000000000 +0100
+++ new/rocksndiamonds-4.2.2.1/src/tools.h 2021-01-15 17:16:52.000000000 +0100
@@ -72,6 +72,9 @@
int getLevelFromScreenX(int);
int getLevelFromScreenY(int);
+int getScreenFieldSizeX(void);
+int getScreenFieldSizeY(void);
+
void DumpTile(int, int);
void DumpTileFromScreen(int, int);
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-PPIx-Regexp for openSUSE:Factory checked in at 2021-02-02 14:25:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-PPIx-Regexp (Old)
and /work/SRC/openSUSE:Factory/.perl-PPIx-Regexp.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-PPIx-Regexp"
Tue Feb 2 14:25:18 2021 rev:60 rq:868417 version:0.078
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-PPIx-Regexp/perl-PPIx-Regexp.changes 2021-01-20 18:29:12.295615654 +0100
+++ /work/SRC/openSUSE:Factory/.perl-PPIx-Regexp.new.28504/perl-PPIx-Regexp.changes 2021-02-02 14:25:25.379368608 +0100
@@ -1,0 +2,14 @@
+Fri Jan 29 03:09:05 UTC 2021 - Tina M��ller <timueller+perl(a)suse.de>
+
+- updated to 0.078
+ see /usr/share/doc/packages/perl-PPIx-Regexp/Changes
+
+ 0.078 2021-01-28 T. R. Wyant
+ Allow CPAN to index Script_Run, Atomic_Script_Run, since they made
+ it into a production release.
+
+ Allow {,3} and { 0 , 3 } as quantifiers, requiring at least Perl
+ 5.33.6. Previously these parsed as literals. This parse will be
+ retracted if it does not make it into 5.34.0.
+
+-------------------------------------------------------------------
Old:
----
PPIx-Regexp-0.077.tar.gz
New:
----
PPIx-Regexp-0.078.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-PPIx-Regexp.spec ++++++
--- /var/tmp/diff_new_pack.ICnTTq/_old 2021-02-02 14:25:26.043369641 +0100
+++ /var/tmp/diff_new_pack.ICnTTq/_new 2021-02-02 14:25:26.047369647 +0100
@@ -18,7 +18,7 @@
%define cpan_name PPIx-Regexp
Name: perl-PPIx-Regexp
-Version: 0.077
+Version: 0.078
Release: 0
Summary: Represent a regular expression of some sort
License: Artistic-1.0 OR GPL-1.0-or-later
@@ -30,9 +30,11 @@
BuildRequires: perl-macros
BuildRequires: perl(Module::Build) >= 0.420000
BuildRequires: perl(PPI::Document) >= 1.117
+BuildRequires: perl(PPI::Dumper) >= 1.117
BuildRequires: perl(Task::Weaken)
BuildRequires: perl(Test::More) >= 0.88
Requires: perl(PPI::Document) >= 1.117
+Requires: perl(PPI::Dumper) >= 1.117
Requires: perl(Task::Weaken)
%{perl_requires}
++++++ PPIx-Regexp-0.077.tar.gz -> PPIx-Regexp-0.078.tar.gz ++++++
++++ 1796 lines of diff (skipped)
1
0