From f0ce8c541f241d2f6f808b37b6068975d5dc7a48 Mon Sep 17 00:00:00 2001 From: Steven Brudenell Date: Wed, 14 Oct 2020 16:32:49 -0800 Subject: [PATCH 1/3] Ensure equal versions have equal hashes --- docs/usage.rst | 24 ++++++++++++++++++++++++ semver.py | 2 +- test_semver.py | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/docs/usage.rst b/docs/usage.rst index 2f23e571..66ca4397 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -452,6 +452,30 @@ functions that leverage this capability; builtins including, but not limited to: (for examples, see :ref:`sec_max_min`) and :func:`sorted`. +Version Equality +---------------- + +Note that when comparing two versions, the ``build`` part is ignored:: + + >>> v = semver.VersionInfo.parse("1.2.3-rc4+1e4664d") + >>> v == "1.2.3-rc4+dedbeef" + True + +This also applies when a :class:`semver.VersionInfo` is a member of a set, or a +dictionary key:: + + >>> d = {} + >>> v1 = semver.VersionInfo.parse("1.2.3-rc4+1e4664d") + >>> v2 = semver.VersionInfo.parse("1.2.3-rc4+dedbeef") + >>> d[v1] = 1 + >>> d[v2] + 1 + >>> s = set() + >>> s.add(v1) + >>> v2 in s + True + + Comparing Versions through an Expression ---------------------------------------- diff --git a/semver.py b/semver.py index 85811fec..a435442a 100644 --- a/semver.py +++ b/semver.py @@ -575,7 +575,7 @@ def __str__(self): return version def __hash__(self): - return hash(self.to_tuple()) + return hash(self.to_tuple()[:4]) def finalize_version(self): """ diff --git a/test_semver.py b/test_semver.py index b23576d5..168955d6 100644 --- a/test_semver.py +++ b/test_semver.py @@ -679,6 +679,20 @@ def test_parse_version_info_str_hash(): d[v] = "" # to ensure that VersionInfo are hashable +def test_equal_versions_have_equal_hashes(): + v1 = parse_version_info("1.2.3-alpha.1.2+build.11.e0f985a") + v2 = parse_version_info("1.2.3-alpha.1.2+build.22.a589f0e") + assert v1 == v2 + assert hash(v1) == hash(v2) + d = {} + d[v1] = 1 + d[v2] = 2 + assert d[v1] == 2 + s = set() + s.add(v1) + assert v2 in s + + def test_parse_method_for_version_info(): s_version = "1.2.3-alpha.1.2+build.11.e0f985a" v = VersionInfo.parse(s_version) From 3b2c27d14e79a215a5cbf2f030b09af1ad09680b Mon Sep 17 00:00:00 2001 From: Tom Schraitle Date: Tue, 20 Oct 2020 17:36:12 +0200 Subject: [PATCH 2/3] Apply suggestions from code review Add suggestions to docs/usage.rst --- docs/usage.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/usage.rst b/docs/usage.rst index 66ca4397..6280702c 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -452,10 +452,12 @@ functions that leverage this capability; builtins including, but not limited to: (for examples, see :ref:`sec_max_min`) and :func:`sorted`. -Version Equality +Determining Version Equality ---------------- -Note that when comparing two versions, the ``build`` part is ignored:: +Version equality means for semver, that major, minor, patch, and prerelease +parts are equal in both versions you compare. The build part is ignored. +For example:: >>> v = semver.VersionInfo.parse("1.2.3-rc4+1e4664d") >>> v == "1.2.3-rc4+dedbeef" From d02ce168d70921a96424a0c15fef6530fdb55874 Mon Sep 17 00:00:00 2001 From: Tom Schraitle Date: Tue, 20 Oct 2020 17:49:05 +0200 Subject: [PATCH 3/3] Doc: Fix underline in header --- docs/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.rst b/docs/usage.rst index 6280702c..2f2eb33a 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -453,7 +453,7 @@ functions that leverage this capability; builtins including, but not limited to: Determining Version Equality ----------------- +---------------------------- Version equality means for semver, that major, minor, patch, and prerelease parts are equal in both versions you compare. The build part is ignored. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy