[Pytest-commit] commit/pytest: 2 new changesets

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Thu Apr 3 09:47:45 CEST 2014


2 new commits in pytest:

https://bitbucket.org/hpk42/pytest/commits/c46eb47ecff4/
Changeset:   c46eb47ecff4
Branch:      break_ExceptionInfo_reference_cycles
User:        jurko
Date:        2014-04-02 15:34:36
Summary:     break reference cycles caused by storing local reference to exception info

Such reference cycles unnecessarily cause Python interpreter not to garbage
collect the objects referenced in those cycles as soon they could be collected,
and in turn cause the tests to use more memory than is strictly necessary.
Affected #:  3 files

diff -r e3309a39fb919391d0e9d9cb0e7fc7e75b7162e7 -r c46eb47ecff4289ac318426f871a20f1aa7d2467 _pytest/assertion/util.py
--- a/_pytest/assertion/util.py
+++ b/_pytest/assertion/util.py
@@ -149,11 +149,10 @@
             if istext(left) and istext(right):
                 explanation = _notin_text(left, right, verbose)
     except Exception:
-        excinfo = py.code.ExceptionInfo()
         explanation = [
             u('(pytest_assertion plugin: representation of details failed.  '
               'Probably an object has a faulty __repr__.)'),
-            u(excinfo)]
+            u(py.code.ExceptionInfo())]
 
     if not explanation:
         return None

diff -r e3309a39fb919391d0e9d9cb0e7fc7e75b7162e7 -r c46eb47ecff4289ac318426f871a20f1aa7d2467 _pytest/main.py
--- a/_pytest/main.py
+++ b/_pytest/main.py
@@ -98,6 +98,7 @@
             if session._testsfailed:
                 session.exitstatus = EXIT_TESTSFAILED
     finally:
+        excinfo = None  # Explicitly break reference cycle.
         session.startdir.chdir()
         if initstate >= 2:
             config.hook.pytest_sessionfinish(

diff -r e3309a39fb919391d0e9d9cb0e7fc7e75b7162e7 -r c46eb47ecff4289ac318426f871a20f1aa7d2467 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -456,8 +456,8 @@
         try:
             mod = self.fspath.pyimport(ensuresyspath=True)
         except SyntaxError:
-            excinfo = py.code.ExceptionInfo()
-            raise self.CollectError(excinfo.getrepr(style="short"))
+            raise self.CollectError(
+                py.code.ExceptionInfo().getrepr(style="short"))
         except self.fspath.ImportMismatchError:
             e = sys.exc_info()[1]
             raise self.CollectError(


https://bitbucket.org/hpk42/pytest/commits/e3398dc8d7cc/
Changeset:   e3398dc8d7cc
User:        hpk42
Date:        2014-04-03 09:47:41
Summary:     Merged in jurko/pytest/break_ExceptionInfo_reference_cycles (pull request #144)

break reference cycles caused by storing local reference to exception info
Affected #:  3 files

diff -r dd7b468026d15a577d2d1f272257e86b2855eb83 -r e3398dc8d7cc36221657d3d4b417231f60a019a6 _pytest/assertion/util.py
--- a/_pytest/assertion/util.py
+++ b/_pytest/assertion/util.py
@@ -149,11 +149,10 @@
             if istext(left) and istext(right):
                 explanation = _notin_text(left, right, verbose)
     except Exception:
-        excinfo = py.code.ExceptionInfo()
         explanation = [
             u('(pytest_assertion plugin: representation of details failed.  '
               'Probably an object has a faulty __repr__.)'),
-            u(excinfo)]
+            u(py.code.ExceptionInfo())]
 
     if not explanation:
         return None

diff -r dd7b468026d15a577d2d1f272257e86b2855eb83 -r e3398dc8d7cc36221657d3d4b417231f60a019a6 _pytest/main.py
--- a/_pytest/main.py
+++ b/_pytest/main.py
@@ -98,6 +98,7 @@
             if session._testsfailed:
                 session.exitstatus = EXIT_TESTSFAILED
     finally:
+        excinfo = None  # Explicitly break reference cycle.
         session.startdir.chdir()
         if initstate >= 2:
             config.hook.pytest_sessionfinish(

diff -r dd7b468026d15a577d2d1f272257e86b2855eb83 -r e3398dc8d7cc36221657d3d4b417231f60a019a6 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -456,8 +456,8 @@
         try:
             mod = self.fspath.pyimport(ensuresyspath=True)
         except SyntaxError:
-            excinfo = py.code.ExceptionInfo()
-            raise self.CollectError(excinfo.getrepr(style="short"))
+            raise self.CollectError(
+                py.code.ExceptionInfo().getrepr(style="short"))
         except self.fspath.ImportMismatchError:
             e = sys.exc_info()[1]
             raise self.CollectError(

Repository URL: https://bitbucket.org/hpk42/pytest/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.


More information about the pytest-commit mailing list