Hello community,

here is the log from the commit of package python-persistent for 
openSUSE:Factory checked in at 2015-05-11 19:39:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-persistent (Old)
 and      /work/SRC/openSUSE:Factory/.python-persistent.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-persistent"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-persistent/python-persistent.changes      
2014-03-25 13:27:08.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-persistent.new/python-persistent.changes 
2015-05-11 19:49:25.000000000 +0200
@@ -1,0 +2,40 @@
+Sun May 10 19:46:51 UTC 2015 - benoit.mo...@gmx.fr
+
+- update to version 4.0.9:
+  * Make the C and Python TimeStamp objects behave more alike
+  * Intern keys of object state in __setstate__ to reduce memory
+    usage when unpickling multiple objects with the same attributes
+  * Add support for PyPy3
+  * 100% branch coverage
+- additional changes from version 4.0.8:
+  * Add support for Python 3.4
+  * In pure-Python Persistent, avoid loading state in _p_activate
+    for non-ghost objects (which could corrupt their state). (PR #9)
+  * In pure-Python, and don’t throw POSKeyError if _p_activate is
+    called on an object that has never been committed. (PR #9)
+  * In pure-Python Persistent, avoid calling a subclass’s
+    __setattr__ at instance creation time. (PR #8)
+  * Make it possible to delete _p_jar / _p_oid of a pure-Python
+    Persistent object which has been removed from the jar’s cache
+    (fixes aborting a ZODB Connection that has added objects).
+    (PR #7)
+- additional changes from version 4.0.7:
+  * Avoid a KeyError from _p_accessed() on newly-created objects
+    under pure-Python: these objects may be assigned to a jar, but
+    not yet added to its cache. (PR #6)
+  * Avoid a failure in Persistent.__setstate__ when the state dict
+    contains exactly two keys. (PR #5)
+  * Fix a hang in picklecache invalidation if OIDs are manually
+    passed out-of-order. (PR #4)
+  * Add PURE_PYTHON environment variable support: if set, the C
+    extensions will not be built, imported, or tested
+- update project URL
+- point the source URL to pypi
+- drop type-mismatch.patch: fixed upstream
+- add fix_32-bit_timestamp_hashcode.patch: fix timestamp hash
+  computation on 32 bit platform
+- pass -q to test to avoid spamming the build log
+- rename CHANGES.txt and README.txt to CHANGES.rst and README.rst:
+  changed upstream
+
+-------------------------------------------------------------------

Old:
----
  persistent-4.0.6.tar.gz
  type-mismatch.patch

New:
----
  fix_32-bit_timestamp_hashcode.patch
  persistent-4.0.9.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-persistent.spec ++++++
--- /var/tmp/diff_new_pack.AdgaM2/_old  2015-05-11 19:49:27.000000000 +0200
+++ /var/tmp/diff_new_pack.AdgaM2/_new  2015-05-11 19:49:27.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-persistent
 #
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 # Copyright (c) 2013 LISA GmbH, Bingen, Germany.
 #
 # All modifications and additions to the file contributed by third parties
@@ -18,15 +18,15 @@
 
 
 Name:           python-persistent
-Version:        4.0.6
+Version:        4.0.9
 Release:        0
-Url:            http://www.python.org/pypi/persistent
+Url:            https://github.com/zopefoundation/persistent
 Summary:        Translucent persistent objects
 License:        ZPL-2.1
 Group:          Development/Languages/Python
-Source:         persistent-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM 
https://github.com/zopefoundation/persistent/commit/33daf91246f85c3248658c4d81d768bd78617003
-Patch:          type-mismatch.patch
+Source:         
https://pypi.python.org/packages/source/p/persistent/persistent-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM fix_32-bit_timestamp_hashcode.patch -- fix timestamp hash 
computation on 32-bit platform
+Patch:          fix_32-bit_timestamp_hashcode.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  python-devel
 BuildRequires:  python-setuptools
@@ -75,11 +75,11 @@
 rm %{buildroot}%python_sitearch/persistent/*.c
 
 %check
-python setup.py test
+python setup.py -q test
 
 %files
 %defattr(-,root,root,-)
-%doc CHANGES.txt COPYRIGHT.txt LICENSE.txt README.txt
+%doc CHANGES.rst COPYRIGHT.txt LICENSE.txt README.rst
 %exclude %python_sitearch/persistent/*.h
 %python_sitearch/*
 

++++++ fix_32-bit_timestamp_hashcode.patch ++++++
fix timestamp hash computation on 32-bit platform.
Patch extracted from PR #22 and #23, see:
https://github.com/zopefoundation/persistent/issues/21
https://github.com/zopefoundation/persistent/pull/22
https://github.com/zopefoundation/persistent/pull/23

---
 persistent/tests/test_timestamp.py |   64 +++++++++++++++++++++++++++++++++----
 persistent/timestamp.py            |    4 +-
 2 files changed, 60 insertions(+), 8 deletions(-)

Index: persistent-4.0.9/persistent/tests/test_timestamp.py
===================================================================
--- persistent-4.0.9.orig/persistent/tests/test_timestamp.py
+++ persistent-4.0.9/persistent/tests/test_timestamp.py
@@ -253,9 +253,45 @@ class PyAndCComparisonTests(unittest.Tes
         c, py = self._make_C_and_Py(*self.now_ts_args)
         self.assertEqual(hash(c), hash(py))
 
+    def test_py_hash_32_64_bit(self):
+        # We happen to know that on a 32-bit platform, the hashcode
+        # of the c version should be exactly
+        # -1419374591
+        # and the 64-bit should be exactly:
+        # -3850693964765720575
+        # Fake out the python version to think it's on a 32-bit
+        # platform and test the same; also verify 64 bit
+        bit_32_hash = -1419374591
+        bit_64_hash = -3850693964765720575
+        import persistent.timestamp
+        import ctypes
+        orig_c_long = persistent.timestamp.c_long
+        try:
+            persistent.timestamp.c_long = ctypes.c_int32
+            py = self._makePy(*self.now_ts_args)
+            self.assertEqual(hash(py), bit_32_hash)
+
+            persistent.timestamp.c_long = ctypes.c_int64
+            # call __hash__ directly to avoid interpreter truncation
+            # in hash() on 32-bit platforms
+            self.assertEqual(py.__hash__(), bit_64_hash)
+        finally:
+            persistent.timestamp.c_long = orig_c_long
+
+        if orig_c_long is ctypes.c_int32:
+            self.assertEqual(py.__hash__(), bit_32_hash)
+        elif orig_c_long is ctypes.c_int64:
+            self.assertEqual(py.__hash__(), bit_64_hash)
+        else:
+            self.fail("Unknown bitness")
+
     def test_hash_equal_constants(self):
         # The simple constants make it easier to diagnose
         # a difference in algorithms
+        import persistent.timestamp
+        import ctypes
+        is_32_bit = persistent.timestamp.c_long == ctypes.c_int32
+
         c, py = self._make_C_and_Py(b'\x00\x00\x00\x00\x00\x00\x00\x00')
         self.assertEqual(hash(c), 8)
         self.assertEqual(hash(c), hash(py))
@@ -268,25 +304,41 @@ class PyAndCComparisonTests(unittest.Tes
         self.assertEqual(hash(c), 1000011)
         self.assertEqual(hash(c), hash(py))
 
+        # overflow kicks in here on 32-bit platforms
         c, py = self._make_C_and_Py(b'\x00\x00\x00\x00\x00\x01\x00\x00')
-        self.assertEqual(hash(c), 1000006000001)
+        if is_32_bit:
+            self.assertEqual(hash(c), -721379967)
+        else:
+            self.assertEqual(hash(c), 1000006000001)
         self.assertEqual(hash(c), hash(py))
 
         c, py = self._make_C_and_Py(b'\x00\x00\x00\x00\x01\x00\x00\x00')
-        self.assertEqual(hash(c), 1000009000027000019)
+        if is_32_bit:
+            self.assertEqual(hash(c), 583896275)
+        else:
+            self.assertEqual(hash(c), 1000009000027000019)
         self.assertEqual(hash(c), hash(py))
 
-        # Overflow kicks in at this point
+        # Overflow kicks in at this point on 64-bit platforms
         c, py = self._make_C_and_Py(b'\x00\x00\x00\x01\x00\x00\x00\x00')
-        self.assertEqual(hash(c), -4442925868394654887)
+        if is_32_bit:
+            self.assertEqual(hash(c), 1525764953)
+        else:
+            self.assertEqual(hash(c), -4442925868394654887)
         self.assertEqual(hash(c), hash(py))
 
         c, py = self._make_C_and_Py(b'\x00\x00\x01\x00\x00\x00\x00\x00')
-        self.assertEqual(hash(c), -3993531167153147845)
+        if is_32_bit:
+            self.assertEqual(hash(c), -429739973)
+        else:
+            self.assertEqual(hash(c), -3993531167153147845)
         self.assertEqual(hash(c), hash(py))
 
         c, py = self._make_C_and_Py(b'\x01\x00\x00\x00\x00\x00\x00\x00')
-        self.assertEqual(hash(c), -3099646879006235965)
+        if is_32_bit:
+            self.assertEqual(hash(c), 263152323)
+        else:
+            self.assertEqual(hash(c), -3099646879006235965)
         self.assertEqual(hash(c), hash(py))
 
     def test_ordering(self):
Index: persistent-4.0.9/persistent/timestamp.py
===================================================================
--- persistent-4.0.9.orig/persistent/timestamp.py
+++ persistent-4.0.9/persistent/timestamp.py
@@ -13,7 +13,7 @@
 ##############################################################################
 __all__ = ('TimeStamp',)
 
-from ctypes import c_int64
+from ctypes import c_long
 import datetime
 import math
 import struct
@@ -158,7 +158,7 @@ class pyTimeStamp(object):
 
         # Make sure to overflow and wraparound just
         # like the C code does.
-        x = c_int64(x).value
+        x = c_long(x).value
         if x == -1: #pragma: no cover
             # The C version has this condition, but it's not clear
             # why; it's also not immediately obvious what bytestring
++++++ persistent-4.0.6.tar.gz -> persistent-4.0.9.tar.gz ++++++
++++ 23346 lines of diff (skipped)


Reply via email to