summaryrefslogtreecommitdiff
path: root/dev-python/semver/files/2.10.1-getitem.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/semver/files/2.10.1-getitem.patch')
-rw-r--r--dev-python/semver/files/2.10.1-getitem.patch147
1 files changed, 147 insertions, 0 deletions
diff --git a/dev-python/semver/files/2.10.1-getitem.patch b/dev-python/semver/files/2.10.1-getitem.patch
new file mode 100644
index 000000000000..1a86ad0449d1
--- /dev/null
+++ b/dev-python/semver/files/2.10.1-getitem.patch
@@ -0,0 +1,147 @@
+From f332326e54a5582092b50c8fa113d11bbdf1a9e6 Mon Sep 17 00:00:00 2001
+From: Thomas Laferriere <t.laferriere@hotmail.ca>
+Date: Wed, 10 Jun 2020 01:44:11 -0400
+Subject: [PATCH] Fix #260 __getitem__ returning `None` on falsy parts
+
+* Fix #260 and add tests for these special cases
+* Fix IndexError not being thrown every time it should
+* Update CHANGELOG.rst
+
+Co-authored-by: Tom Schraitle <tomschr@users.noreply.github.com>
+---
+ CHANGELOG.rst | 28 ++++++++++++++++++++++++++++
+ semver.py | 9 ++++-----
+ test_semver.py | 35 ++++++++++++++++++++++++++++-------
+ 3 files changed, 60 insertions(+), 12 deletions(-)
+
+diff --git a/CHANGELOG.rst b/CHANGELOG.rst
+index c28880e..2671ef2 100644
+--- a/CHANGELOG.rst
++++ b/CHANGELOG.rst
+@@ -7,6 +7,34 @@ All notable changes to this code base will be documented in this file,
+ in every released version.
+
+
++Version 2.10.2 (WIP)
++====================
++
++:Released: 2020-xx-yy
++:Maintainer:
++
++Features
++--------
++
++n/a
++
++Bug Fixes
++---------
++
++:gh:`260` (:pr:`261`): Fixed ``__getitem__`` returning None on wrong parts
++
++
++Additions
++---------
++
++n/a
++
++Removals
++--------
++
++n/a
++
++
+ Version 2.10.1
+ ==============
+
+diff --git a/semver.py b/semver.py
+index 00338e8..0c98af9 100644
+--- a/semver.py
++++ b/semver.py
+@@ -548,17 +548,16 @@ def __getitem__(self, index):
+
+ if (
+ isinstance(index, slice)
+- and (index.start is None or index.start < 0)
+- and (index.stop is None or index.stop < 0)
++ and (index.start is not None and index.start < 0)
++ or (index.stop is not None and index.stop < 0)
+ ):
+ raise IndexError("Version index cannot be negative")
+
+- # Could raise IndexError:
+- part = tuple(filter(None, self.to_tuple()[index]))
++ part = tuple(filter(lambda p: p is not None, self.to_tuple()[index]))
+
+ if len(part) == 1:
+ part = part[0]
+- if not part:
++ elif not part:
+ raise IndexError("Version part undefined")
+ return part
+
+diff --git a/test_semver.py b/test_semver.py
+index 8ecc81f..1fd87ee 100644
+--- a/test_semver.py
++++ b/test_semver.py
+@@ -774,6 +774,8 @@ def test_should_be_able_to_use_integers_as_prerelease_build():
+ ("1.2.3", 0, 1),
+ ("1.2.3", 1, 2),
+ ("1.2.3", 2, 3),
++ # Special cases
++ ("1.0.2", 1, 0),
+ ],
+ )
+ def test_version_info_should_be_accessed_with_index(version, index, expected):
+@@ -801,6 +803,7 @@ def test_version_info_should_be_accessed_with_index(version, index, expected):
+ ("1.2.3-rc.0+build.0", slice(0, 5, 2), (1, 3, "build.0")),
+ ("1.2.3-rc.0+build.0", slice(None, 5, 2), (1, 3, "build.0")),
+ ("1.2.3-rc.0+build.0", slice(5, 0, -2), ("build.0", 3)),
++ ("1.2.0-rc.0+build.0", slice(3), (1, 2, 0)),
+ ],
+ )
+ def test_version_info_should_be_accessed_with_slice_object(
+@@ -813,19 +816,37 @@ def test_version_info_should_be_accessed_with_slice_object(
+ @pytest.mark.parametrize(
+ "version, index",
+ [
+- ("1.2.3-rc.0+build.0", -1),
+- ("1.2.3-rc.0", -1),
+- ("1.2.3-rc.0", 4),
+- ("1.2.3", -1),
+ ("1.2.3", 3),
++ ("1.2.3", slice(3, 4)),
+ ("1.2.3", 4),
+- ("1.2.3", 10),
+- ("1.2.3", slice(-3)),
++ ("1.2.3", slice(4, 5)),
++ ("1.2.3", 5),
++ ("1.2.3", slice(5, 6)),
++ ("1.2.3-rc.0", 5),
++ ("1.2.3-rc.0", slice(5, 6)),
++ ("1.2.3-rc.0", 6),
++ ("1.2.3-rc.0", slice(6, 7)),
+ ],
+ )
+ def test_version_info_should_throw_index_error(version, index):
+ version_info = VersionInfo.parse(version)
+- with pytest.raises(IndexError):
++ with pytest.raises(IndexError, match=r"Version part undefined"):
++ version_info[index]
++
++
++@pytest.mark.parametrize(
++ "version, index",
++ [
++ ("1.2.3", -1),
++ ("1.2.3", -2),
++ ("1.2.3", slice(-2, 2)),
++ ("1.2.3", slice(2, -2)),
++ ("1.2.3", slice(-2, -2)),
++ ],
++)
++def test_version_info_should_throw_index_error_when_negative_index(version, index):
++ version_info = VersionInfo.parse(version)
++ with pytest.raises(IndexError, match=r"Version index cannot be negative"):
+ version_info[index]
+
+