- Update to 1.6.3:

- :support:`87 backported` (via :issue:`88`) Our upper Sphinx version limit was
    mostly defensive and at this point is just too old to even build on
    ReadTheDocs successfully. Removed it for the time being. Thanks to José
    Sánchez-Gallego for the nudge and the patch.
  - :support:`84 backported` Pin us to ``semantic-version<2.7`` as they changed
    their APIs (...) in that version in a way that breaks us. We do not need
    anything they've added recently, so the conservative response is to just pin
    until we truly need to upgrade. Thanks to everyone who reported and submitted
    workarounds for this.
- Drop merged patch semanticversioning.patch

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-releases?expand=0&rev=12
This commit is contained in:
Tomáš Chvátal 2020-03-18 09:11:16 +00:00 committed by Git OBS Bridge
parent d2dc214afb
commit ceaee2d67b
5 changed files with 20 additions and 151 deletions

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Wed Mar 18 09:08:49 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
- Update to 1.6.3:
- :support:`87 backported` (via :issue:`88`) Our upper Sphinx version limit was
mostly defensive and at this point is just too old to even build on
ReadTheDocs successfully. Removed it for the time being. Thanks to José
Sánchez-Gallego for the nudge and the patch.
- :support:`84 backported` Pin us to ``semantic-version<2.7`` as they changed
their APIs (...) in that version in a way that breaks us. We do not need
anything they've added recently, so the conservative response is to just pin
until we truly need to upgrade. Thanks to everyone who reported and submitted
workarounds for this.
- Drop merged patch semanticversioning.patch
-------------------------------------------------------------------
Tue Sep 17 10:11:28 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>

View File

@ -1,7 +1,7 @@
#
# spec file for package python
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -26,14 +26,12 @@
%bcond_with test
%endif
Name: python-releases%{psuffix}
Version: 1.6.1
Version: 1.6.3
Release: 0
Summary: A Sphinx extension for changelog manipulation
License: BSD-2-Clause
Group: Development/Languages/Python
URL: https://github.com/bitprophet/releases
Source: https://files.pythonhosted.org/packages/source/r/releases/releases-%{version}.tar.gz
Patch0: semanticversioning.patch
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
@ -71,7 +69,6 @@ Specifically:
%prep
%setup -q -n releases-%{version}
%patch0 -p1
%build
%python_build

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7a1b3163ab062d41dc4e61d8f51df055756d146f1fb6e18ee5cf55d91c9cda54
size 42029

3
releases-1.6.3.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:555ae4c97a671a420281c1c782e9236be25157b449fdf20b4c4b293fe93db2f1
size 40510

View File

@ -1,143 +0,0 @@
From 8787236dffb7383427b3e1448ece9a5b3eaf5257 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Barrois?= <raphael.barrois@polytechnique.org>
Date: Sun, 8 Sep 2019 00:18:00 +0200
Subject: [PATCH] Fix usage of semanticversion to intended API.
The recent versions of python-semanticversion made changes to private
APIs, removing the interaction between `Version(x, partial=True)` and
`Spec()` (`partial=True` was designed for implementing the `Spec` class
only)
The code used these classes to exclude ranges of version whose major
component didn't match a bugfix/issue range; the code went akin to:
Version('1', partial=True) in Spec('>=1.0')
This no longer works; this patch changes that behaviour to exclude
families where no actual release matches the bugfix/issue range - this
should be more accurate.
The patch also uses `Version.coerce`, the intended API to manage
non semver-compliant version strings.
The patch has been tested with both python-semanticversion==2.6.0 and
python-semanticversion==2.8.1; it can be included to an upgraded version
of `releases` even if users haven't yet upgraded python-semanticversion.
---
releases/__init__.py | 2 +-
releases/models.py | 54 ++++++++++++++++++++++++--------------------
2 files changed, 30 insertions(+), 26 deletions(-)
diff --git a/releases/__init__.py b/releases/__init__.py
index 3c73f0b..48fc5f5 100644
--- a/releases/__init__.py
+++ b/releases/__init__.py
@@ -426,7 +426,7 @@ def handle_upcoming_major_release(entries, manager):
# to the line manager!
for obj in next_releases:
# TODO: update when Release gets tied closer w/ Version
- version = Version(obj.number)
+ version = Version.coerce(obj.number)
if version.minor == 0 and version.patch == 0:
manager.add_family(obj.family)
diff --git a/releases/models.py b/releases/models.py
index d980e9c..0517174 100644
--- a/releases/models.py
+++ b/releases/models.py
@@ -2,18 +2,10 @@
from operator import xor
from docutils import nodes
-from semantic_version import Version as StrictVersion, Spec
+from semantic_version import Version, Spec
import six
-class Version(StrictVersion):
- """
- Version subclass toggling ``partial=True`` by default.
- """
- def __init__(self, version_string, partial=True):
- super(Version, self).__init__(version_string, partial)
-
-
# Issue type list (keys) + color values
ISSUE_TYPES = {
'bug': 'A04040',
@@ -122,7 +114,7 @@ def default_spec(self, manager):
buckets = self.minor_releases(manager)
if buckets:
specstr = ">={}".format(max(buckets))
- return Spec(specstr) if specstr else Spec()
+ return Spec(specstr) if specstr else Spec('*')
def add_to_manager(self, manager):
"""
@@ -130,32 +122,43 @@ def add_to_manager(self, manager):
"""
# Derive version spec allowing us to filter against major/minor buckets
spec = self.spec or self.default_spec(manager)
- # Only look in appropriate major version/family; if self is an issue
- # declared as living in e.g. >=2, this means we don't even bother
- # looking in the 1.x family.
- families = [Version(str(x)) for x in manager]
- versions = list(spec.filter(families))
- for version in versions:
- family = version.major
- # Within each family, we further limit which bugfix lines match up
- # to what self cares about (ignoring 'unreleased' until later)
- candidates = [
- Version(x)
+
+ # Browse through families, adding us to every line we match.
+ for family in manager:
+ # Map changelog keys to Version objects, keeping a link
+ # to the original text
+ versions = {
+ Version.coerce(x): x
for x in manager[family]
if not x.startswith('unreleased')
- ]
- # Select matching release lines (& stringify)
+ }
+
+ # Bail out if no listed version (included pending feature/bugfix)
+ # match self.spec: if self is an issue for >=2, don't look
+ # at the 1.x family. If self is an issue for >=1.0, include it
+ # in the 1.x family even if no 1.0 release exists yet.
+ candidates = list(spec.filter(versions))
+ # Also compare the first release in the family, for cases
+ # where no release has been performed yet.
+ if not candidates and Version.coerce(str(family)) not in spec:
+ continue
+
+ # `buckets` has the list of line families
buckets = []
- bugfix_buckets = [str(x) for x in spec.filter(candidates)]
+ bugfix_buckets = candidates
# Add back in unreleased_* as appropriate
# TODO: probably leverage Issue subclasses for this eventually?
if self.is_buglike:
- buckets.extend(bugfix_buckets)
+ # Convert back Version() to line
+ buckets.extend([
+ versions[bucket] for bucket in bugfix_buckets
+ ])
# Don't put into JUST unreleased_bugfix; it implies that this
# major release/family hasn't actually seen any releases yet
# and only exists for features to go into.
if bugfix_buckets:
buckets.append('unreleased_bugfix')
+
# Obtain list of minor releases to check for "haven't had ANY
# releases yet" corner case, in which case ALL issues get thrown in
# unreleased_feature for the first release to consume.
@@ -164,6 +167,7 @@ def add_to_manager(self, manager):
no_releases = not self.minor_releases(manager)
if self.is_featurelike or self.backported or no_releases:
buckets.append('unreleased_feature')
+
# Now that we know which buckets are appropriate, add ourself to
# all of them. TODO: or just...do it above...instead...
for bucket in buckets: