openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
August 2017
- 1 participants
- 2097 discussions
Hello community,
here is the log from the commit of package python-croniter for openSUSE:Factory checked in at 2017-08-28 15:15:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-croniter (Old)
and /work/SRC/openSUSE:Factory/.python-croniter.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-croniter"
Mon Aug 28 15:15:57 2017 rev:6 rq:518656 version:0.3.17
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-croniter/python-croniter.changes 2016-12-08 00:29:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-croniter.new/python-croniter.changes 2017-08-28 15:17:19.223417956 +0200
@@ -1,0 +2,19 @@
+Fri Aug 25 07:05:44 UTC 2017 - tbechtold(a)suse.com
+
+- update to 0.3.17:
+ - DOW occurence sharp style support.
+ - Better test suite
+ - DST support
+ - fix bug around multiple conditions and range_val in
+ _get_prev_nearest_diff.
+ - issue #69: added day_or option to change behavior when day-of-month and
+ day-of-week is given
+ - `Real fix for #34
+ - `Modernize test infra
+ - `Release as a universal wheel
+ - `Raise ValueError on negative numbers
+ - `Compare types using "issubclass" instead of exact match
+ - `Implement step cron with a variable base
+- convert to singlespec
+
+-------------------------------------------------------------------
Old:
----
croniter-0.3.12.tar.gz
New:
----
croniter-0.3.17.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-croniter.spec ++++++
--- /var/tmp/diff_new_pack.BVEWaj/_old 2017-08-28 15:17:22.171003769 +0200
+++ /var/tmp/diff_new_pack.BVEWaj/_new 2017-08-28 15:17:22.171003769 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-croniter
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,28 +16,28 @@
#
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-croniter
-Version: 0.3.12
+Version: 0.3.17
Release: 0
Summary: Croniter provides iteration for datetime object with cron like format
License: MIT
Group: Development/Languages/Python
Url: http://github.com/kiorky/croniter
-Source: https://pypi.io/packages/source/c/croniter/croniter-%{version}.tar.gz
-BuildRequires: python-devel
-BuildRequires: python-setuptools
+Source: https://files.pythonhosted.org/packages/source/c/croniter/croniter-%{versio…
+BuildRequires: %{python_module devel}
+BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
+BuildRequires: python-rpm-macros
BuildRequires: unzip
# Test requirements:
-BuildRequires: python-nose
-BuildRequires: python-python-dateutil
-BuildRequires: python-pytz
+BuildRequires: %{python_module nose}
+BuildRequires: %{python_module python-dateutil}
+BuildRequires: %{python_module pytz}
Requires: python-python-dateutil
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
BuildArch: noarch
-%endif
+
+%python_subpackages
%description
croniter provides iteration for datetime object with cron like format.
@@ -46,15 +46,16 @@
%setup -q -n croniter-%{version}
%build
-python setup.py build
+%python_build
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-nosetests
+%python_exec %{_bindir}/nosetests
-%files
+%files %{python_files}
%defattr(-,root,root,-)
%doc README.rst docs/LICENSE
%{python_sitelib}/*
++++++ croniter-0.3.12.tar.gz -> croniter-0.3.17.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/MANIFEST.in new/croniter-0.3.17/MANIFEST.in
--- old/croniter-0.3.12/MANIFEST.in 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/MANIFEST.in 2017-05-22 12:11:46.000000000 +0200
@@ -1,6 +1,7 @@
-include *.txt *.cfg *.rst
+include *.txt *.cfg *.rst *.ini
recursive-include docs *
+recursive-include requirements *
recursive-include src *
global-exclude *pyc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/PKG-INFO new/croniter-0.3.17/PKG-INFO
--- old/croniter-0.3.12/PKG-INFO 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/PKG-INFO 2017-05-22 12:11:46.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: croniter
-Version: 0.3.12
+Version: 0.3.17
Summary: croniter provides iteration for datetime object with cron like format
Home-page: http://github.com/kiorky/croniter
Author: Matsumoto Taichi, kiorky
@@ -12,7 +12,7 @@
.. contents::
- croniter provides iteration for datetime object with cron like format.
+ croniter provides iteration for the datetime object with a cron like format.
::
@@ -33,12 +33,12 @@
Usage
============
- Simple example of usage is followings::
+ A simple example::
>>> from croniter import croniter
>>> from datetime import datetime
>>> base = datetime(2010, 1, 25, 4, 46)
- >>> iter = croniter('*/5 * * * *', base) # every 5 minites
+ >>> iter = croniter('*/5 * * * *', base) # every 5 minutes
>>> print iter.get_next(datetime) # 2010-01-25 04:50:00
>>> print iter.get_next(datetime) # 2010-01-25 04:55:00
>>> print iter.get_next(datetime) # 2010-01-25 05:00:00
@@ -47,21 +47,42 @@
>>> print iter.get_next(datetime) # 2010-01-26 04:02:00
>>> print iter.get_next(datetime) # 2010-01-30 04:02:00
>>> print iter.get_next(datetime) # 2010-02-02 04:02:00
-
- All you need to know is constructor and get_next, these signature are following::
-
- >>> def __init__(self, cron_format, start_time=time.time())
-
- croniter iterate along with 'cron_format' from 'start_time'.
- cron_format is 'min hour day month day_of_week', and please refer to
- http://en.wikipedia.org/wiki/Cron for details.::
+ >>>
+ >>> iter = croniter('2 4 1 * wed', base) # 04:02 on every Wednesday OR on 1st day of month
+ >>> print iter.get_next(datetime) # 2010-01-27 04:02:00
+ >>> print iter.get_next(datetime) # 2010-02-01 04:02:00
+ >>> print iter.get_next(datetime) # 2010-02-03 04:02:00
+ >>>
+ >>> iter = croniter('2 4 1 * wed', base, day_or=False) # 04:02 on every 1st day of the month if it is a Wednesday
+ >>> print iter.get_next(datetime) # 2010-09-01 04:02:00
+ >>> print iter.get_next(datetime) # 2010-12-01 04:02:00
+ >>> print iter.get_next(datetime) # 2011-06-01 04:02:00
+ >>> iter = croniter('0 0 * * sat#1,sun#2', base)
+ >>> print iter.get_next(datetime) # datetime.datetime(2010, 2, 6, 0, 0)
+
+ All you need to know is how to use the constructor and the ``get_next``
+ method, the signature of these methods are listed below::
+
+ >>> def __init__(self, cron_format, start_time=time.time(), day_or=True)
+
+ croniter iterates along with ``cron_format`` from ``start_time``.
+ ``cron_format`` is **min hour day month day_of_week**, you can refer to
+ http://en.wikipedia.org/wiki/Cron for more details. The ``day_or``
+ switch is used to control how croniter handles **day** and **day_of_week**
+ entries. Default option is the cron behaviour, which connects those
+ values using **OR**. If the switch is set to False, the values are connected
+ using **AND**. This behaves like fcron and enables you to e.g. define a job that
+ executes each 2nd friday of a month by setting the days of month and the
+ weekday.
+ ::
>>> def get_next(self, ret_type=float)
- get_next return next time in iteration with 'ret_type'.
- And ret_type accept only 'float' or 'datetime'.
+ get_next calculates the next value according to the cron expression and
+ returns an object of type ``ret_type``. ``ret_type`` should be a ``float`` or a
+ ``datetime`` object.
- Now, supported get_prev method. (>= 0.2.0)::
+ Supported added for ``get_prev`` method. (>= 0.2.0)::
>>> base = datetime(2010, 8, 25)
>>> itr = croniter('0 0 1 * *', base)
@@ -69,6 +90,12 @@
>>> print itr.get_prev(datetime) # 2010-07-01 00:00:00
>>> print itr.get_prev(datetime) # 2010-06-01 00:00:00
+ About DST
+ =========
+ Be sure to init your croniter instance with a TZ aware datetime for this to work !::
+
+ >>> local_date = tz.localize(datetime(2017, 3, 26))
+ >>> val = croniter('0 0 * * *', local_date).get_next(datetime)
Develop this package
====================
@@ -77,25 +104,28 @@
git clone https://github.com/kiorky/croniter.git
cd croniter
- python bootstrap.py -d
- bin/buildout -vvvvvvN
- bin/test
+ virtualenv --no-site-packages venv
+ . venv/bin/activate
+ pip install --upgrade -r requirements/test.txt
+ py.test src
Make a new release
====================
- We use zest.fullreleaser, a great releaser infrastructure.
+ We use zest.fullreleaser, a great release infrastructure.
- Do and follow the instructions
+ Do and follow these instructions
::
- bin/fullrelease
+ . venv/bin/activate
+ pip install --upgrade -r requirements/release.txt
+ fullrelease
Contributors
===============
- Thank you to all who have contributed to this project!
- If you contributed and not listed below please let me know.
+ Thanks to all who have contributed to this project!
+ If you have contributed and your name is not listed below please let me know.
- mrmachine
- Hinnack
@@ -114,6 +144,50 @@
Changelog
==============
+ 0.3.17 (2017-05-22)
+ -------------------
+ - DOW occurence sharp style support.
+ [kiorky, Kengo Seki <sekikn(a)apache.org>]
+
+
+ 0.3.16 (2017-03-15)
+ -------------------
+
+ - Better test suite [mrcrilly@github]
+ - DST support [kiorky]
+
+ 0.3.15 (2017-02-16)
+ -------------------
+
+ - fix bug around multiple conditions and range_val in
+ _get_prev_nearest_diff.
+ [abeja-yuki@github]
+
+ 0.3.14 (2017-01-25)
+ -------------------
+
+ - issue #69: added day_or option to change behavior when day-of-month and
+ day-of-week is given
+ [Andreas Vogl <a.vogl(a)hackner-security.com>]
+
+
+
+ 0.3.13 (2016-11-01)
+ -------------------
+
+ - `Real fix for #34 <https://github.com/taichino/croniter/pull/73>`_
+ [kiorky@github]
+ - `Modernize test infra <https://github.com/taichino/croniter/pull/72>`_
+ [kiorky@github]
+ - `Release as a universal wheel <https://github.com/kiorky/croniter/pull/16>`_
+ [adamchainz@github]
+ - `Raise ValueError on negative numbers <https://github.com/taichino/croniter/pull/63>`_
+ [josegonzalez@github]
+ - `Compare types using "issubclass" instead of exact match <https://github.com/taichino/croniter/pull/70>`_
+ [darkk@github]
+ - `Implement step cron with a variable base <https://github.com/taichino/croniter/pull/60>`_
+ [josegonzalez@github]
+
0.3.12 (2016-03-10)
-------------------
- support setting ret_type in __init__ [Brent Tubbs <brent.tubbs(a)gmail.com>]
@@ -185,4 +259,6 @@
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/README.rst new/croniter-0.3.17/README.rst
--- old/croniter-0.3.12/README.rst 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/README.rst 2017-05-22 12:11:46.000000000 +0200
@@ -4,7 +4,7 @@
.. contents::
-croniter provides iteration for datetime object with cron like format.
+croniter provides iteration for the datetime object with a cron like format.
::
@@ -25,12 +25,12 @@
Usage
============
-Simple example of usage is followings::
+A simple example::
>>> from croniter import croniter
>>> from datetime import datetime
>>> base = datetime(2010, 1, 25, 4, 46)
- >>> iter = croniter('*/5 * * * *', base) # every 5 minites
+ >>> iter = croniter('*/5 * * * *', base) # every 5 minutes
>>> print iter.get_next(datetime) # 2010-01-25 04:50:00
>>> print iter.get_next(datetime) # 2010-01-25 04:55:00
>>> print iter.get_next(datetime) # 2010-01-25 05:00:00
@@ -39,21 +39,42 @@
>>> print iter.get_next(datetime) # 2010-01-26 04:02:00
>>> print iter.get_next(datetime) # 2010-01-30 04:02:00
>>> print iter.get_next(datetime) # 2010-02-02 04:02:00
-
-All you need to know is constructor and get_next, these signature are following::
-
- >>> def __init__(self, cron_format, start_time=time.time())
-
-croniter iterate along with 'cron_format' from 'start_time'.
-cron_format is 'min hour day month day_of_week', and please refer to
-http://en.wikipedia.org/wiki/Cron for details.::
+ >>>
+ >>> iter = croniter('2 4 1 * wed', base) # 04:02 on every Wednesday OR on 1st day of month
+ >>> print iter.get_next(datetime) # 2010-01-27 04:02:00
+ >>> print iter.get_next(datetime) # 2010-02-01 04:02:00
+ >>> print iter.get_next(datetime) # 2010-02-03 04:02:00
+ >>>
+ >>> iter = croniter('2 4 1 * wed', base, day_or=False) # 04:02 on every 1st day of the month if it is a Wednesday
+ >>> print iter.get_next(datetime) # 2010-09-01 04:02:00
+ >>> print iter.get_next(datetime) # 2010-12-01 04:02:00
+ >>> print iter.get_next(datetime) # 2011-06-01 04:02:00
+ >>> iter = croniter('0 0 * * sat#1,sun#2', base)
+ >>> print iter.get_next(datetime) # datetime.datetime(2010, 2, 6, 0, 0)
+
+All you need to know is how to use the constructor and the ``get_next``
+method, the signature of these methods are listed below::
+
+ >>> def __init__(self, cron_format, start_time=time.time(), day_or=True)
+
+croniter iterates along with ``cron_format`` from ``start_time``.
+``cron_format`` is **min hour day month day_of_week**, you can refer to
+http://en.wikipedia.org/wiki/Cron for more details. The ``day_or``
+switch is used to control how croniter handles **day** and **day_of_week**
+entries. Default option is the cron behaviour, which connects those
+values using **OR**. If the switch is set to False, the values are connected
+using **AND**. This behaves like fcron and enables you to e.g. define a job that
+executes each 2nd friday of a month by setting the days of month and the
+weekday.
+::
>>> def get_next(self, ret_type=float)
-get_next return next time in iteration with 'ret_type'.
-And ret_type accept only 'float' or 'datetime'.
+get_next calculates the next value according to the cron expression and
+returns an object of type ``ret_type``. ``ret_type`` should be a ``float`` or a
+``datetime`` object.
-Now, supported get_prev method. (>= 0.2.0)::
+Supported added for ``get_prev`` method. (>= 0.2.0)::
>>> base = datetime(2010, 8, 25)
>>> itr = croniter('0 0 1 * *', base)
@@ -61,6 +82,12 @@
>>> print itr.get_prev(datetime) # 2010-07-01 00:00:00
>>> print itr.get_prev(datetime) # 2010-06-01 00:00:00
+About DST
+=========
+Be sure to init your croniter instance with a TZ aware datetime for this to work !::
+
+ >>> local_date = tz.localize(datetime(2017, 3, 26))
+ >>> val = croniter('0 0 * * *', local_date).get_next(datetime)
Develop this package
====================
@@ -69,25 +96,28 @@
git clone https://github.com/kiorky/croniter.git
cd croniter
- python bootstrap.py -d
- bin/buildout -vvvvvvN
- bin/test
+ virtualenv --no-site-packages venv
+ . venv/bin/activate
+ pip install --upgrade -r requirements/test.txt
+ py.test src
Make a new release
====================
-We use zest.fullreleaser, a great releaser infrastructure.
+We use zest.fullreleaser, a great release infrastructure.
-Do and follow the instructions
+Do and follow these instructions
::
- bin/fullrelease
+ . venv/bin/activate
+ pip install --upgrade -r requirements/release.txt
+ fullrelease
Contributors
===============
-Thank you to all who have contributed to this project!
-If you contributed and not listed below please let me know.
+Thanks to all who have contributed to this project!
+If you have contributed and your name is not listed below please let me know.
- mrmachine
- Hinnack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/buildout.cfg new/croniter-0.3.17/buildout.cfg
--- old/croniter-0.3.12/buildout.cfg 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/buildout.cfg 1970-01-01 01:00:00.000000000 +0100
@@ -1,118 +0,0 @@
-[buildout]
-package-name = croniter
-develop = .
-versions=versions
-parts =
- scripts
- omelette
- coverage
- report
- test
- report-xml
- code-analysis
-extensions =
- mr.developer
-auto-checkout =
-test-eggs= ${buildout:package-name} [test]
-eggs = ${buildout:package-name}
-
-[sources]
-
-[code-analysis]
-recipe = plone.recipe.codeanalysis
-directory = ${buildout:directory}/src
-flake8-ignore=C901
-
-[scripts]
-recipe=zc.recipe.egg
-eggs = ${buildout:eggs}
- zest.releaser
- ipython
- tox
- nose
-interpreter = scripts
-
-[test]
-recipe=zc.recipe.egg
-eggs = ${scripts:eggs}
- croniter[test]
-arguments= ['croniter']
-scripts=test
-entry-points=
- test=nose:run_exit
-
-[coverage]
-recipe = zc.recipe.egg
-eggs = coverage
-initialization =
-include = '--source=${buildout:directory}/src'
-sys.argv = sys.argv[:] + ['run', include, 'bin/test', '--xml']
-
-[report]
-recipe = zc.recipe.egg
-eggs = coverage
-scripts = coverage=report
-initialization =
-sys.argv = sys.argv[:] + ['html', '-i']
-
-[report-xml]
-recipe = zc.recipe.egg
-eggs = coverage
-scripts = coverage=report-xml
-initialization =
-sys.argv = sys.argv[:] + ['xml', '-i']
-
-[omelette]
-recipe = collective.recipe.omelette
-eggs = ${scripts:eggs}
-
-[versions]
-pytz = 2013.9
-python-dateutil = 2.2
-
-# buildout & test infra
-zc.buildout = 2.2.1
-zc.recipe.egg = 2.0.1
-buildout-versions = 1.7
-collective.recipe.omelette = 0.16
-coverage = 3.7.1
-ipython = 1.1.0
-mr.developer = 1.28
-plone.testing = 4.0.9
-zc.recipe.testrunner = 2.0.0
-zest.releaser = 3.50
-six = 1.5.2
-unittest2 = 0.5.1
-zope.exceptions = 4.0.6
-zope.interface = 4.0.5
-zope.testing = 4.1.2
-zope.testrunner = 4.4.1
-zope.contentprovider = 4.0.0a1
-zope.event = 4.0.2
-zope.i18n = 4.0.0a4
-zope.pagetemplate = 4.0.4
-zope.proxy = 4.1.3
-zope.publisher = 4.0.0a4
-zope.schema = 4.4.0
-zope.security = 4.0.0
-zope.tales = 4.0.2
-zope.traversing = 4.0.0a3
-zptlint = 0.2.4
-mccabe = 0.2.1
-pep8 = 1.4.6
-plone.recipe.codeanalysis = 1.0b6
-pyflakes = 0.7.3
-zope.contenttype = 4.0.1
-zope.i18nmessageid = 4.0.2
-zope.location = 4.0.2
-zope.tal = 4.0.0
-Unidecode = 0.04.14
-flake8 = 2.1.0
-i18ndude = 3.3.3
-ordereddict = 1.1
-plone.i18n = 2.0.9
-transaction = 1.4.1
-zope.browser = 2.0.2
-zope.component = 4.1.0
-zope.configuration = 4.0.2
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/docs/CHANGES.rst new/croniter-0.3.17/docs/CHANGES.rst
--- old/croniter-0.3.12/docs/CHANGES.rst 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/docs/CHANGES.rst 2017-05-22 12:11:46.000000000 +0200
@@ -1,6 +1,50 @@
Changelog
==============
+0.3.17 (2017-05-22)
+-------------------
+- DOW occurence sharp style support.
+ [kiorky, Kengo Seki <sekikn(a)apache.org>]
+
+
+0.3.16 (2017-03-15)
+-------------------
+
+- Better test suite [mrcrilly@github]
+- DST support [kiorky]
+
+0.3.15 (2017-02-16)
+-------------------
+
+- fix bug around multiple conditions and range_val in
+ _get_prev_nearest_diff.
+ [abeja-yuki@github]
+
+0.3.14 (2017-01-25)
+-------------------
+
+- issue #69: added day_or option to change behavior when day-of-month and
+ day-of-week is given
+ [Andreas Vogl <a.vogl(a)hackner-security.com>]
+
+
+
+0.3.13 (2016-11-01)
+-------------------
+
+- `Real fix for #34 <https://github.com/taichino/croniter/pull/73>`_
+ [kiorky@github]
+- `Modernize test infra <https://github.com/taichino/croniter/pull/72>`_
+ [kiorky@github]
+- `Release as a universal wheel <https://github.com/kiorky/croniter/pull/16>`_
+ [adamchainz@github]
+- `Raise ValueError on negative numbers <https://github.com/taichino/croniter/pull/63>`_
+ [josegonzalez@github]
+- `Compare types using "issubclass" instead of exact match <https://github.com/taichino/croniter/pull/70>`_
+ [darkk@github]
+- `Implement step cron with a variable base <https://github.com/taichino/croniter/pull/60>`_
+ [josegonzalez@github]
+
0.3.12 (2016-03-10)
-------------------
- support setting ret_type in __init__ [Brent Tubbs <brent.tubbs(a)gmail.com>]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/py3.cfg new/croniter-0.3.17/py3.cfg
--- old/croniter-0.3.12/py3.cfg 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/py3.cfg 1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-[buildout]
-extends=buildout.cfg
-parts-=
- omelette
- code-analysis
-[scripts]
-eggs-=
- ipython
- zest.releaser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/requirements/base.txt new/croniter-0.3.17/requirements/base.txt
--- old/croniter-0.3.12/requirements/base.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/croniter-0.3.17/requirements/base.txt 2017-05-22 12:11:46.000000000 +0200
@@ -0,0 +1,2 @@
+python_dateutil
+-e .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/requirements/release.txt new/croniter-0.3.17/requirements/release.txt
--- old/croniter-0.3.12/requirements/release.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/croniter-0.3.17/requirements/release.txt 2017-05-22 12:11:46.000000000 +0200
@@ -0,0 +1,2 @@
+-r base.txt
+zest.releaser[recommended]>=6.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/requirements/test.txt new/croniter-0.3.17/requirements/test.txt
--- old/croniter-0.3.12/requirements/test.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/croniter-0.3.17/requirements/test.txt 2017-05-22 12:11:46.000000000 +0200
@@ -0,0 +1,8 @@
+-r base.txt
+pytz
+pytest>=3.0.3
+tox>=2.4.1
+coverage>=4.2
+mock>=2.0.0 # For Python 2
+coveralls
+flake8
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/setup.cfg new/croniter-0.3.17/setup.cfg
--- old/croniter-0.3.12/setup.cfg 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/setup.cfg 2017-05-22 12:11:46.000000000 +0200
@@ -1,3 +1,21 @@
+[bdist_wheel]
+universal = 1
+
+[coverage:run]
+source = .
+branch = True
+omit =
+ .tox/*
+ setup.py
+ **/**/tests*
+ **/**/test_*.py
+
+[coverage:report]
+exclude_lines =
+ pragma: no cover
+ raise AssertionError
+ raise NotImplementedError
+
[egg_info]
tag_build =
tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/setup.py new/croniter-0.3.17/setup.py
--- old/croniter-0.3.12/setup.py 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/setup.py 2017-05-22 12:11:46.000000000 +0200
@@ -8,6 +8,12 @@
os.path.join('.', *rnames)
).read()
+install_requires = [
+ a.strip()
+ for a in read('requirements/base.txt').splitlines()
+ if a.strip() and not a.startswith(('#', '-'))
+]
+
long_description = "\n\n".join(
[
read('README.rst'),
@@ -17,7 +23,7 @@
setup(
name='croniter',
- version='0.3.12',
+ version='0.3.17',
py_modules=['croniter', ],
description=(
'croniter provides iteration for datetime '
@@ -28,10 +34,7 @@
author_email='taichino(a)gmail.com, kiorky(a)cryptelium.net',
url='http://github.com/kiorky/croniter',
keywords='datetime, iterator, cron',
- install_requires=[
- "python-dateutil",
- "setuptools",
- ],
+ install_requires=install_requires,
license="MIT License",
classifiers=[
"Development Status :: 4 - Beta",
@@ -39,13 +42,10 @@
"License :: OSI Approved :: MIT License",
"Operating System :: POSIX",
"Programming Language :: Python",
+ "Programming Language :: Python :: 2",
+ "Programming Language :: Python :: 3",
"Topic :: Software Development :: Libraries :: Python Modules"],
packages=find_packages('src'),
package_dir={'': 'src'},
include_package_data=True,
- extras_require={
- 'test': [
- "pytz",
- ],
- },
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/src/croniter/__init__.py new/croniter-0.3.17/src/croniter/__init__.py
--- old/croniter-0.3.12/src/croniter/__init__.py 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/src/croniter/__init__.py 2017-05-22 12:11:46.000000000 +0200
@@ -1,4 +1,9 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
-from .croniter import croniter
+from .croniter import (
+ croniter,
+ CroniterBadDateError, # noqa
+ CroniterBadCronError, # noqa
+ CroniterNotAlphaError # noqa
+) # noqa
croniter.__name__ # make flake8 happy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/src/croniter/croniter.py new/croniter-0.3.17/src/croniter/croniter.py
--- old/croniter-0.3.12/src/croniter/croniter.py 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/src/croniter/croniter.py 2017-05-22 12:11:46.000000000 +0200
@@ -7,13 +7,25 @@
import datetime
from dateutil.relativedelta import relativedelta
from dateutil.tz import tzutc
+import calendar
+step_search_re = re.compile(r'^([^-]+)-([^-/]+)(/(.*))?$')
search_re = re.compile(r'^([^-]+)-([^-/]+)(/(.*))?$')
only_int_re = re.compile(r'^\d+$')
any_int_re = re.compile(r'^\d+')
star_or_int_re = re.compile(r'^(\d+|\*)$')
-__all__ = ('croniter',)
+
+class CroniterBadCronError(ValueError):
+ '''.'''
+
+
+class CroniterBadDateError(ValueError):
+ '''.'''
+
+
+class CroniterNotAlphaError(ValueError):
+ '''.'''
class croniter(object):
@@ -52,8 +64,11 @@
bad_length = 'Exactly 5 or 6 columns has to be specified for iterator' \
'expression.'
- def __init__(self, expr_format, start_time=None, ret_type=float):
+ def __init__(self, expr_format, start_time=None, ret_type=float,
+ day_or=True):
self._ret_type = ret_type
+ self._day_or = day_or
+
if start_time is None:
start_time = time()
@@ -62,13 +77,15 @@
self.tzinfo = start_time.tzinfo
start_time = self._datetime_to_timestamp(start_time)
+ self.start_time = start_time
self.cur = start_time
self.exprs = expr_format.split()
if len(self.exprs) != 5 and len(self.exprs) != 6:
- raise ValueError(self.bad_length)
+ raise CroniterBadCronError(self.bad_length)
expanded = []
+ nth_weekday_of_month = {}
for i, expr in enumerate(self.exprs):
e_list = expr.split(',')
@@ -76,42 +93,53 @@
while len(e_list) > 0:
e = e_list.pop()
- t = re.sub(r'^\*(/.+)$', r'%d-%d\1' % (
+
+ if i == 4:
+ e, sep, nth = str(e).partition('#')
+ if nth and not re.match(r'[1-5]', nth):
+ raise CroniterBadDateError(
+ "[{0}] is not acceptable".format(expr_format))
+
+ t = re.sub(r'^\*(\/.+)$', r'%d-%d\1' % (
self.RANGES[i][0],
self.RANGES[i][1]),
str(e))
m = search_re.search(t)
+ if not m:
+ t = re.sub(r'^(.+)\/(.+)$', r'\1-%d/\2' % (
+ self.RANGES[i][1]),
+ str(e))
+ m = step_search_re.search(t)
+
if m:
(low, high, step) = m.group(1), m.group(2), m.group(4) or 1
if not any_int_re.search(low):
- low = "{0}".format(self.ALPHACONV[i][low.lower()])
+ low = "{0}".format(self._alphaconv(i, low))
if not any_int_re.search(high):
- high = "{0}".format(self.ALPHACONV[i][high.lower()])
+ high = "{0}".format(self._alphaconv(i, high))
if (
not low or not high or int(low) > int(high)
or not only_int_re.search(str(step))
):
- raise ValueError(
+ raise CroniterBadDateError(
"[{0}] is not acceptable".format(expr_format))
low, high, step = map(int, [low, high, step])
- e_list += range(low, high + 1, step)
- # other solution
- #try:
- # for j in xrange(int(low), int(high) + 1):
- # if j % int(step) == 0:
- # e_list.append(j)
- #except NameError:
- # for j in range(int(low), int(high) + 1):
- # if j % int(step) == 0:
- # e_list.append(j)
+ rng = range(low, high + 1, step)
+ e_list += (["{0}#{1}".format(item, nth) for item in rng]
+ if i == 4 and nth else rng)
else:
+ if t.startswith('-'):
+ raise CroniterBadCronError(
+ "[{0}] is not acceptable,\
+ negative numbers not allowed".format(
+ expr_format))
if not star_or_int_re.search(t):
- t = self.ALPHACONV[i][t.lower()]
+ t = self._alphaconv(i, t)
try:
t = int(t)
@@ -126,17 +154,31 @@
and (int(t) < self.RANGES[i][0] or
int(t) > self.RANGES[i][1])
):
- raise ValueError(
+ raise CroniterBadCronError(
"[{0}] is not acceptable, out of range".format(
expr_format))
res.append(t)
+ if i == 4 and nth:
+ if t not in nth_weekday_of_month:
+ nth_weekday_of_month[t] = set()
+ nth_weekday_of_month[t].add(int(nth))
+
res.sort()
expanded.append(['*'] if (len(res) == 1
and res[0] == '*')
else res)
+
self.expanded = expanded
+ self.nth_weekday_of_month = nth_weekday_of_month
+
+ def _alphaconv(self, index, key):
+ try:
+ return self.ALPHACONV[index][key.lower()]
+ except KeyError:
+ raise CroniterNotAlphaError(
+ "[{0}] is not acceptable".format(" ".join(self.exprs)))
def get_next(self, ret_type=None):
return self._get_next(ret_type or self._ret_type, is_prev=False)
@@ -146,7 +188,7 @@
def get_current(self, ret_type=None):
ret_type = ret_type or self._ret_type
- if ret_type == datetime.datetime:
+ if issubclass(ret_type, datetime.datetime):
return self._timestamp_to_datetime(self.cur)
return self.cur
@@ -205,35 +247,57 @@
def _get_next(self, ret_type=None, is_prev=False):
expanded = self.expanded[:]
+ nth_weekday_of_month = self.nth_weekday_of_month.copy()
ret_type = ret_type or self._ret_type
- if ret_type not in (float, datetime.datetime):
+ if not issubclass(ret_type, (float, datetime.datetime)):
raise TypeError("Invalid ret_type, only 'float' or 'datetime' "
"is acceptable.")
- if expanded[2][0] != '*' and expanded[4][0] != '*':
+ # exception to support day of month and day of week as defined in cron
+ if (expanded[2][0] != '*' and expanded[4][0] != '*') and self._day_or:
bak = expanded[4]
expanded[4] = ['*']
- t1 = self._calc(self.cur, expanded, is_prev)
+ t1 = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev)
expanded[4] = bak
expanded[2] = ['*']
- t2 = self._calc(self.cur, expanded, is_prev)
+ t2 = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev)
if not is_prev:
result = t1 if t1 < t2 else t2
else:
result = t1 if t1 > t2 else t2
else:
- result = self._calc(self.cur, expanded, is_prev)
- self.cur = result
+ result = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev)
- if ret_type == datetime.datetime:
- result = self._timestamp_to_datetime(result)
+ # DST Handling for cron job spanning accross days
+ dtstarttime = self._timestamp_to_datetime(self.start_time)
+ dtresult = self._timestamp_to_datetime(result)
+ dtresult_utcoffset = dtresult.utcoffset() or datetime.timedelta(0)
+ dtstarttime_utcoffset = (
+ dtstarttime.utcoffset() or datetime.timedelta(0))
+ hours_before_midnight = 24 - dtstarttime.hour
+ lag_hours = (
+ self._timedelta_to_seconds(dtresult - dtstarttime) / (60*60)
+ )
+ if (
+ lag_hours >= hours_before_midnight and
+ (dtresult_utcoffset or dtstarttime_utcoffset) and
+ (dtresult_utcoffset != dtstarttime_utcoffset)
+ ):
+ lag = self._timedelta_to_seconds(
+ dtresult_utcoffset - dtstarttime_utcoffset
+ )
+ dtresult = dtresult - datetime.timedelta(seconds=lag)
+ result = self._datetime_to_timestamp(dtresult)
+ self.cur = result
+ if issubclass(ret_type, datetime.datetime):
+ result = dtresult
return result
- def _calc(self, now, expanded, is_prev):
+ def _calc(self, now, expanded, nth_weekday_of_month, is_prev):
if is_prev:
nearest_diff_method = self._get_prev_nearest_diff
sign = -1
@@ -244,7 +308,7 @@
offset = len(expanded) == 6 and 1 or 60
dst = now = self._timestamp_to_datetime(now + sign * offset)
- day, month, year = dst.day, dst.month, dst.year
+ month, year = dst.month, dst.year
current_year = now.year
DAYS = self.DAYS
@@ -275,7 +339,7 @@
days = DAYS[month - 1]
if month == 2 and self.is_leap(year) is True:
days += 1
- if 'l' in expanded[2] and days==d.day:
+ if 'l' in expanded[2] and days == d.day:
return False, d
if is_prev:
@@ -310,6 +374,55 @@
return True, d
return False, d
+ def proc_day_of_week_nth(d):
+ if '*' in nth_weekday_of_month:
+ s = nth_weekday_of_month['*']
+ for i in range(0, 7):
+ if i in nth_weekday_of_month:
+ nth_weekday_of_month[i].update(s)
+ else:
+ nth_weekday_of_month[i] = s
+ del nth_weekday_of_month['*']
+
+ candidates = []
+ for wday, nth in nth_weekday_of_month.items():
+ w = (wday + 6) % 7
+ c = calendar.Calendar(w).monthdayscalendar(d.year, d.month)
+ if c[0][0] == 0: c.pop(0)
+ for n in nth:
+ if len(c) < n:
+ continue
+ candidate = c[n - 1][0]
+ if (
+ (is_prev and candidate <= d.day) or
+ (not is_prev and d.day <= candidate)
+ ):
+ candidates.append(candidate)
+
+ if not candidates:
+ if is_prev:
+ d += relativedelta(days=-d.day,
+ hour=23, minute=59, second=59)
+ else:
+ days = DAYS[month - 1]
+ if month == 2 and self.is_leap(year) is True:
+ days += 1
+ d += relativedelta(days=(days - d.day + 1),
+ hour=0, minute=0, second=0)
+ return True, d
+
+ candidates.sort()
+ diff_day = (candidates[-1] if is_prev else candidates[0]) - d.day
+ if diff_day != 0:
+ if is_prev:
+ d += relativedelta(days=diff_day,
+ hour=23, minute=59, second=59)
+ else:
+ d += relativedelta(days=diff_day,
+ hour=0, minute=0, second=0)
+ return True, d
+ return False, d
+
def proc_hour(d):
if expanded[1][0] != '*':
diff_hour = nearest_diff_method(d.hour, expanded[1], 24)
@@ -346,7 +459,8 @@
procs = [proc_month,
proc_day_of_month,
- proc_day_of_week,
+ (proc_day_of_week_nth if nth_weekday_of_month
+ else proc_day_of_week),
proc_hour,
proc_minute,
proc_second]
@@ -356,14 +470,16 @@
for proc in procs:
(changed, dst) = proc(dst)
if changed:
- day, month, year = dst.day, dst.month, dst.year
+ month, year = dst.month, dst.year
next = True
break
if next:
continue
return self._datetime_to_timestamp(dst.replace(microsecond=0))
- raise Exception("failed to find prev date")
+ if is_prev:
+ raise CroniterBadDateError("failed to find prev date")
+ raise CroniterBadDateError("failed to find next date")
def _get_next_nearest(self, x, to_check):
small = [item for item in to_check if item < x]
@@ -399,7 +515,13 @@
return -x
candidate = candidates[0]
for c in candidates:
- if c < range_val:
+ # fixed: c < range_val
+ # this code will reject all 31 day of month, 12 month, 59 second,
+ # 23 hour and so on.
+ # if candidates has just a element, this will not harmful.
+ # but candidates have multiple elements, then values equal to
+ # range_val will rejected.
+ if c <= range_val:
candidate = c
break
@@ -410,10 +532,3 @@
return True
else:
return False
-
-if __name__ == '__main__':
-
- base = datetime.datetime(2010, 1, 25)
- itr = croniter('0 0 1 * *', base)
- n1 = itr.get_next(datetime.datetime)
- print(n1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/src/croniter/tests/test_croniter.py new/croniter-0.3.17/src/croniter/tests/test_croniter.py
--- old/croniter-0.3.12/src/croniter/tests/test_croniter.py 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/src/croniter/tests/test_croniter.py 2017-05-22 12:11:46.000000000 +0200
@@ -1,12 +1,11 @@
-#!/usr/bin/python
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
-from datetime import datetime
+from datetime import datetime, timedelta
from time import sleep
import pytz
-from croniter import croniter
-
+from croniter import croniter, CroniterBadDateError
from croniter.tests import base
@@ -146,6 +145,49 @@
self.assertEqual(n3.day, 3)
self.assertEqual(n3.year, 2010)
+ def testNthWeekDay(self):
+ base = datetime(2010, 2, 25)
+ itr = croniter('0 0 * * sat#1', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.isoweekday(), 6)
+ self.assertEqual(n1.day, 6)
+ self.assertEqual(n1.month, 3)
+ n2 = itr.get_next(datetime)
+ self.assertEqual(n2.isoweekday(), 6)
+ self.assertEqual(n2.day, 3)
+ self.assertEqual(n2.month, 4)
+
+ base = datetime(2010, 1, 25)
+ itr = croniter('0 0 * * wed#5', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.month, 3)
+ self.assertEqual(n1.day, 31)
+ self.assertEqual(n1.year, 2010)
+ n2 = itr.get_next(datetime)
+ self.assertEqual(n2.month, 6)
+ self.assertEqual(n2.day, 30)
+ self.assertEqual(n2.year, 2010)
+ n3 = itr.get_next(datetime)
+ self.assertEqual(n3.month, 9)
+ self.assertEqual(n3.day, 29)
+ self.assertEqual(n3.year, 2010)
+
+ def testWeekDayDayAnd(self):
+ base = datetime(2010, 1, 25)
+ itr = croniter('0 0 1 * mon', base, day_or=False)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.month, 2)
+ self.assertEqual(n1.day, 1)
+ self.assertEqual(n1.year, 2010)
+ n2 = itr.get_next(datetime)
+ self.assertEqual(n2.month, 3)
+ self.assertEqual(n2.day, 1)
+ self.assertEqual(n2.year, 2010)
+ n3 = itr.get_next(datetime)
+ self.assertEqual(n3.month, 11)
+ self.assertEqual(n3.day, 1)
+ self.assertEqual(n3.year, 2010)
+
def testMonth(self):
base = datetime(2010, 1, 25)
itr = croniter('0 0 1 * *', base)
@@ -228,10 +270,12 @@
self.assertRaises(TypeError, itr.get_next, str)
self.assertRaises(ValueError, croniter, '* * * *')
self.assertRaises(ValueError, croniter, '* * 5-1 * *')
- self.assertRaises(KeyError, croniter, '* * * janu-jun *')
+ self.assertRaises(ValueError, croniter, '-90 * * * *')
+ self.assertRaises(ValueError, croniter, 'a * * * *')
+ self.assertRaises(ValueError, croniter, '* * * janu-jun *')
def testSundayToThursdayWithAlphaConversion(self):
- base = datetime(2010, 8, 25, 15, 56) #wednesday
+ base = datetime(2010, 8, 25, 15, 56) # wednesday
itr = croniter("30 22 * * sun-thu", base)
next = itr.get_next(datetime)
@@ -306,6 +350,30 @@
self.assertEqual(prev3.hour, 0)
self.assertEqual(prev3.minute, 0)
+ def testPrevNthWeekDay(self):
+ base = datetime(2010, 8, 25, 15, 56)
+ itr = croniter('0 0 * * sat#1,sun#2', base)
+ prev1 = itr.get_prev(datetime)
+ self.assertEqual(prev1.year, base.year)
+ self.assertEqual(prev1.month, base.month)
+ self.assertEqual(prev1.day, 8)
+ self.assertEqual(prev1.hour, 0)
+ self.assertEqual(prev1.minute, 0)
+
+ prev2 = itr.get_prev(datetime)
+ self.assertEqual(prev2.year, base.year)
+ self.assertEqual(prev2.month, base.month)
+ self.assertEqual(prev2.day, 7)
+ self.assertEqual(prev2.hour, 0)
+ self.assertEqual(prev2.minute, 0)
+
+ prev3 = itr.get_prev(datetime)
+ self.assertEqual(prev3.year, base.year)
+ self.assertEqual(prev3.month, 7)
+ self.assertEqual(prev3.day, 11)
+ self.assertEqual(prev3.hour, 0)
+ self.assertEqual(prev3.minute, 0)
+
def testPrevWeekDay2(self):
base = datetime(2010, 8, 25, 15, 56)
itr = croniter('10 0 * * 0', base)
@@ -388,6 +456,112 @@
self.assertEqual(n6.month, 2)
self.assertEqual(n6.day, 16)
+ def test_bug34(self):
+ base = datetime(2012, 2, 24, 0, 0, 0)
+ itr = croniter('* * 31 2 *', base)
+ try:
+ itr.get_next(datetime)
+ except (CroniterBadDateError,) as ex:
+ self.assertEqual("{0}".format(ex),
+ 'failed to find next date')
+
+ def testBug57(self):
+ base = datetime(2012, 2, 24, 0, 0, 0)
+ itr = croniter('0 4/6 * * *', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.hour, 4)
+ self.assertEqual(n1.minute, 0)
+ self.assertEqual(n1.month, 2)
+ self.assertEqual(n1.day, 24)
+
+ n1 = itr.get_prev(datetime)
+ self.assertEqual(n1.hour, 22)
+ self.assertEqual(n1.minute, 0)
+ self.assertEqual(n1.month, 2)
+ self.assertEqual(n1.day, 23)
+
+ itr = croniter('0 0/6 * * *', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.hour, 6)
+ self.assertEqual(n1.minute, 0)
+ self.assertEqual(n1.month, 2)
+ self.assertEqual(n1.day, 24)
+
+ n1 = itr.get_prev(datetime)
+ self.assertEqual(n1.hour, 0)
+ self.assertEqual(n1.minute, 0)
+ self.assertEqual(n1.month, 2)
+ self.assertEqual(n1.day, 24)
+
+ def test_multiple_months(self):
+ base = datetime(2016, 3, 1, 0, 0, 0)
+ itr = croniter('0 0 1 3,6,9,12 *', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.hour, 0)
+ self.assertEqual(n1.month, 6)
+ self.assertEqual(n1.day, 1)
+ self.assertEqual(n1.year, 2016)
+
+ base = datetime(2016, 2, 15, 0, 0, 0)
+ itr = croniter('0 0 1 3,6,9,12 *', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.hour, 0)
+ self.assertEqual(n1.month, 3)
+ self.assertEqual(n1.day, 1)
+ self.assertEqual(n1.year, 2016)
+
+ base = datetime(2016, 12, 3, 10, 0, 0)
+ itr = croniter('0 0 1 3,6,9,12 *', base)
+ n1 = itr.get_next(datetime)
+ self.assertEqual(n1.hour, 0)
+ self.assertEqual(n1.month, 3)
+ self.assertEqual(n1.day, 1)
+ self.assertEqual(n1.year, 2017)
+
+ # The result with this parameters was incorrect.
+ # self.assertEqual(p1.month, 12
+ # AssertionError: 9 != 12
+ base = datetime(2016, 3, 1, 0, 0, 0)
+ itr = croniter('0 0 1 3,6,9,12 *', base)
+ p1 = itr.get_prev(datetime)
+ self.assertEqual(p1.hour, 0)
+ self.assertEqual(p1.month, 12)
+ self.assertEqual(p1.day, 1)
+ self.assertEqual(p1.year, 2015)
+
+ # check my change resolves another hidden bug.
+ base = datetime(2016, 2, 1, 0, 0, 0)
+ itr = croniter('0 0 1,15,31 * *', base)
+ p1 = itr.get_prev(datetime)
+ self.assertEqual(p1.hour, 0)
+ self.assertEqual(p1.month, 1)
+ self.assertEqual(p1.day, 31)
+ self.assertEqual(p1.year, 2016)
+
+ base = datetime(2016, 6, 1, 0, 0, 0)
+ itr = croniter('0 0 1 3,6,9,12 *', base)
+ p1 = itr.get_prev(datetime)
+ self.assertEqual(p1.hour, 0)
+ self.assertEqual(p1.month, 3)
+ self.assertEqual(p1.day, 1)
+ self.assertEqual(p1.year, 2016)
+
+ base = datetime(2016, 3, 1, 0, 0, 0)
+ itr = croniter('0 0 1 1,3,6,9,12 *', base)
+ p1 = itr.get_prev(datetime)
+ self.assertEqual(p1.hour, 0)
+ self.assertEqual(p1.month, 1)
+ self.assertEqual(p1.day, 1)
+ self.assertEqual(p1.year, 2016)
+
+ base = datetime(2016, 3, 1, 0, 0, 0)
+ itr = croniter('0 0 1 1,3,6,9,12 *', base)
+ p1 = itr.get_prev(datetime)
+ self.assertEqual(p1.hour, 0)
+ self.assertEqual(p1.month, 1)
+ self.assertEqual(p1.day, 1)
+ self.assertEqual(p1.year, 2016)
+
def test_rangeGenerator(self):
base = datetime(2013, 3, 4, 0, 0)
itr = croniter('1-9/2 0 1 * *', base)
@@ -467,13 +641,15 @@
itr = croniter('* * * * *')
sleep(.01)
itr2 = croniter('* * * * *')
- self.assertGreater(itr2.cur, itr.cur)
+ # Greater dosnt exists in py26
+ self.assertTrue(itr2.cur > itr.cur)
def assertScheduleTimezone(self, callback, expected_schedule):
for expected_date, expected_offset in expected_schedule:
d = callback()
self.assertEqual(expected_date, d.replace(tzinfo=None))
- self.assertEqual(expected_offset, croniter._timedelta_to_seconds(d.utcoffset()))
+ self.assertEqual(expected_offset,
+ croniter._timedelta_to_seconds(d.utcoffset()))
def testTimezoneWinterTime(self):
tz = pytz.timezone('Europe/Athens')
@@ -515,6 +691,47 @@
ct = croniter('*/30 * * * *', tz.localize(start))
self.assertScheduleTimezone(lambda: ct.get_prev(datetime), reversed(expected_schedule))
+ def test_std_dst(self):
+ """
+ DST tests
+
+ This fixes https://github.com/taichino/croniter/issues/82
+
+ """
+ tz = pytz.timezone('Europe/Warsaw')
+ # -> 2017-03-26 01:59+1:00 -> 03:00+2:00
+ local_date = tz.localize(datetime(2017, 3, 26))
+ val = croniter('0 0 * * *', local_date).get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 3, 27)))
+ #
+ local_date = tz.localize(datetime(2017, 3, 26, 1))
+ cr = croniter('0 * * * *', local_date)
+ val = cr.get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 3, 26, 3)))
+ val = cr.get_current(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 3, 26, 3)))
+
+ # -> 2017-10-29 02:59+2:00 -> 02:00+1:00
+ local_date = tz.localize(datetime(2017, 10, 29))
+ val = croniter('0 0 * * *', local_date).get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 10, 30)))
+ local_date = tz.localize(datetime(2017, 10, 29, 1, 59))
+ val = croniter('0 * * * *', local_date).get_next(datetime)
+ self.assertEqual(
+ val.replace(tzinfo=None),
+ tz.localize(datetime(2017, 10, 29, 2)).replace(tzinfo=None))
+ local_date = tz.localize(datetime(2017, 10, 29, 2))
+ val = croniter('0 * * * *', local_date).get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 10, 29, 3)))
+ local_date = tz.localize(datetime(2017, 10, 29, 3))
+ val = croniter('0 * * * *', local_date).get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 10, 29, 4)))
+ local_date = tz.localize(datetime(2017, 10, 29, 4))
+ val = croniter('0 * * * *', local_date).get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 10, 29, 5)))
+ local_date = tz.localize(datetime(2017, 10, 29, 5))
+ val = croniter('0 * * * *', local_date).get_next(datetime)
+ self.assertEqual(val, tz.localize(datetime(2017, 10, 29, 6)))
if __name__ == '__main__':
unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/src/croniter.egg-info/PKG-INFO new/croniter-0.3.17/src/croniter.egg-info/PKG-INFO
--- old/croniter-0.3.12/src/croniter.egg-info/PKG-INFO 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/src/croniter.egg-info/PKG-INFO 2017-05-22 12:11:46.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: croniter
-Version: 0.3.12
+Version: 0.3.17
Summary: croniter provides iteration for datetime object with cron like format
Home-page: http://github.com/kiorky/croniter
Author: Matsumoto Taichi, kiorky
@@ -12,7 +12,7 @@
.. contents::
- croniter provides iteration for datetime object with cron like format.
+ croniter provides iteration for the datetime object with a cron like format.
::
@@ -33,12 +33,12 @@
Usage
============
- Simple example of usage is followings::
+ A simple example::
>>> from croniter import croniter
>>> from datetime import datetime
>>> base = datetime(2010, 1, 25, 4, 46)
- >>> iter = croniter('*/5 * * * *', base) # every 5 minites
+ >>> iter = croniter('*/5 * * * *', base) # every 5 minutes
>>> print iter.get_next(datetime) # 2010-01-25 04:50:00
>>> print iter.get_next(datetime) # 2010-01-25 04:55:00
>>> print iter.get_next(datetime) # 2010-01-25 05:00:00
@@ -47,21 +47,42 @@
>>> print iter.get_next(datetime) # 2010-01-26 04:02:00
>>> print iter.get_next(datetime) # 2010-01-30 04:02:00
>>> print iter.get_next(datetime) # 2010-02-02 04:02:00
-
- All you need to know is constructor and get_next, these signature are following::
-
- >>> def __init__(self, cron_format, start_time=time.time())
-
- croniter iterate along with 'cron_format' from 'start_time'.
- cron_format is 'min hour day month day_of_week', and please refer to
- http://en.wikipedia.org/wiki/Cron for details.::
+ >>>
+ >>> iter = croniter('2 4 1 * wed', base) # 04:02 on every Wednesday OR on 1st day of month
+ >>> print iter.get_next(datetime) # 2010-01-27 04:02:00
+ >>> print iter.get_next(datetime) # 2010-02-01 04:02:00
+ >>> print iter.get_next(datetime) # 2010-02-03 04:02:00
+ >>>
+ >>> iter = croniter('2 4 1 * wed', base, day_or=False) # 04:02 on every 1st day of the month if it is a Wednesday
+ >>> print iter.get_next(datetime) # 2010-09-01 04:02:00
+ >>> print iter.get_next(datetime) # 2010-12-01 04:02:00
+ >>> print iter.get_next(datetime) # 2011-06-01 04:02:00
+ >>> iter = croniter('0 0 * * sat#1,sun#2', base)
+ >>> print iter.get_next(datetime) # datetime.datetime(2010, 2, 6, 0, 0)
+
+ All you need to know is how to use the constructor and the ``get_next``
+ method, the signature of these methods are listed below::
+
+ >>> def __init__(self, cron_format, start_time=time.time(), day_or=True)
+
+ croniter iterates along with ``cron_format`` from ``start_time``.
+ ``cron_format`` is **min hour day month day_of_week**, you can refer to
+ http://en.wikipedia.org/wiki/Cron for more details. The ``day_or``
+ switch is used to control how croniter handles **day** and **day_of_week**
+ entries. Default option is the cron behaviour, which connects those
+ values using **OR**. If the switch is set to False, the values are connected
+ using **AND**. This behaves like fcron and enables you to e.g. define a job that
+ executes each 2nd friday of a month by setting the days of month and the
+ weekday.
+ ::
>>> def get_next(self, ret_type=float)
- get_next return next time in iteration with 'ret_type'.
- And ret_type accept only 'float' or 'datetime'.
+ get_next calculates the next value according to the cron expression and
+ returns an object of type ``ret_type``. ``ret_type`` should be a ``float`` or a
+ ``datetime`` object.
- Now, supported get_prev method. (>= 0.2.0)::
+ Supported added for ``get_prev`` method. (>= 0.2.0)::
>>> base = datetime(2010, 8, 25)
>>> itr = croniter('0 0 1 * *', base)
@@ -69,6 +90,12 @@
>>> print itr.get_prev(datetime) # 2010-07-01 00:00:00
>>> print itr.get_prev(datetime) # 2010-06-01 00:00:00
+ About DST
+ =========
+ Be sure to init your croniter instance with a TZ aware datetime for this to work !::
+
+ >>> local_date = tz.localize(datetime(2017, 3, 26))
+ >>> val = croniter('0 0 * * *', local_date).get_next(datetime)
Develop this package
====================
@@ -77,25 +104,28 @@
git clone https://github.com/kiorky/croniter.git
cd croniter
- python bootstrap.py -d
- bin/buildout -vvvvvvN
- bin/test
+ virtualenv --no-site-packages venv
+ . venv/bin/activate
+ pip install --upgrade -r requirements/test.txt
+ py.test src
Make a new release
====================
- We use zest.fullreleaser, a great releaser infrastructure.
+ We use zest.fullreleaser, a great release infrastructure.
- Do and follow the instructions
+ Do and follow these instructions
::
- bin/fullrelease
+ . venv/bin/activate
+ pip install --upgrade -r requirements/release.txt
+ fullrelease
Contributors
===============
- Thank you to all who have contributed to this project!
- If you contributed and not listed below please let me know.
+ Thanks to all who have contributed to this project!
+ If you have contributed and your name is not listed below please let me know.
- mrmachine
- Hinnack
@@ -114,6 +144,50 @@
Changelog
==============
+ 0.3.17 (2017-05-22)
+ -------------------
+ - DOW occurence sharp style support.
+ [kiorky, Kengo Seki <sekikn(a)apache.org>]
+
+
+ 0.3.16 (2017-03-15)
+ -------------------
+
+ - Better test suite [mrcrilly@github]
+ - DST support [kiorky]
+
+ 0.3.15 (2017-02-16)
+ -------------------
+
+ - fix bug around multiple conditions and range_val in
+ _get_prev_nearest_diff.
+ [abeja-yuki@github]
+
+ 0.3.14 (2017-01-25)
+ -------------------
+
+ - issue #69: added day_or option to change behavior when day-of-month and
+ day-of-week is given
+ [Andreas Vogl <a.vogl(a)hackner-security.com>]
+
+
+
+ 0.3.13 (2016-11-01)
+ -------------------
+
+ - `Real fix for #34 <https://github.com/taichino/croniter/pull/73>`_
+ [kiorky@github]
+ - `Modernize test infra <https://github.com/taichino/croniter/pull/72>`_
+ [kiorky@github]
+ - `Release as a universal wheel <https://github.com/kiorky/croniter/pull/16>`_
+ [adamchainz@github]
+ - `Raise ValueError on negative numbers <https://github.com/taichino/croniter/pull/63>`_
+ [josegonzalez@github]
+ - `Compare types using "issubclass" instead of exact match <https://github.com/taichino/croniter/pull/70>`_
+ [darkk@github]
+ - `Implement step cron with a variable base <https://github.com/taichino/croniter/pull/60>`_
+ [josegonzalez@github]
+
0.3.12 (2016-03-10)
-------------------
- support setting ret_type in __init__ [Brent Tubbs <brent.tubbs(a)gmail.com>]
@@ -185,4 +259,6 @@
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/src/croniter.egg-info/SOURCES.txt new/croniter-0.3.17/src/croniter.egg-info/SOURCES.txt
--- old/croniter-0.3.12/src/croniter.egg-info/SOURCES.txt 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/src/croniter.egg-info/SOURCES.txt 2017-05-22 12:11:46.000000000 +0200
@@ -1,10 +1,13 @@
MANIFEST.in
README.rst
-buildout.cfg
-py3.cfg
+setup.cfg
setup.py
+tox.ini
docs/CHANGES.rst
docs/LICENSE
+requirements/base.txt
+requirements/release.txt
+requirements/test.txt
src/croniter/__init__.py
src/croniter/croniter.py
src/croniter.egg-info/PKG-INFO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/src/croniter.egg-info/requires.txt new/croniter-0.3.17/src/croniter.egg-info/requires.txt
--- old/croniter-0.3.12/src/croniter.egg-info/requires.txt 2016-03-10 21:31:22.000000000 +0100
+++ new/croniter-0.3.17/src/croniter.egg-info/requires.txt 2017-05-22 12:11:46.000000000 +0200
@@ -1,5 +1 @@
-python-dateutil
-setuptools
-
-[test]
-pytz
+python_dateutil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-0.3.12/tox.ini new/croniter-0.3.17/tox.ini
--- old/croniter-0.3.12/tox.ini 1970-01-01 01:00:00.000000000 +0100
+++ new/croniter-0.3.17/tox.ini 2017-05-22 12:11:46.000000000 +0200
@@ -0,0 +1,22 @@
+[tox]
+minversion = 2.3
+envlist =
+ {py26,py27,py34,py35}-std
+ py27-coverage
+skipsdist = true
+
+[testenv]
+usedevelop = true
+deps =
+ -r{toxinidir}/requirements/test.txt
+whitelist_externals = /bin/sh
+setenv =
+ COVERAGE_FILE={envdir}/coverage_report
+changedir = src
+commands =
+ {py26,py27,py34,py35,py36}-std: py.test -v .
+ {py27,py34,py35,py36}-std: flake8 src/croniter/croniter.py
+ py27-coverage: coverage erase
+ py27-coverage: sh -c 'cd .. && coverage run $(which py.test) -v src'
+ py27-coverage: coverage report
+
1
0
Hello community,
here is the log from the commit of package python-CXX for openSUSE:Factory checked in at 2017-08-28 15:15:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-CXX (Old)
and /work/SRC/openSUSE:Factory/.python-CXX.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-CXX"
Mon Aug 28 15:15:54 2017 rev:2 rq:518610 version:7.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-CXX/python-CXX.changes 2014-09-12 10:03:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-CXX.new/python-CXX.changes 2017-08-28 15:17:10.352664449 +0200
@@ -1,0 +2,42 @@
+Wed Aug 23 22:21:26 UTC 2017 - toddrme2178(a)gmail.com
+
+- Implement single-spec version
+- Update to Version 7.0.3
+ * Update Py::Long to support long long consitently between Python2 and Python3.
+- Update to Version 7.0.2
+ * Add Py::Char ord() method to return the long value of a character.
+ * Fix String::size() that could return twice the actual length. This affected as_ucs4string() which would return a string with its second half as uninitialised memory.
+ * Fix setup.py for the Demo code to build all the required C++ code.
+- Update to Version 7.0.1
+ * Add support for Full Unicode range on Windows.
+ * Add sym link for README.txt to allow testing of index.html.
+- Update to Version 7.0.0
+ * Warning: This version fixes a number of problems that require source incompatible changes.
+ However by defining PYCXX_6_2_COMPATIBILITY the V6.2.x API is restored. This is not recommended for new code.
+ * The first version of python3 that is supported is 3.3.
+ * New source file needs to built: Src/cxx_exceptions.cxx. This file implements the new exception handling features.
+ * Fix the type used for lengths and sequence indexes to use Py_ssize_t. This will require sources changes for users of PyCXX.
+ * Implement smart handling of Exceptions between C++ and Python. You can now catch exceptions in C++ by type that are raised in C++ or Python.
+ * All builtin exceptions are support and are user defined exceptions.
+ * The base exception type is now BaseException not Exception. To upgrade source code replace all use of Exception with BaseException.
+ * The documentation has been updated to describe the new exception features.
+ * The supportSequence, supportMapping, supportNumber etc functions now take a bit mask that defines which specific callbacks are handled.
+- Update to Version 6.2.8
+ * Fix crash when a member function is called via callMemberFunction() and that function raises an expection.
+ * Found in comment on StackOverFlow. Fix memory size allocated for new objects. It used the wrong size calculation, but was big enough to avoid problems.
+- Update to Version 6.2.7
+ * Fix missing ptr__Unicode_Type.
+ * Fixes from learn0more(a)gmail.com make python2 also remember the m_module and add accessor functions.
+ * Fix for indirection issues from Vivian De Smedt.
+ * Update to work with latest Microsoft Visual C++ for python 2.7. All test run in Win32 and Win64.
+ * PyCXX.html documention has been updated, especially with 2TO3 information.
+ * Use delete[] for objects allocated with new[].
+- Update to Version 6.2.6
+ * Fix build issue with GCC 4.2.1 on FreeBSD and Mac OS X (stop python defining isspace as a macro).
+ * Remove support for python 3.1 (API's are unstable).
+ * Add Python 3.3 support.
+ * Patch from Michael Droettboom to fix compilation issues.
+ * Patch from Michael Droettboom to add buffer interface for python3.
+- Remove unneeded patch `python-CXX-6.2.5-fix-version.patch`
+
+-------------------------------------------------------------------
Old:
----
pycxx-6.2.5.tar.gz
python-CXX-6.2.5-fix-version.patch
New:
----
pycxx-7.0.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-CXX.spec ++++++
--- /var/tmp/diff_new_pack.IrOIcu/_old 2017-08-28 15:17:11.684477307 +0200
+++ /var/tmp/diff_new_pack.IrOIcu/_new 2017-08-28 15:17:11.708473935 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-CXX
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,31 +16,27 @@
#
-%define modname CXX
-%define tarname pycxx
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%bcond_with test
Name: python-CXX
-Version: 6.2.5
+Version: 7.0.3
Release: 0
Summary: Write Python extensions in C++
License: BSD-3-Clause
Group: Development/Languages/Python
Url: http://CXX.sourceforge.net/
-Source0: %{tarname}-%{version}.tar.gz
-Source1: %{name}-rpmlintrc
-# PATCH-MISSING-TAG -- See http://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines
+Source0: pycxx-%{version}.tar.gz
+Source99: python-CXX-rpmlintrc
Patch0: python-CXX-6.2.3-change-include-paths.patch
-# PATCH-FIX-UPSTREAM python-CXX-6.2.5-fix-version.patch -- fix version number from 6.24 to 6.25, needs to be updated for new releases
-Patch1: python-CXX-6.2.5-fix-version.patch
-BuildRequires: python-devel
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
+BuildRequires: %{python_module devel}
+BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
+BuildRequires: python-rpm-macros
Provides: python-cxx = %{version}
Obsoletes: python-cxx < %{version}
-%if 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
-%else
BuildArch: noarch
-%py_requires
-%endif
+
+%python_subpackages
%description
PyCXX is a set of classes to help create extensions of Python in the C
@@ -52,9 +48,6 @@
Summary: Development files for %{name}
Group: Development/Languages/Python
Requires: %{name} = %{version}
-%if 0%{?suse_version} > 1110
-%py_requires -d
-%endif
Provides: python-cxx-devel = %{version}
Obsoletes: python-cxx-devel < %{version}
@@ -62,35 +55,47 @@
Header files and documentation for %{name} development.
%prep
-%setup -q -n %{tarname}-%{version}
+%setup -q -n pycxx-%{version}
%patch0 -p1
-%patch1 -p1
%build
-python setup.py build
+%python_build
%install
-python setup.py install --root=%{buildroot} --prefix=%{_prefix}
-install %{modname}/*.hxx %{buildroot}/%{_includedir}/python%{py_ver}/%{modname}
-install %{modname}/*.h %{buildroot}/%{_includedir}/python%{py_ver}/%{modname}/
-cp -R %{modname}/Python2 %{buildroot}/%{_includedir}/python%{py_ver}/%{modname}/
-install Src/*.c %{buildroot}/%{_datadir}/python%{py_ver}/%{modname}/
-install Src/*.cxx %{buildroot}/%{_datadir}/python%{py_ver}/%{modname}/
-cp -R Src/Python2 %{buildroot}/%{_datadir}/python%{py_ver}/%{modname}/
-chmod -x %{buildroot}/%{_datadir}/python%{py_ver}/%{modname}/*.*
-chmod -x %{buildroot}/%{_includedir}/python%{py_ver}/%{modname}/*.*
+%python_install
+%{python_expand %fdupes %{buildroot}%{$python_sitelib}
+CURPY=`echo "%{$python_version}" | head -c 1`
+INCDIR=%{$python_sysconfig_path include}
+mkdir -p %{buildroot}/%{_datadir}/python%{$python_bin_suffix}/CXX/Python${CURPY}/
+mkdir -p %{buildroot}/${INCDIR}/CXX/Python${CURPY}/
+install -m 644 Src/*.* %{buildroot}/%{_datadir}/python%{$python_bin_suffix}/CXX/
+install -m 644 CXX/*.* %{buildroot}/${INCDIR}/CXX/
+install -m 644 Src/Python${CURPY}/*.* %{buildroot}/%{_datadir}/python%{$python_bin_suffix}/CXX/Python${CURPY}/
+install -m 644 CXX/Python${CURPY}/*.* %{buildroot}/${INCDIR}/CXX/Python${CURPY}/
+%fdupes %{buildroot}/%{_datadir}/python%{$python_bin_suffix}
+%fdupes %{buildroot}/${INCDIR}/
+}
+
+%if %{with test}
+%check
+%python_exec setup.py test
+%endif
-%files
+%files %{python_files}
%defattr(-,root,root)
%doc README.html COPYRIGHT
-%{python_sitelib}/%{modname}/
-%{python_sitelib}/%{modname}-%{version}-py%{py_ver}.egg-info
+%{python_sitelib}/CXX/
+%{python_sitelib}/CXX-%{version}-py*.egg-info
-%files devel
+%files %{python_files devel}
%defattr(-,root,root)
-%doc Doc/Python2/
-%{_includedir}/python%{py_ver}/%{modname}/
-%dir %{_datadir}/python%{py_ver}/
-%{_datadir}/python%{py_ver}/%{modname}/
+%python2_only %doc Doc/Python2/
+%python2_only %doc Doc/Python3/
+%python3_only %doc Demo/Python2/
+%python3_only %doc Demo/Python3/
+%dir %{_datadir}/python%{python_bin_suffix}
+%dir %{_includedir}/python%{python_bin_suffix}*
+%{_datadir}/python%{python_bin_suffix}/CXX/
+%{_includedir}/python%{python_bin_suffix}*/CXX/
%changelog
++++++ pycxx-6.2.5.tar.gz -> pycxx-7.0.3.tar.gz ++++++
++++ 9501 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package legion for openSUSE:Factory checked in at 2017-08-28 15:15:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/legion (Old)
and /work/SRC/openSUSE:Factory/.legion.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "legion"
Mon Aug 28 15:15:51 2017 rev:6 rq:518608 version:17.08.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/legion/legion.changes 2017-06-30 18:43:45.518345143 +0200
+++ /work/SRC/openSUSE:Factory/.legion.new/legion.changes 2017-08-28 15:16:59.250224521 +0200
@@ -1,0 +2,28 @@
+Fri Aug 25 00:27:54 UTC 2017 - junghans(a)votca.org
+
+- Version bump to 17.08.0
+ * Build system
+ - Added HDF_ROOT variable to customize HDF5 install location
+ * Legion
+ - New error message format and online reference at
+ http://legion.stanford.edu/messages
+ * Legion Prof
+ - Added new compact binary format for profile logs
+ - Added flag: -hl:prof_logfile prof_%.gz
+ * Realm
+ - Fixes to support big-endian systems
+ - Several performance improvements to DMA subsystem
+ - Added REALM_DEFAULT_ARGS environment variable
+ containing flags to be inserted at front of command line
+ * Regent
+ - Removed new operator. Unstructured regions are now
+ fully allocated by default
+ - Added optimization to automatically skip empty tasks
+ - Initial support for extern tasks that are defined elsewhere
+ - Tasks that use __demand(__openmp) are now constrained
+ to run on OpenMP processors by default
+ - RDIR: Better support for deeper nested region trees
+- drop realm-detect-big-endian-systems-and-reverse-order-of-ID-fields.patch, upstream
+- drop tutorial-fix-bad-type-size-causing-crash-on-big-endian-systems.patch, upstream
+
+-------------------------------------------------------------------
Old:
----
legion-17.05.0.tar.gz
realm-detect-big-endian-systems-and-reverse-order-of-ID-fields.patch
tutorial-fix-bad-type-size-causing-crash-on-big-endian-systems.patch
New:
----
legion-17.08.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ legion.spec ++++++
--- /var/tmp/diff_new_pack.d4pELL/_old 2017-08-28 15:17:01.657886206 +0200
+++ /var/tmp/diff_new_pack.d4pELL/_new 2017-08-28 15:17:01.701880025 +0200
@@ -18,15 +18,13 @@
Name: legion
-Version: 17.05.0
+Version: 17.08.0
Release: 0
Summary: A data-centric parallel programming system
License: Apache-2.0
Group: Productivity/Networking/Other
Url: http://legion.stanford.edu/
Source0: https://github.com/StanfordLegion/legion/archive/%{name}-%{version}.tar.gz#…
-Patch0: realm-detect-big-endian-systems-and-reverse-order-of-ID-fields.patch
-Patch1: tutorial-fix-bad-type-size-causing-crash-on-big-endian-systems.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -82,8 +80,6 @@
%prep
%setup -q -n %{name}-%{name}-%{version}
-%patch0
-%patch1
%build
%{cmake} -DLegion_USE_HWLOC=ON \
++++++ legion-17.05.0.tar.gz -> legion-17.08.0.tar.gz ++++++
++++ 71636 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package drush for openSUSE:Factory checked in at 2017-08-28 15:15:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/drush (Old)
and /work/SRC/openSUSE:Factory/.drush.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "drush"
Mon Aug 28 15:15:41 2017 rev:2 rq:518607 version:8.1.13
Changes:
--------
--- /work/SRC/openSUSE:Factory/drush/drush.changes 2017-08-24 18:41:26.593988759 +0200
+++ /work/SRC/openSUSE:Factory/.drush.new/drush.changes 2017-08-28 15:16:51.187357477 +0200
@@ -1,0 +2,16 @@
+Tue Aug 22 21:54:36 UTC 2017 - jimmy(a)boombatower.com
+
+- Update to version 8.1.13:
+ * Prep for 8.1.13-dev
+ * Fix #2753: Prevent loops when unable to download extensions (#2797)
+ * Fix #2817. bash autocomplete via .bashrc only works on the second .bashrc inclusion.
+ * Disable the psysh version check.
+ * Fixes #2831: create_function is deprecated in php 7.2; might as well use an anonymous function instead.
+ * Fix drush docs, link to 8.x docs from within the 8.x documentation (#2842)
+ * Add php lint operation via CircleCI.
+ * Respect disable_functions list in use_pcntl_exec check (#2857)
+ * fix namespace for Drush command sql-query with option "--db-prefix" in use (#2882)
+ * Just assert that disabled module's command can't be run. The actual error is not important, and seems to be variable based on phases of the moon.
+ * Prep for 8.1.13.
+
+-------------------------------------------------------------------
Old:
----
drush-8.1.12.tar.xz
New:
----
drush-8.1.13.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ drush.spec ++++++
--- /var/tmp/diff_new_pack.21i4Xp/_old 2017-08-28 15:16:53.367051197 +0200
+++ /var/tmp/diff_new_pack.21i4Xp/_new 2017-08-28 15:16:53.379049511 +0200
@@ -17,7 +17,7 @@
Name: drush
-Version: 8.1.12
+Version: 8.1.13
Release: 0
Summary: Command line shell and scripting interface for Drupal
# See licenses.txt for dependency licenses.
@@ -51,7 +51,7 @@
%setup -q -a 1
%build
-find . -name ".travis.yml" -exec rm -rf {} \;
+find . -name ".travis.yml" -delete
cp %{SOURCE12} licenses.txt
%install
++++++ _service ++++++
--- /var/tmp/diff_new_pack.21i4Xp/_old 2017-08-28 15:16:53.591019726 +0200
+++ /var/tmp/diff_new_pack.21i4Xp/_new 2017-08-28 15:16:53.591019726 +0200
@@ -1,7 +1,7 @@
<services>
<service name="tar_scm" mode="disabled">
<param name="versionformat">@PARENT_TAG@</param>
- <param name="revision">refs/tags/8.1.12</param>
+ <param name="revision">refs/tags/8.1.13</param>
<param name="url">git://github.com/drush-ops/drush.git</param>
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.21i4Xp/_old 2017-08-28 15:16:53.627014668 +0200
+++ /var/tmp/diff_new_pack.21i4Xp/_new 2017-08-28 15:16:53.627014668 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/drush-ops/drush.git</param>
- <param name="changesrevision">a1d3ab0f1d9ce01556d70015906caaed723f7ba7</param>
+ <param name="changesrevision">f93fc2bed05ba58cf65fb65f799429bf6354b205</param>
</service>
</servicedata>
++++++ drush-8.1.12.tar.xz -> drush-8.1.13.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/circle.yml new/drush-8.1.13/circle.yml
--- old/drush-8.1.12/circle.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/drush-8.1.13/circle.yml 2017-08-22 19:28:25.000000000 +0200
@@ -0,0 +1,15 @@
+machine:
+ timezone:
+ America/Chicago
+ php:
+ version: 7.0.11
+
+dependencies:
+ cache_directories:
+ - ~/.composer/cache
+ override:
+ - composer install --prefer-dist --no-interaction
+
+test:
+ override:
+ - composer lint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/commands/core/cli.drush.inc new/drush-8.1.13/commands/core/cli.drush.inc
--- old/drush-8.1.12/commands/core/cli.drush.inc 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/commands/core/cli.drush.inc 2017-08-22 19:28:25.000000000 +0200
@@ -5,6 +5,7 @@
use Drush\Psysh\DrushHelpCommand;
use Drush\Psysh\DrushCommand;
use Drush\Psysh\Shell;
+use Psy\VersionUpdater\Checker;
/**
* Implements hook_drush_command().
@@ -41,6 +42,9 @@
// Set the Drush specific history file path.
$configuration->setHistoryFile(drush_history_path_cli());
+ // Disable checking for updates. Our dependencies are managed with Composer.
+ $configuration->setUpdateCheck(Checker::NEVER);
+
$shell = new Shell($configuration);
if ($drupal_major_version >= 8) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/commands/core/init.drush.inc new/drush-8.1.13/commands/core/init.drush.inc
--- old/drush-8.1.12/commands/core/init.drush.inc 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/commands/core/init.drush.inc 2017-08-22 19:28:25.000000000 +0200
@@ -61,6 +61,16 @@
drush_log(dt("Copied example Drush configuration file to !path", array('!path' => $drush_config_file)), LogLevel::OK);
}
+ // If Drush is not in the $PATH, then figure out which
+ // path to add so that Drush can be found globally.
+ $add_path = drush_get_option('add-path', NULL);
+ if ((!drush_which("drush") || $add_path) && ($add_path !== FALSE)) {
+ $drush_path = drush_find_path_to_drush($home);
+ $drush_path = preg_replace("%^" . preg_quote($home) . "/%", '$HOME/', $drush_path);
+
+ $bashrc_additions["%$drush_path%"] = "\n# Path to Drush, added by 'drush init'.\nexport PATH=\"\$PATH:$drush_path\"\n\n";
+ }
+
// If there is no ~/.drush/drush.bashrc file, then copy
// the example bashrc file there
if (!is_file($drush_bashrc)) {
@@ -91,16 +101,6 @@
// ~/.bashrc or ~/.bash_profile
$bashrc = drush_init_find_bashrc($home);
- // If Drush is not in the $PATH, then figure out which
- // path to add so that Drush can be found globally.
- $add_path = drush_get_option('add-path', NULL);
- if ((!drush_which("drush") || $add_path) && ($add_path !== FALSE)) {
- $drush_path = drush_find_path_to_drush($home);
- $drush_path = preg_replace("%^" . preg_quote($home) . "/%", '$HOME/', $drush_path);
-
- $bashrc_additions["%$drush_path%"] = "\n# Path to Drush, added by 'drush init'.\nexport PATH=\"\$PATH:$drush_path\"\n\n";
- }
-
// Modify the user's bashrc file, adding our customizations.
$bashrc_contents = "";
if (file_exists($bashrc)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/commands/pm/pm.drush.inc new/drush-8.1.13/commands/pm/pm.drush.inc
--- old/drush-8.1.12/commands/pm/pm.drush.inc 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/commands/pm/pm.drush.inc 2017-08-22 19:28:25.000000000 +0200
@@ -982,6 +982,7 @@
$extension_info = drush_get_extensions();
$recheck = TRUE;
+ $last_download = NULL;
while ($recheck) {
$recheck = FALSE;
@@ -1005,6 +1006,11 @@
}
}
if (!empty($found)) {
+ // Prevent from looping if last download failed.
+ if ($found === $last_download) {
+ drush_log(dt("Unable to download some or all of the extensions."), LogLevel::WARNING);
+ break;
+ }
drush_log(dt("The following projects provide some or all of the extensions not found:\n@list", array('@list' => implode("\n", $found))), LogLevel::OK);
if (drush_get_option('resolve-dependencies')) {
drush_log(dt("They are being downloaded."), LogLevel::OK);
@@ -1053,12 +1059,18 @@
$unmet_project_list = array_merge($unmet_project_list, $unmet_projects);
$msgs[] = dt("!module requires !unmet-projects", array('!unmet-projects' => implode(', ', $unmet_projects), '!module' => $module));
}
+ $found = array_merge($download, $unmet_project_list);
+ // Prevent from looping if last download failed.
+ if ($found === $last_download) {
+ drush_log(dt("Unable to download some or all of the extensions."), LogLevel::WARNING);
+ break;
+ }
drush_log(dt("The following projects have unmet dependencies:\n!list", array('!list' => implode("\n", $msgs))), LogLevel::OK);
if (drush_get_option('resolve-dependencies')) {
drush_log(dt("They are being downloaded."), LogLevel::OK);
}
if (drush_get_option('resolve-dependencies') || drush_confirm(dt("Would you like to download them?"))) {
- $download = array_merge($download, $unmet_project_list);
+ $download = $found;
}
}
}
@@ -1077,6 +1089,7 @@
system_list_reset();
}
$extension_info = drush_get_extensions();
+ $last_download = $download;
$recheck = TRUE;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/composer.json new/drush-8.1.13/composer.json
--- old/drush-8.1.12/composer.json 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/composer.json 2017-08-22 19:28:25.000000000 +0200
@@ -66,6 +66,11 @@
"Unish": "tests/"
}
},
+ "scripts": {
+ "lint": [
+ "find includes -name '*.inc' -print0 | xargs -0 -n1 php -l"
+ ]
+ },
"extra": {
"branch-alias": {
"dev-master": "8.0.x-dev"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/docs/examples.md new/drush-8.1.13/docs/examples.md
--- old/drush-8.1.12/docs/examples.md 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/docs/examples.md 2017-08-22 19:28:25.000000000 +0200
@@ -1,18 +1,18 @@
The _examples_ folder contains example files which you may copy and edit as needed. Read the documentation right in the file. If you see an opportunity to improve the file, please submit a pull request.
-* [drush.wrapper](https://raw.githubusercontent.com/drush-ops/drush/master/exa…. A handy launcher script which calls the Drush located in vendor/bin/drush and can add options like --local, --root, etc.
-* [example.aliases.drushrc.php](https://raw.githubusercontent.com/drush-ops/dr…. Example site alias definitions.
-* [example.bashrc](https://raw.githubusercontent.com/drush-ops/drush/master/ex…. Enhance your shell with lots of Drush niceties including bash completion.
-* [example.drush.ini](https://raw.githubusercontent.com/drush-ops/drush/master…. Configure your PHP just for Drush requests.
-* [example.drushrc.php](https://raw.githubusercontent.com/drush-ops/drush/mast…. A Drush configuration file.
-* [example.make](https://raw.githubusercontent.com/drush-ops/drush/master/exam…. An ini style make file.
-* [example.make.yml](https://raw.githubusercontent.com/drush-ops/drush/master/…. A YML make file.
-* [example.prompt.sh](https://raw.githubusercontent.com/drush-ops/drush/master…. Displays Git repository and Drush alias status in your prompt.
-* [git-bisect.example.sh](https://raw.githubusercontent.com/drush-ops/drush/ma…. Spelunking through Drush's git history with bisect.
-* [helloworld.script](https://raw.githubusercontent.com/drush-ops/drush/master…. An example Drush script.
-* [pm_update.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/mast…. Restore sqlsrv driver after core update.
-* [policy.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/master/…. A policy file can disallow prohibited commands/options etc.
-* [sandwich.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/maste…. A fun example command inspired by a famous XKCD comic.
-* [sync_via_http.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/…. sql-sync modification that transfers via http instead of rsync.
-* [sync_enable.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/ma…. Automatically enable modules after a sql-sync.
-* [xkcd.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/master/ex…. A fun example command that browses XKCD comics.
+* [drush.wrapper](https://raw.githubusercontent.com/drush-ops/drush/8.x/exampl…. A handy launcher script which calls the Drush located in vendor/bin/drush and can add options like --local, --root, etc.
+* [example.aliases.drushrc.php](https://raw.githubusercontent.com/drush-ops/dr…. Example site alias definitions.
+* [example.bashrc](https://raw.githubusercontent.com/drush-ops/drush/8.x/examp…. Enhance your shell with lots of Drush niceties including bash completion.
+* [example.drush.ini](https://raw.githubusercontent.com/drush-ops/drush/8.x/ex…. Configure your PHP just for Drush requests.
+* [example.drushrc.php](https://raw.githubusercontent.com/drush-ops/drush/8.x/…. A Drush configuration file.
+* [example.make](https://raw.githubusercontent.com/drush-ops/drush/8.x/example…. An ini style make file.
+* [example.make.yml](https://raw.githubusercontent.com/drush-ops/drush/8.x/exa…. A YML make file.
+* [example.prompt.sh](https://raw.githubusercontent.com/drush-ops/drush/8.x/ex…. Displays Git repository and Drush alias status in your prompt.
+* [git-bisect.example.sh](https://raw.githubusercontent.com/drush-ops/drush/8.…. Spelunking through Drush's git history with bisect.
+* [helloworld.script](https://raw.githubusercontent.com/drush-ops/drush/8.x/ex…. An example Drush script.
+* [pm_update.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/8.x/…. Restore sqlsrv driver after core update.
+* [policy.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/8.x/exa…. A policy file can disallow prohibited commands/options etc.
+* [sandwich.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/8.x/e…. A fun example command inspired by a famous XKCD comic.
+* [sync_via_http.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/…. sql-sync modification that transfers via http instead of rsync.
+* [sync_enable.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/8.…. Automatically enable modules after a sql-sync.
+* [xkcd.drush.inc](https://raw.githubusercontent.com/drush-ops/drush/8.x/examp…. A fun example command that browses XKCD comics.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/docs/index.md new/drush-8.1.13/docs/index.md
--- old/drush-8.1.12/docs/index.md 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/docs/index.md 2017-08-22 19:28:25.000000000 +0200
@@ -4,14 +4,14 @@
Resources
-----------
-* [Install documentation](http://docs.drush.org/en/master/install/)
+* [Install documentation](http://docs.drush.org/en/8.x/install/)
* [General documentation](http://docs.drush.org)
* [API Documentation](http://api.drush.org)
* [Drush Commands](http://drushcommands.com)
* Subscribe [this atom feed](https://github.com/drush-ops/drush/releases.atom) to receive notification on new releases. Also, [Version eye](https://www.versioneye.com/).
* [Drush packages available via Composer](http://packages.drush.org)
* [A list of modules that include Drush integration](https://www.drupal.org/project/project_module?f[2]=im_vid_3%3A…
-* Drush comes with a [full test suite](https://github.com/drush-ops/drush/blob/master/tests/README.md) powered by [PHPUnit](https://github.com/sebastianbergmann/phpunit). Each commit gets tested by the awesome [Travis.ci continuous integration service](https://travis-ci.org/drush-ops/drush).
+* Drush comes with a [full test suite](https://github.com/drush-ops/drush/blob/8.x/tests/README.md) powered by [PHPUnit](https://github.com/sebastianbergmann/phpunit). Each commit gets tested by the awesome [Travis.ci continuous integration service](https://travis-ci.org/drush-ops/drush).
Support
-----------
@@ -36,7 +36,7 @@
##### Does Drush have unit tests?
-Drush has an excellent suite of unit tests. See [tests/README.md](https://github.com/drush-ops/drush/blob/master/tests/READM… for more information.
+Drush has an excellent suite of unit tests. See [tests/README.md](https://github.com/drush-ops/drush/blob/8.x/tests/README.m… for more information.
Credits
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/docs/install-alternative.md new/drush-8.1.13/docs/install-alternative.md
--- old/drush-8.1.12/docs/install-alternative.md 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/docs/install-alternative.md 2017-08-22 19:28:25.000000000 +0200
@@ -14,8 +14,8 @@
# Install a specific version of Drush, e.g. Drush 7.1.0
composer global require drush/drush:7.1.0
- # Install master branch as a git clone. Great for contributing back to Drush project.
- composer global require drush/drush:dev-master --prefer-source
+ # Install 8.x branch as a git clone. Great for contributing back to Drush project.
+ composer global require drush/drush:8.x-dev --prefer-source
* Alternate way to install for all users via Composer:
@@ -30,5 +30,5 @@
* [Acquia Dev Desktop](https://www.acquia.com/downloads) is excellent, and includes Drush. See the terminal icon after setting up a web site.
* Or consider running Linux/OSX via Virtualbox. [Drupal VM](http://www.drupalvm.com/) and [Vlad](https://github.com/hashbangcode/vlad) are popular.* These Windows packages include Drush and its dependencies (including MSys). * [7.0.0 (stable)](https://github.com/drush-ops/drush/releases/download/7.0.0/windows…) * [6.6.0](https://github.com/drush-ops/drush/releases/download/6.6.0/windows-6…. * [6.0](https://github.com/drush-ops/drush/releases/download/6.0.0/Drush-6.0-2….
-* Or install LAMP on your own, and run Drush via [Git's shell](https://git-for-windows.github.io/), in order to insure that [all depedencies](https://github.com/acquia/DevDesktopCommon/tree/master/bintool… are available.
-* When creating site aliases for Windows remote machines, pay particular attention to information presented in the example.aliases.drushrc.php file, especially when setting values for 'remote-host' and 'os', as these are very important when running Drush rsync and Drush sql-sync commands.
\ No newline at end of file
+* Or install LAMP on your own, and run Drush via [Git's shell](https://git-for-windows.github.io/), in order to insure that [all depedencies](https://github.com/acquia/DevDesktopCommon/tree/8.x/bintools-w… are available.
+* When creating site aliases for Windows remote machines, pay particular attention to information presented in the example.aliases.drushrc.php file, especially when setting values for 'remote-host' and 'os', as these are very important when running Drush rsync and Drush sql-sync commands.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/docs/install.md new/drush-8.1.13/docs/install.md
--- old/drush-8.1.12/docs/install.md 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/docs/install.md 2017-08-22 19:28:25.000000000 +0200
@@ -17,10 +17,10 @@
```
* MAMP users, and anyone wishing to launch a non-default PHP, needs to [edit ~/.bashrc so that the right PHP is in your $PATH](http://stackoverflow.com/questions/4145667/how-to-override-the-path-of-php-to-use-the-mamp-path/10653443#10653443).
-* We have documented [alternative ways to install](http://docs.drush.org/en/master/install-alternative/), including [Windows](http://docs.drush.org/en/master/install-alternative/#windows).
+* We have documented [alternative ways to install](http://docs.drush.org/en/8.x/install-alternative/), including [Windows](http://docs.drush.org/en/8.x/install-alternative/#windows).
* If you need to pass custom php.ini values, run `php -d foo=bar drush.phar --php-options=foo=bar`
-* Your shell now has [useful bash aliases and tab completion for command names, site aliases, options, and arguments](https://raw.githubusercontent.com/drush-ops/drush/master/example….
-* A [drushrc.php](https://raw.githubusercontent.com/drush-ops/drush/master/examp… has been copied to ~/.drush above. Customize it to save typing and standardize options for commands.
+* Your shell now has [useful bash aliases and tab completion for command names, site aliases, options, and arguments](https://raw.githubusercontent.com/drush-ops/drush/8.x/examples/e….
+* A [drushrc.php](https://raw.githubusercontent.com/drush-ops/drush/8.x/examples… has been copied to ~/.drush above. Customize it to save typing and standardize options for commands.
* Upgrade using this same procedure.
Install a site-local Drush
@@ -28,7 +28,7 @@
In addition to the global Drush, it is recommended that Drupal 8 sites be [built using Composer, with Drush listed as a dependency](https://github.com/drupal-composer/drupal-project).
1. When you run `drush`, the global Drush is called first and then hands execution to the site-local Drush. This gives you the convenience of running `drush` without specifying the full path to the executable, without sacrificing the safety provided by a site-local Drush.
-2. Optional: Copy the [examples/drush.wrapper](https://github.com/drush-ops/drush/blob/master/exam… file to your project root and modify to taste. This is a handy launcher script; add --local here to turn off all global configuration locations, and maintain consistency over configuration/aliases/commandfiles for your team.
+2. Optional: Copy the [examples/drush.wrapper](https://github.com/drush-ops/drush/blob/8.x/example… file to your project root and modify to taste. This is a handy launcher script; add --local here to turn off all global configuration locations, and maintain consistency over configuration/aliases/commandfiles for your team.
3. Note that if you have multiple Drupal sites on your system, it is possible to use a different version of Drush with each one.
Drupal Compatibility
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/docs/usage.md new/drush-8.1.13/docs/usage.md
--- old/drush-8.1.12/docs/usage.md 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/docs/usage.md 2017-08-22 19:28:25.000000000 +0200
@@ -46,5 +46,5 @@
$ drush sql-sync --structure-tables-key=custom @live @dev
```
-See [example.aliases.drushrc.php](https://raw.githubusercontent.com/drush-ops/dr… for more information.
+See [example.aliases.drushrc.php](https://raw.githubusercontent.com/drush-ops/dr… for more information.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/drush.info new/drush-8.1.13/drush.info
--- old/drush-8.1.12/drush.info 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/drush.info 2017-08-22 19:28:25.000000000 +0200
@@ -1 +1 @@
-drush_version=8.1.12
+drush_version=8.1.13
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/includes/drush.inc new/drush-8.1.13/includes/drush.inc
--- old/drush-8.1.12/includes/drush.inc 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/includes/drush.inc 2017-08-22 19:28:25.000000000 +0200
@@ -1028,9 +1028,19 @@
// Remove the header line.
array_shift($output);
// Remove the prefix verb from each line.
- $output = array_map(create_function('$str', 'return substr($str, strpos($str, ":") + 3 + ' . strlen($destination) . ');'), $output);
+ $output = array_map(
+ function ($str) use ($destination) {
+ return substr($str, strpos($str, ":") + 3 + strlen($destination));
+ },
+ $output
+ );
// Remove any remaining blank lines.
- $return = array_filter($output, create_function('$str', 'return $str != "";'));
+ $return = array_filter(
+ $output,
+ function ($str) {
+ return $str != "";
+ }
+ );
}
}
// Otherwise we have a possibly-compressed Tar file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/includes/startup.inc new/drush-8.1.13/includes/startup.inc
--- old/drush-8.1.12/includes/startup.inc 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/includes/startup.inc 2017-08-22 19:28:25.000000000 +0200
@@ -383,7 +383,7 @@
}
// Always use pcntl_exec if it exists.
- $use_pcntl_exec = function_exists("pcntl_exec");
+ $use_pcntl_exec = function_exists("pcntl_exec") && (strpos(ini_get('disable_functions'), 'pcntl_exec') === FALSE);
// If we have posix_getppid, then pass in the shell pid so
// that 'site-set' et. al. can work correctly.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/lib/Drush/Sql/SqlBase.php new/drush-8.1.13/lib/Drush/Sql/SqlBase.php
--- old/drush-8.1.12/lib/Drush/Sql/SqlBase.php 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/lib/Drush/Sql/SqlBase.php 2017-08-22 19:28:25.000000000 +0200
@@ -2,6 +2,7 @@
namespace Drush\Sql;
+use Drupal\Core\Database\Database;
use Drush\Log\LogLevel;
use Webmozart\PathUtil\Path;
@@ -201,7 +202,7 @@
// Enable prefix processing which can be dangerous so off by default. See http://drupal.org/node/1219850.
if (drush_get_option('db-prefix')) {
if (drush_drupal_major_version() >= 7) {
- $query = \Database::getConnection()->prefixTables($query);
+ $query = Database::getConnection()->prefixTables($query);
}
else {
$query = db_prefix_tables($query);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drush-8.1.12/tests/commandTest.php new/drush-8.1.13/tests/commandTest.php
--- old/drush-8.1.12/tests/commandTest.php 2017-06-06 00:51:34.000000000 +0200
+++ new/drush-8.1.13/tests/commandTest.php 2017-08-22 19:28:25.000000000 +0200
@@ -94,8 +94,7 @@
$options += array(
'backend' => NULL, // To obtain and parse the error log.
);
+ // Assert that this has an error.
$this->drush('devel-reinstall', array(), $options, NULL, NULL, self::EXIT_ERROR);
- $parsed = $this->parse_backend_output($this->getOutput());
- $this->assertArrayHasKey("DRUSH_COMMAND_DEPENDENCY_ERROR", $parsed['error_log']);
}
}
++++++ drush-vendor.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/autoload.php new/vendor/autoload.php
--- old/vendor/autoload.php 2017-06-06 21:39:01.909003762 +0200
+++ new/vendor/autoload.php 2017-08-22 23:54:50.642196860 +0200
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInit5f2cf6e36376ba78e3ca7b274afdf03b::getLoader();
+return ComposerAutoloaderInit31d66a8bf974eeb7cc69e6b8b67d940b::getLoader();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/composer/autoload_real.php new/vendor/composer/autoload_real.php
--- old/vendor/composer/autoload_real.php 2017-06-06 21:39:01.909003762 +0200
+++ new/vendor/composer/autoload_real.php 2017-08-22 23:54:50.642196860 +0200
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit5f2cf6e36376ba78e3ca7b274afdf03b
+class ComposerAutoloaderInit31d66a8bf974eeb7cc69e6b8b67d940b
{
private static $loader;
@@ -19,15 +19,15 @@
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInit5f2cf6e36376ba78e3ca7b274afdf03b', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit31d66a8bf974eeb7cc69e6b8b67d940b', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInit5f2cf6e36376ba78e3ca7b274afdf03b', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInit31d66a8bf974eeb7cc69e6b8b67d940b', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
- call_user_func(\Composer\Autoload\ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b::getInitializer($loader));
+ call_user_func(\Composer\Autoload\ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@
$loader->register(true);
if ($useStaticLoader) {
- $includeFiles = Composer\Autoload\ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b::$files;
+ $includeFiles = Composer\Autoload\ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire5f2cf6e36376ba78e3ca7b274afdf03b($fileIdentifier, $file);
+ composerRequire31d66a8bf974eeb7cc69e6b8b67d940b($fileIdentifier, $file);
}
return $loader;
}
}
-function composerRequire5f2cf6e36376ba78e3ca7b274afdf03b($fileIdentifier, $file)
+function composerRequire31d66a8bf974eeb7cc69e6b8b67d940b($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/composer/autoload_static.php new/vendor/composer/autoload_static.php
--- old/vendor/composer/autoload_static.php 2017-06-06 21:39:01.909003762 +0200
+++ new/vendor/composer/autoload_static.php 2017-08-22 23:54:50.642196860 +0200
@@ -4,7 +4,7 @@
namespace Composer\Autoload;
-class ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b
+class ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@@ -157,10 +157,10 @@
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b::$prefixDirsPsr4;
- $loader->prefixesPsr0 = ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b::$prefixesPsr0;
- $loader->classMap = ComposerStaticInit5f2cf6e36376ba78e3ca7b274afdf03b::$classMap;
+ $loader->prefixLengthsPsr4 = ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b::$prefixDirsPsr4;
+ $loader->prefixesPsr0 = ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b::$prefixesPsr0;
+ $loader->classMap = ComposerStaticInit31d66a8bf974eeb7cc69e6b8b67d940b::$classMap;
}, null, ClassLoader::class);
}
1
0
Hello community,
here is the log from the commit of package openSUSE-release-tools for openSUSE:Factory checked in at 2017-08-28 15:15:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Mon Aug 28 15:15:28 2017 rev:2 rq:518604 version:20170824.7bbd005
Changes:
--------
--- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2017-08-24 18:40:00.138168544 +0200
+++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes 2017-08-28 15:16:47.155923953 +0200
@@ -1,0 +2,207 @@
+Thu Aug 24 11:17:54 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170824.7bbd005:
+ * Use configured staging group for adi
+
+-------------------------------------------------------------------
+Thu Aug 24 10:57:56 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170824.adeb4c4:
+ * Freeze Cmd: Implement freezing adi staging project
+
+-------------------------------------------------------------------
+Wed Aug 23 20:09:34 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170823.7502d6a:
+ * stagingapi: avoid making an empty package-diff comment.
+
+-------------------------------------------------------------------
+Tue Aug 22 22:12:40 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170822.55aeefa:
+ * check_source: remove DIFFCOUNT algorithm and instead always add review_team.
+ * check_source: rename perl and asciidoc to match name.
+
+-------------------------------------------------------------------
+Tue Aug 22 22:05:53 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170822.2873a27:
+ * core.owner_fallback(): check if startswith() instead of equal.
+
+-------------------------------------------------------------------
+Tue Aug 22 10:32:09 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170822.09b046f:
+ * ReviewBot: get_devel_project(): correct error handling to only allow 404.
+ * ReviewBot: add_review(): remove left-over print() line.
+
+-------------------------------------------------------------------
+Tue Aug 22 09:07:35 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170822.9bd2789:
+ * stagingapi: Ensure the links is valid before processing
+ * Add amarok to test-2 DVD
+ * Remove sw_management_kde pattern from test-2 DVD
+
+-------------------------------------------------------------------
+Fri Aug 18 20:09:57 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170818.f230438:
+ * dist/ci/Dockerfile: include `dup` before `in` to handle major base changes.
+
+-------------------------------------------------------------------
+Fri Aug 18 19:46:11 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170818.bf1662b:
+ * ReviewBot: add_review(): raise exception instead of returning boolean.
+ * ReviewBot: add_review(): provide allow_duplicate parameter and default of False.
+
+-------------------------------------------------------------------
+Fri Aug 18 17:32:22 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170818.54fcc90:
+ * FccSubmitter: drop add_review() since never used and handled by other bots.
+ * repo_checker: ignore non-existant binaries during lookup.
+
+-------------------------------------------------------------------
+Fri Aug 18 15:43:30 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170818.52cce8d:
+ * switch to php7 in staging project
+ * totest-manager: update Kubic name to openSUSE-Tumbleweed-Kubic
+ * Staging DVDs: add x86 pattern to the media
+ * suppkg_rebuild: Clean up supportpkg list also
+
+-------------------------------------------------------------------
+Mon Aug 14 16:48:06 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170814.8711b45:
+ * check_source: change repo_checker default to new OBS username.
+
+-------------------------------------------------------------------
+Fri Aug 11 11:47:59 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170811.1cefbfc:
+ * update-crawler: handle devel projects
+
+-------------------------------------------------------------------
+Tue Aug 08 10:39:53 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170808.c994bc8:
+ * update crawler: latest_packages across instances
+
+-------------------------------------------------------------------
+Mon Aug 07 12:27:19 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170807.a64d27c:
+ * Catch more errors, fixes
+ * Fix biarch logic to make --force work
+ * Update blacklist and whiteliste
+ * Don't use product filter by default
+ * Add libjpeg62-turbo to whitelist
+ * add openSUSE-EULAs to blacklist
+ * warn about linked packages
+ * Remove leftover debug statements
+ * Refactor getting file list
+ * Speed up duplicate binaries check
+
+-------------------------------------------------------------------
+Mon Aug 07 09:44:33 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170807.2c08e40:
+ * The first steps toward sle15 :)
+
+-------------------------------------------------------------------
+Fri Aug 04 20:23:29 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170804.072d1eb:
+ * ReviewBot: comment_write(): support package.
+ * osclib/core: provide BINARY_REGEX named group pattern and utilize.
+ * osclib/core: add package to BinaryParsed tuple.
+ * osclib/core: provide package_binary_list() to efficiently obtain binary to package map.
+ * repo_checker: package_whitelist() does not need to support group splitting to find product.
+ * repo_checker: provide optional parsing of install check output and mapping to package.
+ * repo_checker: provide --post-comments option on project_only subcommand.
+ * repo_checker: truncate long messages to avoid crashing OBS.
+ * ReviewBot: comment_write(): include target in debug message when too similar.
+
+-------------------------------------------------------------------
+Wed Aug 02 19:47:42 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170802.cdde2bf:
+ * repo_checker: add whitelist for adoption phase.
+ * osclib/cycle: remove extra leading slash.
+ * repo_checker: point to repo_checker file instead of old installcheck in project comment.
+
+-------------------------------------------------------------------
+Wed Aug 02 15:55:44 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170802.99df9c5:
+ * leaper: transition from SLE-12-SP3 and Leap:42.3 to SLE-15 and Leap:15.0.
+
+-------------------------------------------------------------------
+Tue Aug 01 02:25:45 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170731.ad89a77:
+ * dist/ci/Dockerfile: drop hard-coded mirror now that Tumbleweed issues resolved.
+
+-------------------------------------------------------------------
+Tue Aug 01 02:21:52 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170731.a5e3143:
+ * repo-checker.pl: replace [^-]* with [^-]+ as it is more accurate.
+ * repo-checker.pl: drop old debug lines.
+ * Rename repo-checker.pl to repo_checker.pl to be consistent.
+ * repo_checker.pl: switch from multi-line regex to single line and full.
+ * repo_checker.pl: s/INSTALL/CONFLICTS/ for file pointer for more clarity.
+ * repo_checker.pl: rework installcheck parsing like fileconflicts to resolve bugs.
+
+-------------------------------------------------------------------
+Fri Jul 28 22:20:14 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170728.1ecdcfd:
+ * check_source: add devel review for delete request using MaintenanceChecker logic.
+ * stagingapi: provide dashboard_content_{load,save,ensure}() and utilize.
+ * repo_checker.pl: allow empty $repodir allowing just a project-wide check.
+ * repo_checker: provide project_only subcommand to write result to installcheck.
+
+-------------------------------------------------------------------
+Fri Jul 28 08:27:02 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170728.03ba255:
+ * Factory test dvd: upgrade to postgresql96
+
+-------------------------------------------------------------------
+Thu Jul 27 02:45:02 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170726.b7cff32:
+ * osc-cycle: ignore invalid packages
+
+-------------------------------------------------------------------
+Thu Jul 27 02:38:06 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170724.4d5ba92:
+ * openqa-maintenance: update data for schedule 12sp3 jobs
+
+-------------------------------------------------------------------
+Wed Jul 19 22:35:20 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170719.e4c11a6:
+ * dist/ci/Dockerfile: add obs-service-set_version based on changes made for Factory.
+
+-------------------------------------------------------------------
+Wed Jul 19 22:20:35 UTC 2017 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20170719.00c88d1:
+ * ReviewBot: provide staging_api() from repo_checker.
+ * check_source: utilize project config to allow for remote entries.
++++ 10 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
++++ and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
Old:
----
openSUSE-release-tools-20170717.ce00330.obscpio
New:
----
openSUSE-release-tools-20170824.7bbd005.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.MObjr5/_old 2017-08-28 15:16:48.847686235 +0200
+++ /var/tmp/diff_new_pack.MObjr5/_new 2017-08-28 15:16:48.879681740 +0200
@@ -21,7 +21,7 @@
%define osc_plugin_dir %{_prefix}/lib/osc-plugins
%define announcer_filename factory-package-news
Name: openSUSE-release-tools
-Version: 20170717.ce00330
+Version: 20170824.7bbd005
Release: 0
Summary: Tools to aid in staging and release work for openSUSE/SUSE
License: GPL-2.0+ and MIT
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.MObjr5/_old 2017-08-28 15:16:49.207635657 +0200
+++ /var/tmp/diff_new_pack.MObjr5/_new 2017-08-28 15:16:49.207635657 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/openSUSE/osc-plugin-factory.git</param>
- <param name="changesrevision">8de99935bb9aec86d1bfda2164ff02fa3c2e020e</param>
+ <param name="changesrevision">7bbd005248f2304a87ab3742619289bf1fbc61d8</param>
</service>
</servicedata>
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.MObjr5/_old 2017-08-28 15:16:49.315620484 +0200
+++ /var/tmp/diff_new_pack.MObjr5/_new 2017-08-28 15:16:49.327618797 +0200
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20170717.ce00330
-mtime: 1500332033
-commit: ce00330f882acf47cf4030d68780b1c79225994d
+version: 20170824.7bbd005
+mtime: 1503573277
+commit: 7bbd005248f2304a87ab3742619289bf1fbc61d8
1
0
Hello community,
here is the log from the commit of package xtables-addons for openSUSE:Factory checked in at 2017-08-28 15:15:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xtables-addons (Old)
and /work/SRC/openSUSE:Factory/.xtables-addons.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xtables-addons"
Mon Aug 28 15:15:22 2017 rev:53 rq:518601 version:2.13
Changes:
--------
--- /work/SRC/openSUSE:Factory/xtables-addons/xtables-addons.changes 2017-01-11 12:05:41.540982496 +0100
+++ /work/SRC/openSUSE:Factory/.xtables-addons.new/xtables-addons.changes 2017-08-28 15:16:44.408310032 +0200
@@ -1,0 +2,14 @@
+Thu Aug 24 22:55:33 UTC 2017 - jengelh(a)inai.de
+
+- Bundle LICENSE file in BRPM
+
+-------------------------------------------------------------------
+Thu Jun 29 12:49:11 UTC 2017 - jengelh(a)inai.de
+
+- Update to new upstream release 2.13
+ * Support for Linux 4.12
+ * xt_condition: namespace support
+ * xt_geoip: check for allocation overflow
+ * xt_DNETMAP: fix a buffer overflow
+
+-------------------------------------------------------------------
Old:
----
xtables-addons-2.12.tar.asc
xtables-addons-2.12.tar.xz
New:
----
xtables-addons-2.13.tar.asc
xtables-addons-2.13.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xtables-addons.spec ++++++
--- /var/tmp/diff_new_pack.AkMnDR/_old 2017-08-28 15:16:45.892101538 +0200
+++ /var/tmp/diff_new_pack.AkMnDR/_new 2017-08-28 15:16:45.912098728 +0200
@@ -17,7 +17,7 @@
Name: xtables-addons
-Version: 2.12
+Version: 2.13
Release: 0
Summary: IP Packet Filter Administration Extensions
License: GPL-2.0 and GPL-2.0+
@@ -99,5 +99,6 @@
%_libdir/*.so.*
%xtlibdir/
%_libexecdir/xtables-addons/
+%doc LICENSE
%changelog
++++++ xtables-addons-2.12.tar.xz -> xtables-addons-2.13.tar.xz ++++++
++++ 22948 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package gpxsee for openSUSE:Factory checked in at 2017-08-28 15:15:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gpxsee (Old)
and /work/SRC/openSUSE:Factory/.gpxsee.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gpxsee"
Mon Aug 28 15:15:19 2017 rev:12 rq:518599 version:4.12
Changes:
--------
--- /work/SRC/openSUSE:Factory/gpxsee/gpxsee.changes 2017-08-18 15:04:06.640633292 +0200
+++ /work/SRC/openSUSE:Factory/.gpxsee.new/gpxsee.changes 2017-08-28 15:16:41.220757928 +0200
@@ -1,0 +2,9 @@
+Thu Aug 24 23:10:30 CEST 2017 - tumic(a)cbox.cz
+
+- Update to version 4.12
+ * Fixed broken LCC projection on southern hemisphere.
+ * Added support for France I-IV and VICGRID/VICGRID94 projections.
+ * Added map opacity (brightness) setting.
+ * Added 4UMaps to map sources.
+
+-------------------------------------------------------------------
Old:
----
GPXSee-4.11.tar.gz
New:
----
GPXSee-4.12.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gpxsee.spec ++++++
--- /var/tmp/diff_new_pack.pCicv2/_old 2017-08-28 15:16:42.776539319 +0200
+++ /var/tmp/diff_new_pack.pCicv2/_new 2017-08-28 15:16:42.788537633 +0200
@@ -19,7 +19,7 @@
# See also http://en.opensuse.org/openSUSE:Specfile_guidelines
Name: gpxsee
-Version: 4.11
+Version: 4.12
Release: 1
Summary: GPS log files visualizing and analyzing tool
License: GPL-3.0
++++++ GPXSee-4.11.tar.gz -> GPXSee-4.12.tar.gz ++++++
++++ 1855 lines of diff (skipped)
++++++ debian.changelog ++++++
--- /var/tmp/diff_new_pack.pCicv2/_old 2017-08-28 15:16:43.684411750 +0200
+++ /var/tmp/diff_new_pack.pCicv2/_new 2017-08-28 15:16:43.692410626 +0200
@@ -1,3 +1,12 @@
+gpxsee (4.12) stable; urgency=low
+
+ * Fixed broken LCC projection on southern hemisphere.
+ * Added support for France I-IV and VICGRID/VICGRID94 projections.
+ * Added map opacity (brightness) setting.
+ * Added 4UMaps to map sources.
+
+ -- Martin Tuma <tumic(a)cbox.cz> Thu, 24 Aug 2017 23:17:35 +0200
+
gpxsee (4.11) stable; urgency=low
* Fixed QT4 build.
++++++ gpxsee.dsc ++++++
--- /var/tmp/diff_new_pack.pCicv2/_old 2017-08-28 15:16:44.104352742 +0200
+++ /var/tmp/diff_new_pack.pCicv2/_new 2017-08-28 15:16:44.108352181 +0200
@@ -1,9 +1,9 @@
Format: 1.0
Source: gpxsee
-Version: 4.11
+Version: 4.12
Binary: gpxsee
Maintainer: Martin Tuma <tumic(a)cbox.cz>
Architecture: any
Build-Depends: debhelper (>= 9), qtbase5-dev, qtbase5-dev-tools, qt5-qmake, qttools5-dev-tools, libqt5opengl5-dev
Files:
- 00000000000000000000000000000000 0 GPXSee-4.11.tar.gz
+ 00000000000000000000000000000000 0 GPXSee-4.12.tar.gz
1
0
Hello community,
here is the log from the commit of package quiterss for openSUSE:Factory checked in at 2017-08-28 15:15:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/quiterss (Old)
and /work/SRC/openSUSE:Factory/.quiterss.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "quiterss"
Mon Aug 28 15:15:02 2017 rev:8 rq:518586 version:0.18.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/quiterss/quiterss.changes 2017-08-24 18:56:38.833529163 +0200
+++ /work/SRC/openSUSE:Factory/.quiterss.new/quiterss.changes 2017-08-28 15:16:35.597548066 +0200
@@ -1,0 +2,6 @@
+Thu Aug 24 18:58:53 UTC 2017 - aloisio(a)gmx.com
+
+- Update to version 0.18.8
+ * Fixed: "Show Unread" news filter was not working
+
+-------------------------------------------------------------------
Old:
----
QuiteRSS-0.18.7-src.tar.gz
New:
----
QuiteRSS-0.18.8-src.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ quiterss.spec ++++++
--- /var/tmp/diff_new_pack.hB9vqh/_old 2017-08-28 15:16:37.101336764 +0200
+++ /var/tmp/diff_new_pack.hB9vqh/_new 2017-08-28 15:16:37.101336764 +0200
@@ -17,7 +17,7 @@
Name: quiterss
-Version: 0.18.7
+Version: 0.18.8
Release: 0
Summary: RSS/Atom aggregator
License: GPL-3.0+
++++++ QuiteRSS-0.18.7-src.tar.gz -> QuiteRSS-0.18.8-src.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG new/CHANGELOG
--- old/CHANGELOG 2017-08-23 20:12:49.000000000 +0200
+++ new/CHANGELOG 2017-08-24 20:27:42.000000000 +0200
@@ -1,3 +1,6 @@
+Version 0.18.8 (24 Aug 2017)
+ * Fixed: "Show Unread" news filter was not working
+
Version 0.18.7 (23 Aug 2017)
* Added: Share. Reddit, Instapaper
* Changed: SQLite 3.20.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HISTORY_EN new/HISTORY_EN
--- old/HISTORY_EN 2017-08-23 20:12:49.000000000 +0200
+++ new/HISTORY_EN 2017-08-24 20:27:42.000000000 +0200
@@ -2,6 +2,11 @@
<STYLE>a { color: blue; text-decoration: none; }</STYLE>
<BODY>
<!---------------------------------------------------------------------------->
+<p><b>Version 0.18.8</b> (24 Aug 2017)
+<ul>
+<li>Fixed: "Show Unread" news filter was not working</li>
+</ul>
+<!---------------------------------------------------------------------------->
<p><b>Version 0.18.7</b> (23 Aug 2017)
<ul>
<li>Added: Share. Reddit, Instapaper</li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HISTORY_RU new/HISTORY_RU
--- old/HISTORY_RU 2017-08-23 20:12:49.000000000 +0200
+++ new/HISTORY_RU 2017-08-24 20:27:42.000000000 +0200
@@ -2,7 +2,12 @@
<STYLE>a { color: blue; text-decoration: none; }</STYLE>
<BODY>
<!---------------------------------------------------------------------------->
-<p><b>Версия 0.18.7</b> (23 август 2017)
+<p><b>Версия 0.18.8</b> (24 Авг 2017)
+<ul>
+<li>Исправлено: Не работал фильтр новостей "Показать непрочитанные"</li>
+</ul>
+<!---------------------------------------------------------------------------->
+<p><b>Версия 0.18.7</b> (23 Авг 2017)
<ul>
<li>Добавлено: Поделиться. Reddit, Instapaper</li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Info.plist new/Info.plist
--- old/Info.plist 2017-08-23 20:12:49.000000000 +0200
+++ new/Info.plist 2017-08-24 20:27:42.000000000 +0200
@@ -21,7 +21,7 @@
<key>CFBundleDisplayName</key>
<string>@EXECUTABLE@</string>
<key>CFBundleShortVersionString</key>
- <string>0.18.7</string>
+ <string>0.18.8</string>
<key>NSHumanReadableCopyright</key>
<string>(C) 2011-2017 QuiteRSS Team</string>
<key>NSPrincipalClass</key>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/src/VersionNo.h new/src/VersionNo.h
--- old/src/VersionNo.h 2017-08-23 20:12:49.000000000 +0200
+++ new/src/VersionNo.h 2017-08-24 20:27:42.000000000 +0200
@@ -1,9 +1,9 @@
#include "VersionRev.h"
-#define STRDATE "23.08.2017\0"
-#define STRPRODUCTVER "0.18.7\0"
+#define STRDATE "24.08.2017\0"
+#define STRPRODUCTVER "0.18.8\0"
-#define VERSION 0,18,7
+#define VERSION 0,18,8
#define PRODUCTVER VERSION,0
#define FILEVER VERSION,VCS_REVISION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/src/application/mainwindow.cpp new/src/application/mainwindow.cpp
--- old/src/application/mainwindow.cpp 2017-08-23 20:12:49.000000000 +0200
+++ new/src/application/mainwindow.cpp 2017-08-24 20:27:42.000000000 +0200
@@ -4474,8 +4474,7 @@
void MainWindow::setFeedRead(int type, int feedId, FeedReedType feedReadType,
NewsTabWidget *widgetTab, int idException)
{
- if ((type >= NewsTabWidget::TabTypeWeb) || (type == NewsTabWidget::TabTypeDel) ||
- (widgetTab == NULL))
+ if ((type >= NewsTabWidget::TabTypeWeb) || (type == NewsTabWidget::TabTypeDel))
return;
if ((type == NewsTabWidget::TabTypeFeed) && (feedReadType != FeedReadSwitchingTab)) {
@@ -4489,7 +4488,7 @@
} else {
mainApp->updateFeeds()->updateObject_->slotSetFeedRead(feedReadType, feedId, idException, idNewsList);
}
- } else {
+ } else if (widgetTab) {
int cnt = widgetTab->newsModel_->rowCount();
if (cnt == 0) return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/src/optionsdialog.cpp new/src/optionsdialog.cpp
--- old/src/optionsdialog.cpp 2017-08-23 20:12:49.000000000 +0200
+++ new/src/optionsdialog.cpp 2017-08-24 20:27:42.000000000 +0200
@@ -1390,7 +1390,7 @@
treeItem.clear();
treeItem << "fa" << QString::fromUtf8("فارسی [FA]")
- << "0.18.7"
+ << "0.18.8"
<< "H.Mohamadi" << "";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_FA"));
@@ -1406,7 +1406,7 @@
treeItem.clear();
treeItem << "fr" << QString::fromUtf8("Français [FR]")
- << "0.18.7"
+ << "0.18.8"
<< "Glad Deschrijver" << "glad.deschrijver(a)gmail.com";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_FR"));
@@ -1438,7 +1438,7 @@
treeItem.clear();
treeItem << "it" << QString::fromUtf8("Italiano [IT]")
- << "0.18.7"
+ << "0.18.8"
<< "ZeroWis" << "lightflash(a)hotmail.it";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_IT"));
@@ -1470,7 +1470,7 @@
treeItem.clear();
treeItem << "nl" << QString::fromUtf8("Nederlands [NL]")
- << "0.18.7"
+ << "0.18.8"
<< "TeLLie" << "elbert.pol(a)gmail.com";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_NL"));
@@ -1478,7 +1478,7 @@
treeItem.clear();
treeItem << "pl" << QString::fromUtf8("Polski [PL]")
- << "0.18.7"
+ << "0.18.8"
<< QString::fromUtf8("Piotr Pecka") << "piotr.pecka(a)outlook.com";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_PL"));
@@ -1486,7 +1486,7 @@
treeItem.clear();
treeItem << "pt_BR" << QString::fromUtf8("Português (Brazil) [pt_BR]")
- << "0.18.7"
+ << "0.18.8"
<< QString::fromUtf8("Marcos M. Ribeiro") << "";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_BR"));
@@ -1502,7 +1502,7 @@
treeItem.clear();
treeItem << "ro_RO" << QString::fromUtf8("Limba română [ro_RO]")
- << "0.18.7"
+ << "0.18.8"
<< QString::fromUtf8("Jaff (Oprea Nicolae)") << "Jaff2002(a)yahoo.com";
languageItem = new QTreeWidgetItem(treeItem);
languageItem->setIcon(1, QIcon(":/flags/flag_RO"));
1
0
Hello community,
here is the log from the commit of package mpc-qt for openSUSE:Factory checked in at 2017-08-28 15:15:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mpc-qt (Old)
and /work/SRC/openSUSE:Factory/.mpc-qt.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mpc-qt"
Mon Aug 28 15:15:00 2017 rev:2 rq:518580 version:17.08
Changes:
--------
--- /work/SRC/openSUSE:Factory/mpc-qt/mpc-qt.changes 2017-08-24 18:33:15.679149273 +0200
+++ /work/SRC/openSUSE:Factory/.mpc-qt.new/mpc-qt.changes 2017-08-28 15:16:32.306010572 +0200
@@ -1,0 +2,5 @@
+Sun Aug 13 07:35:24 UTC 2017 - aloisio(a)gmx.com
+
+- Update to release 17.08
+
+-------------------------------------------------------------------
Old:
----
mpc-qt-17.07.tar.gz
New:
----
mpc-qt-17.08.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mpc-qt.spec ++++++
--- /var/tmp/diff_new_pack.iTVJkz/_old 2017-08-28 15:16:33.721811633 +0200
+++ /var/tmp/diff_new_pack.iTVJkz/_new 2017-08-28 15:16:33.757806576 +0200
@@ -19,7 +19,7 @@
# See also http://en.opensuse.org/openSUSE:Specfile_guidelines
Name: mpc-qt
-Version: 17.07
+Version: 17.08
Release: 0
Summary: Media Player Classic Qute Theater
License: GPL-2.0
++++++ mpc-qt-17.07.tar.gz -> mpc-qt-17.08.tar.gz ++++++
++++ 3202 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package libsoup for openSUSE:Factory checked in at 2017-08-28 15:14:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libsoup (Old)
and /work/SRC/openSUSE:Factory/.libsoup.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libsoup"
Mon Aug 28 15:14:58 2017 rev:98 rq:518575 version:2.58.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libsoup/libsoup.changes 2017-08-18 15:00:17.568880898 +0200
+++ /work/SRC/openSUSE:Factory/.libsoup.new/libsoup.changes 2017-08-28 15:16:29.286434862 +0200
@@ -4 +4 @@
-- Update to version 2.58.2 (CVE-2017-2885):
+- Update to version 2.58.2 (CVE-2017-2885, boo#1052916):
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
1
0