openSUSE Commits
Threads by month
- ----- 2025 -----
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
August 2015
- 1 participants
- 1349 discussions
Hello community,
here is the log from the commit of package python-fixtures for openSUSE:Factory checked in at 2015-08-01 11:38:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-fixtures (Old)
and /work/SRC/openSUSE:Factory/.python-fixtures.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-fixtures"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-fixtures/…
[View More]python-fixtures.changes 2015-05-10 10:46:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-fixtures.new/python-fixtures.changes 2015-08-01 11:38:22.000000000 +0200
@@ -1,0 +2,14 @@
+Fri Jul 3 12:09:34 UTC 2015 - dmueller(a)suse.com
+
+- update to 1.3.1:
+ * Clarify the intent around _setUp
+ * Handle BaseException resource leaks as well
+ * Remove trailing whitespace
+ * Deal with resource leaks during setUp
+ * Missed NEWS entry
+ * Fine tune the mock patch
+ * Add a new mockpatch fixture
+ * Document where the project home and source are
+ * Ignore built things
+
+-------------------------------------------------------------------
Old:
----
fixtures-1.2.0.tar.gz
New:
----
fixtures-1.3.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-fixtures.spec ++++++
--- /var/tmp/diff_new_pack.eK3vbZ/_old 2015-08-01 11:38:22.000000000 +0200
+++ /var/tmp/diff_new_pack.eK3vbZ/_new 2015-08-01 11:38:22.000000000 +0200
@@ -17,7 +17,7 @@
Name: python-fixtures
-Version: 1.2.0
+Version: 1.3.1
Release: 0
Summary: Fixtures, reusable state for writing clean tests and more
License: Apache-2.0 or BSD-3-Clause
@@ -25,6 +25,7 @@
Url: https://launchpad.net/python-fixtures
Source: http://pypi.python.org/packages/source/f/fixtures/fixtures-%{version}.tar.gz
BuildRequires: python-devel
+BuildRequires: python-mock
BuildRequires: python-pbr >= 0.11
BuildRequires: python-testtools >= 0.9.22
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -35,7 +36,7 @@
%else
BuildArch: noarch
%endif
-Requires: python-testtools
+Requires: python-testtools >= 0.9.22
%description
Fixtures defines a Python contract for reusable state / support logic,
++++++ fixtures-1.2.0.tar.gz -> fixtures-1.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/AUTHORS new/fixtures-1.3.1/AUTHORS
--- old/fixtures-1.2.0/AUTHORS 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/AUTHORS 2015-06-30 04:22:04.000000000 +0200
@@ -9,6 +9,7 @@
Jonathan Lange <jml(a)canonical.com>
Jonathan Lange <jml(a)mumak.net>
Joshua Harlow <harlowja(a)yahoo-inc.com>
+Julien Danjou <julien(a)danjou.info>
Martin Pool <mbp(a)canonical.com>
Robert Collins <robertc(a)robertcollins.net>
Sean Dague <sean(a)dague.net>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/ChangeLog new/fixtures-1.3.1/ChangeLog
--- old/fixtures-1.2.0/ChangeLog 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/ChangeLog 2015-06-30 04:22:04.000000000 +0200
@@ -1,6 +1,25 @@
CHANGES
=======
+1.3.1
+-----
+
+* Release 1.3.1
+* Clarify the intent around _setUp
+* Handle BaseException resource leaks as well
+
+1.3.0
+-----
+
+* Release 1.3.0
+* Remove trailing whitespace
+* Deal with resource leaks during setUp
+* Missed NEWS entry
+* Fine tune the mock patch
+* Add a new mockpatch fixture
+* Document where the project home and source are
+* Ignore built things
+
1.2.0
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/NEWS new/fixtures-1.3.1/NEWS
--- old/fixtures-1.2.0/NEWS 2015-05-04 23:50:18.000000000 +0200
+++ new/fixtures-1.3.1/NEWS 2015-06-30 04:21:13.000000000 +0200
@@ -6,6 +6,27 @@
NEXT
~~~~
+1.3.1
+~~~~~
+
+* ``Fixture.setUp`` now uses a bare except: and will thus catch BaseException.
+ Any non-Exception-subclass errors are raised verbatim after calling
+ ``cleanUp``, to avoid inappropriate masking in callers. (Robert Collins)
+
+1.3.0
+~~~~~
+
+* Add MockPatch, MockPatchMultiple, MockPatchObject - adapters to mock.
+ (Julien Danjou, Robert Collins)
+
+* Fixture.setUp should no longer be overridden in subclasses. Instead
+ override _setUp. This permits the Fixture base class to detect failures
+ during _setUp and trigger any registered cleanups, attach any details
+ to the failure exception and propogate that to callers. Overriding of
+ setUp is still supported: this adds a new interface for simpler
+ implementation of the contract of a fixture.
+ (Robert Collins, #1456361, #1456353)
+
1.2.0
~~~~~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/PKG-INFO new/fixtures-1.3.1/PKG-INFO
--- old/fixtures-1.2.0/PKG-INFO 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/PKG-INFO 2015-06-30 04:22:04.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: fixtures
-Version: 1.2.0
+Version: 1.3.1
Summary: Fixtures, reusable state for writing clean tests and more.
Home-page: https://launchpad.net/python-fixtures
Author: Robert Collins
@@ -87,19 +87,20 @@
Creating Fixtures
=================
- Minimally, subclass Fixture, define setUp to initialize your state and schedule
+ Minimally, subclass Fixture, define _setUp to initialize your state and schedule
a cleanup for when cleanUp is called and you're done::
>>> import unittest
>>> import fixtures
>>> class NoddyFixture(fixtures.Fixture):
- ... def setUp(self):
- ... super(NoddyFixture, self).setUp()
+ ... def _setUp(self):
... self.frobnozzle = 42
... self.addCleanup(delattr, self, 'frobnozzle')
- This will initialize frobnozzle when setUp is called, and when cleanUp is
- called get rid of the frobnozzle attribute.
+ This will initialize frobnozzle when ``setUp`` is called, and when ``cleanUp``
+ is called get rid of the frobnozzle attribute. Prior to version 1.3.0 fixtures
+ recommended overriding ``setUp``. This is still supported, but since it is
+ harder to write leak-free fixtures in this fashion, it is not recommended.
If your fixture has diagnostic data - for instance the log file of an
application server, or log messages, it can expose that by creating a content
@@ -107,8 +108,7 @@
>>> from testtools.content import text_content
>>> class WithLog(fixtures.Fixture):
- ... def setUp(self):
- ... super(WithLog, self).setUp()
+ ... def _setUp(self):
... self.addDetail('message', text_content('foo bar baz'))
The method ``useFixture`` will use another fixture, call ``setUp`` on it, call
@@ -116,8 +116,7 @@
the fixture. This allows simple composition of different fixtures.
>>> class ReusingFixture(fixtures.Fixture):
- ... def setUp(self):
- ... super(ReusingFixture, self).setUp()
+ ... def _setUp(self):
... self.noddy = self.useFixture(NoddyFixture())
There is a helper for adapting a function or function pair into Fixtures. it
@@ -162,9 +161,9 @@
clean up after a fixture has been used, all fixtures define a ``cleanUp``
method which should be called when a fixture is finished with.
- Because its nice to be able to build a particular set of related fixtures in
- advance of using them, fixtures also have define a ``setUp`` method which
- should be called before trying to use them.
+ Because it's nice to be able to build a particular set of related fixtures in
+ advance of using them, fixtures also have a ``setUp`` method which should be
+ called before trying to use them.
One common desire with fixtures that are expensive to create is to reuse them
in many test cases; to support this the base Fixture also defines a ``reset``
@@ -211,8 +210,7 @@
>>> import sys
>>> from fixtures.fixture import MultipleExceptions
>>> class BrokenFixture(fixtures.Fixture):
- ... def setUp(self):
- ... fixtures.Fixture.setUp(self)
+ ... def _setUp(self):
... self.addCleanup(lambda:1/0)
... self.addCleanup(lambda:1/0)
>>> fixture = BrokenFixture()
@@ -226,12 +224,32 @@
Fixtures often expose diagnostic details that can be useful for tracking down
issues. The ``getDetails`` method will return a dict of all the attached
- details. Each detail object is an instance of ``testtools.content.Content``.
+ details, but can only be called before ``cleanUp`` is called. Each detail
+ object is an instance of ``testtools.content.Content``.
>>> with WithLog() as l:
... print(l.getDetails()['message'].as_text())
foo bar baz
+ Errors in setUp
+ +++++++++++++++
+
+ The examples above used ``_setUp`` rather than ``setUp`` because the base
+ class implementation of ``setUp`` acts to reduce the chance of leaking
+ external resources if an error is raised from ``_setUp``. Specifically,
+ ``setUp`` contains a try:/except: block which catches all exceptions, captures
+ any registered detail objects, and calls ``self.cleanUp`` before propogating
+ the error. As long as you take care to register any cleanups before calling
+ the code that may fail, this will cause them to be cleaned up. The captured
+ detail objects are provided to the args of the raised exception.
+
+ If the error that occured was a subclass of ``Exception`` then ``setUp`` will
+ raise ``MultipleExceptions`` with the last element being a ``SetupError`` that
+ contains the detail objects. Otherwise, to prevent causing normally
+ uncatchable errors like KeyboardInterrupt being caught inappropriately in the
+ calling layer, the original exception will be raised as-is and no diagnostic
+ data other than that from the original exception will be available.
+
Shared Dependencies
+++++++++++++++++++
@@ -308,7 +326,8 @@
In addition to the Fixture, FunctionFixture and MethodFixture classes fixtures
includes a number of precanned fixtures. The API docs for fixtures will list
- the complete set of these, should the dcs be out of date or not to hand.
+ the complete set of these, should the dcs be out of date or not to hand. For
+ the complete feature set of each fixture please see the API docs.
ByteStream
++++++++++
@@ -348,6 +367,34 @@
>>> from testtools.compat import BytesIO
>>> fixture = fixtures.FakePopen(lambda _:{'stdout': BytesIO('foobar')})
+ MockPatchObject
+ +++++++++++++++
+
+ Adapts ``mock.patch.object`` to be used as a Fixture.
+
+ >>> class Fred:
+ ... value = 1
+ >>> fixture = fixtures.MockPatchObject(Fred, 'value', 2)
+ >>> with fixture:
+ ... Fred().value
+ 2
+ >>> Fred().value
+ 1
+
+ MockPatch
+ +++++++++
+
+ Adapts ``mock.patch`` to be used as a Fixture.
+
+ >>> fixture = fixtures.MockPatch('subprocess.Popen.returncode', 3)
+
+ MockPatchMultiple
+ +++++++++++++++++
+
+ Adapts ``mock.patch.multiple`` to be used as a Fixture.
+
+ >>> fixture = fixtures.MockPatch('subprocess.Popen', returncode=3)
+
MonkeyPatch
+++++++++++
@@ -447,6 +494,13 @@
*Note:* Currently supported only on Unix because it relies on the ``alarm``
system call.
+ Contributing
+ ============
+
+ Fixtures has its project homepage on Launchpad
+ <https://launchpad.net/python-fixtures>. Source code is hosted on GitHub
+ <https://github.com/testing-cabal/fixtures>.
+
Platform: UNKNOWN
Classifier: Development Status :: 6 - Mature
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/README new/fixtures-1.3.1/README
--- old/fixtures-1.2.0/README 2014-09-25 04:37:13.000000000 +0200
+++ new/fixtures-1.3.1/README 2015-06-30 02:56:38.000000000 +0200
@@ -79,19 +79,20 @@
Creating Fixtures
=================
-Minimally, subclass Fixture, define setUp to initialize your state and schedule
+Minimally, subclass Fixture, define _setUp to initialize your state and schedule
a cleanup for when cleanUp is called and you're done::
>>> import unittest
>>> import fixtures
>>> class NoddyFixture(fixtures.Fixture):
- ... def setUp(self):
- ... super(NoddyFixture, self).setUp()
+ ... def _setUp(self):
... self.frobnozzle = 42
... self.addCleanup(delattr, self, 'frobnozzle')
-This will initialize frobnozzle when setUp is called, and when cleanUp is
-called get rid of the frobnozzle attribute.
+This will initialize frobnozzle when ``setUp`` is called, and when ``cleanUp``
+is called get rid of the frobnozzle attribute. Prior to version 1.3.0 fixtures
+recommended overriding ``setUp``. This is still supported, but since it is
+harder to write leak-free fixtures in this fashion, it is not recommended.
If your fixture has diagnostic data - for instance the log file of an
application server, or log messages, it can expose that by creating a content
@@ -99,8 +100,7 @@
>>> from testtools.content import text_content
>>> class WithLog(fixtures.Fixture):
- ... def setUp(self):
- ... super(WithLog, self).setUp()
+ ... def _setUp(self):
... self.addDetail('message', text_content('foo bar baz'))
The method ``useFixture`` will use another fixture, call ``setUp`` on it, call
@@ -108,8 +108,7 @@
the fixture. This allows simple composition of different fixtures.
>>> class ReusingFixture(fixtures.Fixture):
- ... def setUp(self):
- ... super(ReusingFixture, self).setUp()
+ ... def _setUp(self):
... self.noddy = self.useFixture(NoddyFixture())
There is a helper for adapting a function or function pair into Fixtures. it
@@ -154,9 +153,9 @@
clean up after a fixture has been used, all fixtures define a ``cleanUp``
method which should be called when a fixture is finished with.
-Because its nice to be able to build a particular set of related fixtures in
-advance of using them, fixtures also have define a ``setUp`` method which
-should be called before trying to use them.
+Because it's nice to be able to build a particular set of related fixtures in
+advance of using them, fixtures also have a ``setUp`` method which should be
+called before trying to use them.
One common desire with fixtures that are expensive to create is to reuse them
in many test cases; to support this the base Fixture also defines a ``reset``
@@ -203,8 +202,7 @@
>>> import sys
>>> from fixtures.fixture import MultipleExceptions
>>> class BrokenFixture(fixtures.Fixture):
- ... def setUp(self):
- ... fixtures.Fixture.setUp(self)
+ ... def _setUp(self):
... self.addCleanup(lambda:1/0)
... self.addCleanup(lambda:1/0)
>>> fixture = BrokenFixture()
@@ -218,12 +216,32 @@
Fixtures often expose diagnostic details that can be useful for tracking down
issues. The ``getDetails`` method will return a dict of all the attached
-details. Each detail object is an instance of ``testtools.content.Content``.
+details, but can only be called before ``cleanUp`` is called. Each detail
+object is an instance of ``testtools.content.Content``.
>>> with WithLog() as l:
... print(l.getDetails()['message'].as_text())
foo bar baz
+Errors in setUp
++++++++++++++++
+
+The examples above used ``_setUp`` rather than ``setUp`` because the base
+class implementation of ``setUp`` acts to reduce the chance of leaking
+external resources if an error is raised from ``_setUp``. Specifically,
+``setUp`` contains a try:/except: block which catches all exceptions, captures
+any registered detail objects, and calls ``self.cleanUp`` before propogating
+the error. As long as you take care to register any cleanups before calling
+the code that may fail, this will cause them to be cleaned up. The captured
+detail objects are provided to the args of the raised exception.
+
+If the error that occured was a subclass of ``Exception`` then ``setUp`` will
+raise ``MultipleExceptions`` with the last element being a ``SetupError`` that
+contains the detail objects. Otherwise, to prevent causing normally
+uncatchable errors like KeyboardInterrupt being caught inappropriately in the
+calling layer, the original exception will be raised as-is and no diagnostic
+data other than that from the original exception will be available.
+
Shared Dependencies
+++++++++++++++++++
@@ -300,7 +318,8 @@
In addition to the Fixture, FunctionFixture and MethodFixture classes fixtures
includes a number of precanned fixtures. The API docs for fixtures will list
-the complete set of these, should the dcs be out of date or not to hand.
+the complete set of these, should the dcs be out of date or not to hand. For
+the complete feature set of each fixture please see the API docs.
ByteStream
++++++++++
@@ -340,6 +359,34 @@
>>> from testtools.compat import BytesIO
>>> fixture = fixtures.FakePopen(lambda _:{'stdout': BytesIO('foobar')})
+MockPatchObject
++++++++++++++++
+
+Adapts ``mock.patch.object`` to be used as a Fixture.
+
+ >>> class Fred:
+ ... value = 1
+ >>> fixture = fixtures.MockPatchObject(Fred, 'value', 2)
+ >>> with fixture:
+ ... Fred().value
+ 2
+ >>> Fred().value
+ 1
+
+MockPatch
++++++++++
+
+Adapts ``mock.patch`` to be used as a Fixture.
+
+ >>> fixture = fixtures.MockPatch('subprocess.Popen.returncode', 3)
+
+MockPatchMultiple
++++++++++++++++++
+
+Adapts ``mock.patch.multiple`` to be used as a Fixture.
+
+ >>> fixture = fixtures.MockPatch('subprocess.Popen', returncode=3)
+
MonkeyPatch
+++++++++++
@@ -438,3 +485,10 @@
*Note:* Currently supported only on Unix because it relies on the ``alarm``
system call.
+
+Contributing
+============
+
+Fixtures has its project homepage on Launchpad
+<https://launchpad.net/python-fixtures>. Source code is hosted on GitHub
+<https://github.com/testing-cabal/fixtures>.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/__init__.py new/fixtures-1.3.1/fixtures/__init__.py
--- old/fixtures-1.2.0/fixtures/__init__.py 2015-05-04 23:49:57.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/__init__.py 2015-06-22 08:56:00.000000000 +0200
@@ -54,12 +54,17 @@
'LogHandler',
'LoggerFixture',
'MethodFixture',
+ 'MockPatch',
+ 'MockPatchMultiple',
+ 'MockPatchObject',
'MonkeyPatch',
+ 'MultipleExceptions',
'NestedTempfile',
'PackagePathEntry',
'PopenFixture',
'PythonPackage',
'PythonPathEntry',
+ 'SetupError',
'StringStream',
'TempDir',
'TempHomeDir',
@@ -76,6 +81,8 @@
Fixture,
FunctionFixture,
MethodFixture,
+ MultipleExceptions,
+ SetupError,
)
from fixtures._fixtures import (
ByteStream,
@@ -86,6 +93,9 @@
FakePopen,
LoggerFixture,
LogHandler,
+ MockPatch,
+ MockPatchMultiple,
+ MockPatchObject,
MonkeyPatch,
NestedTempfile,
PackagePathEntry,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/__init__.py new/fixtures-1.3.1/fixtures/_fixtures/__init__.py
--- old/fixtures-1.2.0/fixtures/_fixtures/__init__.py 2015-05-04 23:49:57.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/__init__.py 2015-06-22 02:24:03.000000000 +0200
@@ -25,6 +25,9 @@
'FakePopen',
'LoggerFixture',
'LogHandler',
+ 'MockPatch',
+ 'MockPatchMultiple',
+ 'MockPatchObject',
'MonkeyPatch',
'NestedTempfile',
'PackagePathEntry',
@@ -49,6 +52,11 @@
LoggerFixture,
LogHandler,
)
+from fixtures._fixtures.mockpatch import (
+ MockPatch,
+ MockPatchMultiple,
+ MockPatchObject,
+ )
from fixtures._fixtures.monkeypatch import MonkeyPatch
from fixtures._fixtures.popen import (
FakePopen,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/environ.py new/fixtures-1.3.1/fixtures/_fixtures/environ.py
--- old/fixtures-1.2.0/fixtures/_fixtures/environ.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/environ.py 2015-06-22 08:56:00.000000000 +0200
@@ -40,8 +40,7 @@
self.varname = varname
self.newvalue = newvalue
- def setUp(self):
- super(EnvironmentVariable, self).setUp()
+ def _setUp(self):
varname = self.varname
orig_value = os.environ.get(varname)
if orig_value is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/logger.py new/fixtures-1.3.1/fixtures/_fixtures/logger.py
--- old/fixtures-1.2.0/fixtures/_fixtures/logger.py 2015-03-26 21:33:59.000000000 +0100
+++ new/fixtures-1.3.1/fixtures/_fixtures/logger.py 2015-06-22 08:56:00.000000000 +0200
@@ -46,8 +46,7 @@
self._level = level
self._nuke_handlers = nuke_handlers
- def setUp(self):
- super(LogHandler, self).setUp()
+ def _setUp(self):
logger = getLogger(self._name)
if self._level:
self.addCleanup(logger.setLevel, logger.level)
@@ -95,8 +94,7 @@
self._nuke_handlers = nuke_handlers
self._formatter = formatter
- def setUp(self):
- super(FakeLogger, self).setUp()
+ def _setUp(self):
name = _u("pythonlogging:'%s'") % self._name
output = self.useFixture(StringStream(name)).stream
self._output = output
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/mockpatch.py new/fixtures-1.3.1/fixtures/_fixtures/mockpatch.py
--- old/fixtures-1.2.0/fixtures/_fixtures/mockpatch.py 1970-01-01 01:00:00.000000000 +0100
+++ new/fixtures-1.3.1/fixtures/_fixtures/mockpatch.py 2015-06-22 08:56:00.000000000 +0200
@@ -0,0 +1,71 @@
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2013 Hewlett-Packard Development Company, L.P.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import extras
+
+import fixtures
+
+mock = extras.try_imports(['unittest.mock', 'mock'], None)
+mock_default = extras.try_imports(
+ ['unittest.mock.DEFAULT', 'mock.DEFAULT'], None)
+
+
+class _Base(fixtures.Fixture):
+ def _setUp(self):
+ _p = self._get_p()
+ self.addCleanup(_p.stop)
+ self.mock = _p.start()
+
+
+class MockPatchObject(_Base):
+ """Deal with code around mock."""
+
+ def __init__(self, obj, attr, new=mock_default, **kwargs):
+ super(MockPatchObject, self).__init__()
+ self._get_p = lambda: mock.patch.object(obj, attr, new, **kwargs)
+
+
+class MockPatch(_Base):
+ """Deal with code around mock.patch."""
+
+ def __init__(self, obj, new=mock_default, **kwargs):
+ super(MockPatch, self).__init__()
+ self._get_p = lambda: mock.patch(obj, new, **kwargs)
+
+
+class MockPatchMultiple(_Base):
+ """Deal with code around mock.patch.multiple."""
+
+ # Default value to trigger a MagicMock to be created for a named
+ # attribute.
+ DEFAULT = mock_default
+
+ def __init__(self, obj, **kwargs):
+ """Initialize the mocks
+
+ Pass name=value to replace obj.name with value.
+
+ Pass name=Multiple.DEFAULT to replace obj.name with a
+ MagicMock instance.
+
+ :param obj: Object or name containing values being mocked.
+ :type obj: str or object
+ :param kwargs: names and values of attributes of obj to be mocked.
+
+ """
+ super(MockPatchMultiple, self).__init__()
+ self._get_p = lambda: mock.patch.multiple(obj, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/monkeypatch.py new/fixtures-1.3.1/fixtures/_fixtures/monkeypatch.py
--- old/fixtures-1.2.0/fixtures/_fixtures/monkeypatch.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/monkeypatch.py 2015-06-22 08:56:00.000000000 +0200
@@ -42,8 +42,7 @@
self.name = name
self.new_value = new_value
- def setUp(self):
- Fixture.setUp(self)
+ def _setUp(self):
location, attribute = self.name.rsplit('.', 1)
# Import, swallowing all errors as any element of location may be
# a class or some such thing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/packagepath.py new/fixtures-1.3.1/fixtures/_fixtures/packagepath.py
--- old/fixtures-1.2.0/fixtures/_fixtures/packagepath.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/packagepath.py 2015-06-22 08:56:00.000000000 +0200
@@ -39,8 +39,7 @@
self.packagename = packagename
self.directory = directory
- def setUp(self):
- Fixture.setUp(self)
+ def _setUp(self):
path = sys.modules[self.packagename].__path__
if self.directory in path:
return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/popen.py new/fixtures-1.3.1/fixtures/_fixtures/popen.py
--- old/fixtures-1.2.0/fixtures/_fixtures/popen.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/popen.py 2015-06-22 08:56:00.000000000 +0200
@@ -95,8 +95,7 @@
super(FakePopen, self).__init__()
self.get_info = get_info
- def setUp(self):
- super(FakePopen, self).setUp()
+ def _setUp(self):
self.addCleanup(setattr, subprocess, 'Popen', subprocess.Popen)
subprocess.Popen = self
self.procs = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/pythonpackage.py new/fixtures-1.3.1/fixtures/_fixtures/pythonpackage.py
--- old/fixtures-1.2.0/fixtures/_fixtures/pythonpackage.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/pythonpackage.py 2015-06-22 08:56:00.000000000 +0200
@@ -47,8 +47,7 @@
self.modulelist = modulelist
self.init = init
- def setUp(self):
- Fixture.setUp(self)
+ def _setUp(self):
self.base = self.useFixture(TempDir()).path
base = self.base
root = os.path.join(base, self.packagename)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/pythonpath.py new/fixtures-1.3.1/fixtures/_fixtures/pythonpath.py
--- old/fixtures-1.2.0/fixtures/_fixtures/pythonpath.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/pythonpath.py 2015-06-22 08:56:00.000000000 +0200
@@ -35,8 +35,7 @@
"""
self.directory = directory
- def setUp(self):
- Fixture.setUp(self)
+ def _setUp(self):
if self.directory in sys.path:
return
self.addCleanup(sys.path.remove, self.directory)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/streams.py new/fixtures-1.3.1/fixtures/_fixtures/streams.py
--- old/fixtures-1.2.0/fixtures/_fixtures/streams.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/streams.py 2015-06-22 08:56:00.000000000 +0200
@@ -42,8 +42,7 @@
self._detail_name = detail_name
self._stream_factory = stream_factory
- def setUp(self):
- super(Stream, self).setUp()
+ def _setUp(self):
write_stream, read_stream = self._stream_factory()
self.stream = write_stream
self.addDetail(self._detail_name,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/tempdir.py new/fixtures-1.3.1/fixtures/_fixtures/tempdir.py
--- old/fixtures-1.2.0/fixtures/_fixtures/tempdir.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/tempdir.py 2015-06-22 08:56:00.000000000 +0200
@@ -39,8 +39,7 @@
"""
self.rootdir = rootdir
- def setUp(self):
- super(TempDir, self).setUp()
+ def _setUp(self):
self.path = tempfile.mkdtemp(dir=self.rootdir)
self.addCleanup(shutil.rmtree, self.path, ignore_errors=True)
@@ -63,8 +62,7 @@
down.
"""
- def setUp(self):
- super(NestedTempfile, self).setUp()
+ def _setUp(self):
tempdir = self.useFixture(TempDir()).path
patch = fixtures.MonkeyPatch("tempfile.tempdir", tempdir)
self.useFixture(patch)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/temphomedir.py new/fixtures-1.3.1/fixtures/_fixtures/temphomedir.py
--- old/fixtures-1.2.0/fixtures/_fixtures/temphomedir.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/temphomedir.py 2015-06-22 08:56:00.000000000 +0200
@@ -27,6 +27,6 @@
:ivar path: the path of the temporary directory.
"""
- def setUp(self):
- super(TempHomeDir, self).setUp()
+ def _setUp(self):
+ super(TempHomeDir, self)._setUp()
self.useFixture(fixtures.EnvironmentVariable("HOME", self.path))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/timeout.py new/fixtures-1.3.1/fixtures/_fixtures/timeout.py
--- old/fixtures-1.2.0/fixtures/_fixtures/timeout.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/timeout.py 2015-06-22 08:56:00.000000000 +0200
@@ -51,8 +51,7 @@
def signal_handler(self, signum, frame):
raise TimeoutException()
- def setUp(self):
- super(Timeout, self).setUp()
+ def _setUp(self):
if self.alarm_fn is None:
return # Can't run on Windows
if self.gentle:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/_fixtures/warnings.py new/fixtures-1.3.1/fixtures/_fixtures/warnings.py
--- old/fixtures-1.2.0/fixtures/_fixtures/warnings.py 2015-05-04 23:49:57.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/_fixtures/warnings.py 2015-06-22 08:56:00.000000000 +0200
@@ -34,8 +34,7 @@
def _showwarning(self, *args, **kwargs):
self.captures.append(warnings.WarningMessage(*args, **kwargs))
- def setUp(self):
- super(WarningsCapture, self).setUp()
+ def _setUp(self):
patch = fixtures.MonkeyPatch("warnings.showwarning", self._showwarning)
self.useFixture(patch)
self.captures = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/fixture.py new/fixtures-1.3.1/fixtures/fixture.py
--- old/fixtures-1.2.0/fixtures/fixture.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/fixture.py 2015-06-30 03:01:38.000000000 +0200
@@ -18,11 +18,13 @@
'FunctionFixture',
'MethodFixture',
'MultipleExceptions',
+ 'SetupError',
]
import itertools
import sys
+import six
from testtools.compat import (
advance_iterator,
reraise,
@@ -49,6 +51,13 @@
target_details[name] = content_object
+class SetupError(Exception):
+ """Setup failed.
+
+ args[0] will be a details dict.
+ """
+
+
class Fixture(object):
"""A Fixture representing some state or resource.
@@ -97,6 +106,10 @@
This should not typically be overridden, see addCleanup instead.
+ cleanUp may be called once and only once after setUp() has been called.
+ The base implementation of setUp will automatically call cleanUp if
+ an exception occurs within setUp itself.
+
:param raise_first: Deprecated parameter from before testtools gained
MultipleExceptions. raise_first defaults to True. When True
if a single exception is raised, it is reraised after all the
@@ -111,7 +124,7 @@
try:
return self._cleanups(raise_errors=raise_first)
finally:
- self._clear_cleanups()
+ self._remove_state()
def _clear_cleanups(self):
"""Clean the cleanup queue without running them.
@@ -126,6 +139,15 @@
self._details = {}
self._detail_sources = []
+ def _remove_state(self):
+ """Remove the internal state.
+
+ Called from cleanUp to put the fixture back into a not-ready state.
+ """
+ self._cleanups = None
+ self._details = None
+ self._detail_sources = None
+
def __enter__(self):
self.setUp()
return self
@@ -134,7 +156,7 @@
try:
self._cleanups()
finally:
- self._clear_cleanups()
+ self._remove_state()
return False # propogate exceptions from the with body.
def getDetails(self):
@@ -153,16 +175,56 @@
def setUp(self):
"""Prepare the Fixture for use.
- This should be overridden by most concrete fixtures. When overriding
- be sure to include self.addCleanup calls to restore the fixture to
- an un-setUp state, so that a single Fixture instance can be reused.
+ This should not be overridden. Concrete fixtures should implement
+ _setUp. Overriding of setUp is still supported, just not recommended.
- After setUp is called, the fixture will have one or more attributes
+ After setUp has completed, the fixture will have one or more attributes
which can be used (these depend totally on the concrete subclass).
+ :raises: MultipleExceptions if _setUp fails. The last exception
+ captured within the MultipleExceptions will be a SetupError
+ exception.
:return: None.
+
+ :changed in 1.3: The recommendation to override setUp has been
+ reversed - before 1.3, setUp() should be overridden, now it should
+ not be.
+ :changed in 1.3.1: BaseException is now caught, and only subclasses of
+ Exception are wrapped in MultipleExceptions.
"""
self._clear_cleanups()
+ try:
+ self._setUp()
+ except:
+ err = sys.exc_info()
+ details = {}
+ if gather_details is not None:
+ # Materialise all details since we're about to cleanup.
+ gather_details(self.getDetails(), details)
+ else:
+ details = self.getDetails()
+ errors = [err] + self.cleanUp(raise_first=False)
+ try:
+ raise SetupError(details)
+ except SetupError as e:
+ errors.append(sys.exc_info())
+ if issubclass(err[0], Exception):
+ raise MultipleExceptions(*errors)
+ else:
+ six.reraise(*err)
+
+ def _setUp(self):
+ """Template method for subclasses to override.
+
+ Override this to customise the fixture. When overriding
+ be sure to include self.addCleanup calls to restore the fixture to
+ an un-setUp state, so that a single Fixture instance can be reused.
+
+ Fixtures will never have a body in _setUp - calling super() is
+ entirely at the discretion of subclasses.
+
+ :return: None.
+ """
def reset(self):
"""Reset a setUp Fixture to the 'just setUp' state again.
@@ -183,15 +245,23 @@
"""Use another fixture.
The fixture will be setUp, and self.addCleanup(fixture.cleanUp) called.
+ If the fixture fails to set up, useFixture will attempt to gather its
+ details into this fixture's details to aid in debugging.
:param fixture: The fixture to use.
:return: The fixture, after setting it up and scheduling a cleanup for
it.
+ :raises: Any errors raised by the fixture's setUp method.
"""
try:
fixture.setUp()
+ except MultipleExceptions as e:
+ if e.args[-1][0] is SetupError:
+ combine_details(e.args[-1][1].args[0], self._details)
+ raise
except:
- # The child failed to come up, capture any details it has (copying
+ # The child failed to come up and didn't raise MultipleExceptions
+ # which we can understand... capture any details it has (copying
# the content, it may go away anytime).
if gather_details is not None:
gather_details(fixture.getDetails(), self._details)
@@ -249,8 +319,7 @@
self.cleanup_fn = cleanup_fn
self.reset_fn = reset_fn
- def setUp(self):
- super(FunctionFixture, self).setUp()
+ def _setUp(self):
fn_result = self.setup_fn()
self._maybe_cleanup(fn_result)
@@ -323,8 +392,7 @@
reset = getattr(obj, 'reset', None)
self._reset = reset
- def setUp(self):
- super(MethodFixture, self).setUp()
+ def _setUp(self):
self._setup()
def cleanUp(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/tests/_fixtures/__init__.py new/fixtures-1.3.1/fixtures/tests/_fixtures/__init__.py
--- old/fixtures-1.2.0/fixtures/tests/_fixtures/__init__.py 2015-03-26 03:46:21.000000000 +0100
+++ new/fixtures-1.3.1/fixtures/tests/_fixtures/__init__.py 2015-06-22 02:24:03.000000000 +0200
@@ -17,6 +17,7 @@
test_modules = [
'environ',
'logger',
+ 'mockpatch',
'monkeypatch',
'packagepath',
'popen',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/tests/_fixtures/test_mockpatch.py new/fixtures-1.3.1/fixtures/tests/_fixtures/test_mockpatch.py
--- old/fixtures-1.2.0/fixtures/tests/_fixtures/test_mockpatch.py 1970-01-01 01:00:00.000000000 +0100
+++ new/fixtures-1.3.1/fixtures/tests/_fixtures/test_mockpatch.py 2015-06-22 02:24:03.000000000 +0200
@@ -0,0 +1,72 @@
+# Copyright 2014 IBM Corp.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+import extras
+mock = extras.try_imports(['unittest.mock', 'mock'], None)
+import testtools
+
+from fixtures import (
+ MockPatch,
+ MockPatchMultiple,
+ MockPatchObject,
+)
+
+
+class Foo(object):
+ def bar(self):
+ return self
+
+
+def mocking_bar(self):
+ return 'mocked!'
+
+
+class TestMockPatch(testtools.TestCase):
+ def test_mock_patch_with_replacement(self):
+ self.useFixture(MockPatch('%s.Foo.bar' % (__name__), mocking_bar))
+ instance = Foo()
+ self.assertEqual(instance.bar(), 'mocked!')
+
+ def test_mock_patch_without_replacement(self):
+ self.useFixture(MockPatch('%s.Foo.bar' % (__name__)))
+ instance = Foo()
+ self.assertIsInstance(instance.bar(), mock.MagicMock)
+
+
+class TestMockMultiple(testtools.TestCase):
+ def test_mock_multiple_with_replacement(self):
+ self.useFixture(MockPatchMultiple('%s.Foo' % (__name__),
+ bar=mocking_bar))
+ instance = Foo()
+ self.assertEqual(instance.bar(), 'mocked!')
+
+ def test_mock_patch_without_replacement(self):
+ self.useFixture(MockPatchMultiple(
+ '%s.Foo' % (__name__),
+ bar=MockPatchMultiple.DEFAULT))
+ instance = Foo()
+ self.assertIsInstance(instance.bar(), mock.MagicMock)
+
+
+class TestMockPatchObject(testtools.TestCase):
+ def test_mock_patch_object_with_replacement(self):
+ self.useFixture(MockPatchObject(Foo, 'bar', mocking_bar))
+ instance = Foo()
+ self.assertEqual(instance.bar(), 'mocked!')
+
+ def test_mock_patch_object_without_replacement(self):
+ self.useFixture(MockPatchObject(Foo, 'bar'))
+ instance = Foo()
+ self.assertIsInstance(instance.bar(), mock.MagicMock)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures/tests/test_fixture.py new/fixtures-1.3.1/fixtures/tests/test_fixture.py
--- old/fixtures-1.2.0/fixtures/tests/test_fixture.py 2014-09-25 04:31:06.000000000 +0200
+++ new/fixtures-1.3.1/fixtures/tests/test_fixture.py 2015-06-30 02:51:08.000000000 +0200
@@ -122,7 +122,7 @@
@require_gather_details
def test_useFixture_details_captured_from_setUp(self):
# Details added during fixture set-up are gathered even if setUp()
- # fails with an exception.
+ # fails with an unknown exception.
class SomethingBroke(Exception): pass
class BrokenFixture(fixtures.Fixture):
def setUp(self):
@@ -143,6 +143,24 @@
{"content": text_content("foobar")},
simple_fixture.getDetails())
+ @require_gather_details
+ def test_useFixture_details_captured_from_setUp_MultipleExceptions(self):
+ # Details added during fixture set-up are gathered even if setUp()
+ # fails with (cleanly - with MultipleExceptions / SetupError).
+ class SomethingBroke(Exception): pass
+ class BrokenFixture(fixtures.Fixture):
+ def _setUp(self):
+ self.addDetail('content', text_content("foobar"))
+ raise SomethingBroke()
+ class SimpleFixture(fixtures.Fixture):
+ def _setUp(self):
+ self.useFixture(BrokenFixture())
+ simple = SimpleFixture()
+ e = self.assertRaises(fixtures.MultipleExceptions, simple.setUp)
+ self.assertEqual(
+ {"content": text_content("foobar")},
+ e.args[-1][1].args[0])
+
def test_getDetails(self):
fixture = fixtures.Fixture()
with fixture:
@@ -162,7 +180,7 @@
self.assertEqual({}, parent.getDetails())
# After cleanup the child details are still gone.
child.addDetail('foo', 'content')
- self.assertEqual({}, parent.getDetails())
+ self.assertRaises(TypeError, parent.getDetails)
def test_duplicate_details_are_disambiguated(self):
parent = fixtures.Fixture()
@@ -185,7 +203,74 @@
self.assertEqual({}, fixture.getDetails())
fixture.addDetail('foo', 'content')
# Cleanup clears the details too.
- self.assertEqual({}, fixture.getDetails())
+ self.assertRaises(TypeError, fixture.getDetails)
+
+ def test_setUp_subclassed(self):
+ # Even though its no longer recommended, we need to be sure that
+ # overriding setUp and calling super().setUp still works.
+ class Subclass(fixtures.Fixture):
+ def setUp(self):
+ super(Subclass, self).setUp()
+ self.fred = 1
+ self.addCleanup(setattr, self, 'fred', 2)
+ with Subclass() as f:
+ self.assertEqual(1, f.fred)
+ self.assertEqual(2, f.fred)
+
+ def test__setUp(self):
+ # _setUp is called, and cleanups can be registered by it.
+ class Subclass(fixtures.Fixture):
+ def _setUp(self):
+ self.fred = 1
+ self.addCleanup(setattr, self, 'fred', 2)
+ with Subclass() as f:
+ self.assertEqual(1, f.fred)
+ self.assertEqual(2, f.fred)
+
+ def test__setUp_fails(self):
+ # when _setUp fails, the fixture is left ready-to-setUp, and any
+ # details added during _setUp are captured.
+ class Subclass(fixtures.Fixture):
+ def _setUp(self):
+ self.addDetail('log', text_content('stuff'))
+ 1/0
+ f = Subclass()
+ e = self.assertRaises(fixtures.MultipleExceptions, f.setUp)
+ self.assertRaises(TypeError, f.cleanUp)
+ self.assertIsInstance(e.args[0][1], ZeroDivisionError)
+ self.assertIsInstance(e.args[1][1], fixtures.SetupError)
+ self.assertEqual('stuff', e.args[1][1].args[0]['log'].as_text())
+
+ def test__setUp_fails_cleanUp_fails(self):
+ # when _setUp fails, cleanups are called, and their failure is captured
+ # into the MultipleExceptions instance.
+ class Subclass(fixtures.Fixture):
+ def _setUp(self):
+ self.addDetail('log', text_content('stuff'))
+ self.addCleanup(lambda: 1/0)
+ raise Exception('fred')
+ f = Subclass()
+ e = self.assertRaises(fixtures.MultipleExceptions, f.setUp)
+ self.assertRaises(TypeError, f.cleanUp)
+ self.assertEqual(Exception, e.args[0][0])
+ self.assertEqual(ZeroDivisionError, e.args[1][0])
+ self.assertEqual(fixtures.SetupError, e.args[2][0])
+ self.assertEqual('stuff', e.args[2][1].args[0]['log'].as_text())
+
+ def test_setup_failures_with_base_exception(self):
+ # when _setUp fails with a BaseException (or subclass thereof) that
+ # exception is propogated as is, but we still call cleanups etc.
+ class MyBase(BaseException):pass
+ log = []
+ class Subclass(fixtures.Fixture):
+ def _setUp(self):
+ self.addDetail('log', text_content('stuff'))
+ self.addCleanup(log.append, 'cleaned')
+ raise MyBase('fred')
+ f = Subclass()
+ e = self.assertRaises(MyBase, f.setUp)
+ self.assertRaises(TypeError, f.cleanUp)
+ self.assertEqual(['cleaned'], log)
class TestFunctionFixture(testtools.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures.egg-info/PKG-INFO new/fixtures-1.3.1/fixtures.egg-info/PKG-INFO
--- old/fixtures-1.2.0/fixtures.egg-info/PKG-INFO 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/fixtures.egg-info/PKG-INFO 2015-06-30 04:22:04.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: fixtures
-Version: 1.2.0
+Version: 1.3.1
Summary: Fixtures, reusable state for writing clean tests and more.
Home-page: https://launchpad.net/python-fixtures
Author: Robert Collins
@@ -87,19 +87,20 @@
Creating Fixtures
=================
- Minimally, subclass Fixture, define setUp to initialize your state and schedule
+ Minimally, subclass Fixture, define _setUp to initialize your state and schedule
a cleanup for when cleanUp is called and you're done::
>>> import unittest
>>> import fixtures
>>> class NoddyFixture(fixtures.Fixture):
- ... def setUp(self):
- ... super(NoddyFixture, self).setUp()
+ ... def _setUp(self):
... self.frobnozzle = 42
... self.addCleanup(delattr, self, 'frobnozzle')
- This will initialize frobnozzle when setUp is called, and when cleanUp is
- called get rid of the frobnozzle attribute.
+ This will initialize frobnozzle when ``setUp`` is called, and when ``cleanUp``
+ is called get rid of the frobnozzle attribute. Prior to version 1.3.0 fixtures
+ recommended overriding ``setUp``. This is still supported, but since it is
+ harder to write leak-free fixtures in this fashion, it is not recommended.
If your fixture has diagnostic data - for instance the log file of an
application server, or log messages, it can expose that by creating a content
@@ -107,8 +108,7 @@
>>> from testtools.content import text_content
>>> class WithLog(fixtures.Fixture):
- ... def setUp(self):
- ... super(WithLog, self).setUp()
+ ... def _setUp(self):
... self.addDetail('message', text_content('foo bar baz'))
The method ``useFixture`` will use another fixture, call ``setUp`` on it, call
@@ -116,8 +116,7 @@
the fixture. This allows simple composition of different fixtures.
>>> class ReusingFixture(fixtures.Fixture):
- ... def setUp(self):
- ... super(ReusingFixture, self).setUp()
+ ... def _setUp(self):
... self.noddy = self.useFixture(NoddyFixture())
There is a helper for adapting a function or function pair into Fixtures. it
@@ -162,9 +161,9 @@
clean up after a fixture has been used, all fixtures define a ``cleanUp``
method which should be called when a fixture is finished with.
- Because its nice to be able to build a particular set of related fixtures in
- advance of using them, fixtures also have define a ``setUp`` method which
- should be called before trying to use them.
+ Because it's nice to be able to build a particular set of related fixtures in
+ advance of using them, fixtures also have a ``setUp`` method which should be
+ called before trying to use them.
One common desire with fixtures that are expensive to create is to reuse them
in many test cases; to support this the base Fixture also defines a ``reset``
@@ -211,8 +210,7 @@
>>> import sys
>>> from fixtures.fixture import MultipleExceptions
>>> class BrokenFixture(fixtures.Fixture):
- ... def setUp(self):
- ... fixtures.Fixture.setUp(self)
+ ... def _setUp(self):
... self.addCleanup(lambda:1/0)
... self.addCleanup(lambda:1/0)
>>> fixture = BrokenFixture()
@@ -226,12 +224,32 @@
Fixtures often expose diagnostic details that can be useful for tracking down
issues. The ``getDetails`` method will return a dict of all the attached
- details. Each detail object is an instance of ``testtools.content.Content``.
+ details, but can only be called before ``cleanUp`` is called. Each detail
+ object is an instance of ``testtools.content.Content``.
>>> with WithLog() as l:
... print(l.getDetails()['message'].as_text())
foo bar baz
+ Errors in setUp
+ +++++++++++++++
+
+ The examples above used ``_setUp`` rather than ``setUp`` because the base
+ class implementation of ``setUp`` acts to reduce the chance of leaking
+ external resources if an error is raised from ``_setUp``. Specifically,
+ ``setUp`` contains a try:/except: block which catches all exceptions, captures
+ any registered detail objects, and calls ``self.cleanUp`` before propogating
+ the error. As long as you take care to register any cleanups before calling
+ the code that may fail, this will cause them to be cleaned up. The captured
+ detail objects are provided to the args of the raised exception.
+
+ If the error that occured was a subclass of ``Exception`` then ``setUp`` will
+ raise ``MultipleExceptions`` with the last element being a ``SetupError`` that
+ contains the detail objects. Otherwise, to prevent causing normally
+ uncatchable errors like KeyboardInterrupt being caught inappropriately in the
+ calling layer, the original exception will be raised as-is and no diagnostic
+ data other than that from the original exception will be available.
+
Shared Dependencies
+++++++++++++++++++
@@ -308,7 +326,8 @@
In addition to the Fixture, FunctionFixture and MethodFixture classes fixtures
includes a number of precanned fixtures. The API docs for fixtures will list
- the complete set of these, should the dcs be out of date or not to hand.
+ the complete set of these, should the dcs be out of date or not to hand. For
+ the complete feature set of each fixture please see the API docs.
ByteStream
++++++++++
@@ -348,6 +367,34 @@
>>> from testtools.compat import BytesIO
>>> fixture = fixtures.FakePopen(lambda _:{'stdout': BytesIO('foobar')})
+ MockPatchObject
+ +++++++++++++++
+
+ Adapts ``mock.patch.object`` to be used as a Fixture.
+
+ >>> class Fred:
+ ... value = 1
+ >>> fixture = fixtures.MockPatchObject(Fred, 'value', 2)
+ >>> with fixture:
+ ... Fred().value
+ 2
+ >>> Fred().value
+ 1
+
+ MockPatch
+ +++++++++
+
+ Adapts ``mock.patch`` to be used as a Fixture.
+
+ >>> fixture = fixtures.MockPatch('subprocess.Popen.returncode', 3)
+
+ MockPatchMultiple
+ +++++++++++++++++
+
+ Adapts ``mock.patch.multiple`` to be used as a Fixture.
+
+ >>> fixture = fixtures.MockPatch('subprocess.Popen', returncode=3)
+
MonkeyPatch
+++++++++++
@@ -447,6 +494,13 @@
*Note:* Currently supported only on Unix because it relies on the ``alarm``
system call.
+ Contributing
+ ============
+
+ Fixtures has its project homepage on Launchpad
+ <https://launchpad.net/python-fixtures>. Source code is hosted on GitHub
+ <https://github.com/testing-cabal/fixtures>.
+
Platform: UNKNOWN
Classifier: Development Status :: 6 - Mature
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures.egg-info/SOURCES.txt new/fixtures-1.3.1/fixtures.egg-info/SOURCES.txt
--- old/fixtures-1.2.0/fixtures.egg-info/SOURCES.txt 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/fixtures.egg-info/SOURCES.txt 2015-06-30 04:22:04.000000000 +0200
@@ -13,6 +13,7 @@
requirements.txt
setup.cfg
setup.py
+test-requirements.txt
tox.ini
fixtures/__init__.py
fixtures/callmany.py
@@ -28,6 +29,7 @@
fixtures/_fixtures/__init__.py
fixtures/_fixtures/environ.py
fixtures/_fixtures/logger.py
+fixtures/_fixtures/mockpatch.py
fixtures/_fixtures/monkeypatch.py
fixtures/_fixtures/packagepath.py
fixtures/_fixtures/popen.py
@@ -46,6 +48,7 @@
fixtures/tests/_fixtures/__init__.py
fixtures/tests/_fixtures/test_environ.py
fixtures/tests/_fixtures/test_logger.py
+fixtures/tests/_fixtures/test_mockpatch.py
fixtures/tests/_fixtures/test_monkeypatch.py
fixtures/tests/_fixtures/test_packagepath.py
fixtures/tests/_fixtures/test_popen.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures.egg-info/pbr.json new/fixtures-1.3.1/fixtures.egg-info/pbr.json
--- old/fixtures-1.2.0/fixtures.egg-info/pbr.json 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/fixtures.egg-info/pbr.json 2015-06-30 04:22:04.000000000 +0200
@@ -1 +1 @@
-{"is_release": true, "git_version": "f7502e8"}
\ No newline at end of file
+{"is_release": true, "git_version": "09afde5"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/fixtures.egg-info/requires.txt new/fixtures-1.3.1/fixtures.egg-info/requires.txt
--- old/fixtures-1.2.0/fixtures.egg-info/requires.txt 2015-05-05 00:14:19.000000000 +0200
+++ new/fixtures-1.3.1/fixtures.egg-info/requires.txt 2015-06-30 04:22:04.000000000 +0200
@@ -1,2 +1,3 @@
pbr>=0.11
+six
testtools>=0.9.22
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/requirements.txt new/fixtures-1.3.1/requirements.txt
--- old/fixtures-1.2.0/requirements.txt 2015-05-04 06:04:12.000000000 +0200
+++ new/fixtures-1.3.1/requirements.txt 2015-06-30 02:52:47.000000000 +0200
@@ -1,2 +1,3 @@
pbr>=0.11
+six
testtools>=0.9.22
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fixtures-1.2.0/test-requirements.txt new/fixtures-1.3.1/test-requirements.txt
--- old/fixtures-1.2.0/test-requirements.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/fixtures-1.3.1/test-requirements.txt 2015-06-22 02:24:03.000000000 +0200
@@ -0,0 +1 @@
+mock;python_version<'3.3'
[View Less]
1
0

01 Aug '15
Hello community,
here is the log from the commit of package apache-commons-collections for openSUSE:Factory checked in at 2015-08-01 11:38:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apache-commons-collections (Old)
and /work/SRC/openSUSE:Factory/.apache-commons-collections.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "apache-commons-collections"
Changes:
--------
--- /…
[View More]work/SRC/openSUSE:Factory/apache-commons-collections/apache-commons-collections.changes 2015-04-02 15:52:30.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.apache-commons-collections.new/apache-commons-collections.changes 2015-08-01 11:38:20.000000000 +0200
@@ -1,0 +2,6 @@
+Wed Jul 29 10:46:22 UTC 2015 - tchvatal(a)suse.com
+
+- Fix build with jdk8:
+ * java8-compat.patch
+
+-------------------------------------------------------------------
New:
----
java8-compat.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ apache-commons-collections.spec ++++++
--- /var/tmp/diff_new_pack.qECkHl/_old 2015-08-01 11:38:21.000000000 +0200
+++ /var/tmp/diff_new_pack.qECkHl/_new 2015-08-01 11:38:21.000000000 +0200
@@ -24,14 +24,17 @@
Summary: Commons Collections Package
License: Apache-2.0
Group: Development/Libraries/Java
-Url: http://commons.apache.org/%{base_name}/
+Url: http://commons.apache.org/commons-collections/
Source0: http://www.apache.org/dist/commons/%{base_name}/source/%{short_name}-%{vers…
Source1: commons-collections-testframework.pom
Patch0: jakarta-commons-collections-javadoc-nonet.patch
Patch1: commons-collections-3.2-build_xml.patch
+# PATCH-FIX-UPSTREAM build with jdk8
+Patch2: java8-compat.patch
BuildRequires: ant
BuildRequires: ant-junit
BuildRequires: apache-commons-parent
+BuildRequires: dos2unix
BuildRequires: java-devel
BuildRequires: javapackages-tools
BuildRequires: junit
@@ -91,6 +94,8 @@
%patch0 -p1
%patch1
+find . -name "*.java" |xargs dos2unix
+%patch2 -p1
# Fix file eof
sed -i 's/\r//' LICENSE.txt
++++++ java8-compat.patch ++++++
diff --git a/src/java/org/apache/commons/collections/MultiHashMap.java b/src/java/org/apache/commons/collections/MultiHashMap.java
index 25158b4..ab0ca71 100644
--- a/src/java/org/apache/commons/collections/MultiHashMap.java
+++ b/src/java/org/apache/commons/collections/MultiHashMap.java
@@ -331,21 +331,21 @@ public class MultiHashMap extends HashMap implements MultiMap {
* @param item the value to remove
* @return the value removed (which was passed in), null if nothing removed
*/
- public Object remove(Object key, Object item) {
+ public boolean remove(Object key, Object item) {
Collection valuesForKey = getCollection(key);
if (valuesForKey == null) {
- return null;
+ return false;
}
boolean removed = valuesForKey.remove(item);
if (removed == false) {
- return null;
+ return false;
}
// remove the list if it is now empty
// (saves space, and allows equals to work)
if (valuesForKey.isEmpty()){
remove(key);
}
- return item;
+ return true;
}
/**
diff --git a/src/java/org/apache/commons/collections/MultiMap.java b/src/java/org/apache/commons/collections/MultiMap.java
index 8cd7212..60f22ae 100644
--- a/src/java/org/apache/commons/collections/MultiMap.java
+++ b/src/java/org/apache/commons/collections/MultiMap.java
@@ -66,7 +66,7 @@ public interface MultiMap extends Map {
* @throws ClassCastException if the key or value is of an invalid type
* @throws NullPointerException if the key or value is null and null is invalid
*/
- public Object remove(Object key, Object item);
+ public boolean remove(Object key, Object item);
//-----------------------------------------------------------------------
/**
@@ -144,7 +144,7 @@ public interface MultiMap extends Map {
* @throws ClassCastException if the key is of an invalid type
* @throws NullPointerException if the key is null and null keys are invalid
*/
- Object remove(Object key);
+ //boolean remove(Object key);
/**
* Gets a collection containing all the values in the map.
diff --git a/src/java/org/apache/commons/collections/map/MultiKeyMap.java b/src/java/org/apache/commons/collections/map/MultiKeyMap.java
index 1ba1cea..3523b5c 100644
--- a/src/java/org/apache/commons/collections/map/MultiKeyMap.java
+++ b/src/java/org/apache/commons/collections/map/MultiKeyMap.java
@@ -197,7 +197,7 @@ public class MultiKeyMap
* @param key2 the second key
* @return the value mapped to the removed key, null if key not in map
*/
- public Object remove(Object key1, Object key2) {
+ public boolean remove(Object key1, Object key2) {
int hashCode = hash(key1, key2);
int index = map.hashIndex(hashCode, map.data.length);
AbstractHashedMap.HashEntry entry = map.data[index];
@@ -206,12 +206,14 @@ public class MultiKeyMap
if (entry.hashCode == hashCode && isEqualKey(entry, key1, key2)) {
Object oldValue = entry.getValue();
map.removeMapping(entry, index, previous);
- return oldValue;
+ //return oldValue;
+ return true;
}
previous = entry;
entry = entry.next;
}
- return null;
+ //return null;
+ return false;
}
/**
diff --git a/src/java/org/apache/commons/collections/map/MultiValueMap.java b/src/java/org/apache/commons/collections/map/MultiValueMap.java
index cc74fd7..b347e84 100644
--- a/src/java/org/apache/commons/collections/map/MultiValueMap.java
+++ b/src/java/org/apache/commons/collections/map/MultiValueMap.java
@@ -153,19 +153,19 @@ public class MultiValueMap extends AbstractMapDecorator implements MultiMap {
* @param value the value to remove
* @return the value removed (which was passed in), null if nothing removed
*/
- public Object remove(Object key, Object value) {
+ public boolean remove(Object key, Object value) {
Collection valuesForKey = getCollection(key);
if (valuesForKey == null) {
- return null;
+ return false;
}
boolean removed = valuesForKey.remove(value);
if (removed == false) {
- return null;
+ return false;
}
if (valuesForKey.isEmpty()) {
remove(key);
}
- return value;
+ return true;
}
/**
diff --git a/src/test/org/apache/commons/collections/TestMultiHashMap.java b/src/test/org/apache/commons/collections/TestMultiHashMap.java
index 722bec0..2268d85 100644
--- a/src/test/org/apache/commons/collections/TestMultiHashMap.java
+++ b/src/test/org/apache/commons/collections/TestMultiHashMap.java
@@ -464,11 +464,11 @@ public class TestMultiHashMap extends AbstractTestMap {
map.put("A", "AA");
map.put("A", "AB");
map.put("A", "AC");
- assertEquals(null, map.remove("C", "CA"));
- assertEquals(null, map.remove("A", "AD"));
- assertEquals("AC", map.remove("A", "AC"));
- assertEquals("AB", map.remove("A", "AB"));
- assertEquals("AA", map.remove("A", "AA"));
+ assertEquals(false, map.remove("C", "CA"));
+ assertEquals(false, map.remove("A", "AD"));
+ assertEquals(true, map.remove("A", "AC"));
+ assertEquals(true, map.remove("A", "AB"));
+ assertEquals(true, map.remove("A", "AA"));
assertEquals(new MultiHashMap(), map);
}
diff --git a/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java b/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
index 6e528fb..9faabf7 100644
--- a/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
+++ b/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
@@ -315,10 +315,10 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
switch (key.size()) {
case 2:
assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1)));
- assertEquals(value, multimap.remove(key.getKey(0), key.getKey(1)));
+ assertEquals(true, multimap.remove(key.getKey(0), key.getKey(1)));
assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1)));
assertEquals(size - 1, multimap.size());
- assertEquals(null, multimap.remove(key.getKey(0), key.getKey(1)));
+ assertEquals(false, multimap.remove(key.getKey(0), key.getKey(1)));
assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1)));
break;
case 3:
[View Less]
1
0
Hello community,
here is the log from the commit of package python3-pkginfo for openSUSE:Factory checked in at 2015-08-01 11:38:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-pkginfo (Old)
and /work/SRC/openSUSE:Factory/.python3-pkginfo.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-pkginfo"
Changes:
--------
New Changes file:
--- /dev/null 2015-07-22 21:25:…
[View More]44.928025004 +0200
+++ /work/SRC/openSUSE:Factory/.python3-pkginfo.new/python3-pkginfo.changes 2015-08-01 11:38:17.000000000 +0200
@@ -0,0 +1,19 @@
+-------------------------------------------------------------------
+Wed Jul 29 09:22:50 UTC 2015 - toddrme2178(a)gmail.com
+
+- Initial python 3 version.
+
+-------------------------------------------------------------------
+Tue Jun 2 15:18:33 UTC 2015 - p.drouand(a)gmail.com
+
+- Update to version 1.2.1
+ * Add overlooked Trove classifier for Python 3.4.
+- Changes from version 1.2 final
+ * Add support for Python 3.4, PyPy3.
+ * Add 100% coverage for pkginfo.commandline module.
+
+-------------------------------------------------------------------
+Tue Feb 4 12:36:30 UTC 2014 - speilicke(a)suse.com
+
+- Initial version
+
New:
----
pkginfo-1.2.1.tar.gz
python3-pkginfo.changes
python3-pkginfo.spec
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-pkginfo.spec ++++++
#
# spec file for package python3-pkginfo
#
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: python3-pkginfo
Version: 1.2.1
Release: 0
Summary: Query metadatdata from sdists / bdists / installed packages
License: Python-2.0
Group: Development/Languages/Python
Url: http://pypi.python.org/pypi/pkginfo/
Source: https://pypi.python.org/packages/source/p/pkginfo/pkginfo-%{version}.tar.gz
BuildRequires: python3-devel
Requires: python3-setuptools
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
%description
This package provides an API for querying the distutils metadata written in
the PKG-INFO file inside a source distriubtion (an sdist) or a
binary distribution (e.g., created by running bdist_egg). It can
also query the EGG-INFO directory of an installed distribution, and
the *.egg-info stored in a "development checkout"
(e.g, created by running setup.py develop).
%prep
%setup -q -n pkginfo-%{version}
%build
python3 setup.py build
%install
python3 setup.py install --prefix=%{_prefix} --root=%{buildroot}
%files
%defattr(-,root,root,-)
%doc README.txt CHANGES.txt
%{python3_sitelib}/pkginfo-%{version}-py*.egg-info
%{python3_sitelib}/pkginfo
%changelog
[View Less]
1
0
Hello community,
here is the log from the commit of package python-pyzmq for openSUSE:Factory checked in at 2015-08-01 11:38:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyzmq (Old)
and /work/SRC/openSUSE:Factory/.python-pyzmq.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyzmq"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyzmq/python-pyzmq.…
[View More]changes 2015-07-20 11:22:01.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyzmq.new/python-pyzmq.changes 2015-08-01 11:38:14.000000000 +0200
@@ -1,0 +2,6 @@
+Wed Jul 29 08:06:43 UTC 2015 - toddrme2178(a)gmail.com
+
+- Add additional optional dependencies that support additional
+ features and/or additional backends.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyzmq.spec ++++++
--- /var/tmp/diff_new_pack.eluUnt/_old 2015-08-01 11:38:15.000000000 +0200
+++ /var/tmp/diff_new_pack.eluUnt/_new 2015-08-01 11:38:15.000000000 +0200
@@ -26,9 +26,30 @@
Source: https://pypi.python.org/packages/source/p/pyzmq/pyzmq-%{version}.tar.gz
Source1: python-pyzmq-rpmlintrc
BuildRequires: python-devel
+BuildRequires: python-setuptools
BuildRequires: zeromq-devel
-# Test requirements:
BuildRequires: python-Cython
+%if 0%{?suse_version} && 0%{?suse_version} <= 1110
+BuildRequires: python-cffi
+BuildRequires: python-gevent
+BuildRequires: python-numpy
+BuildRequires: python-pexpect
+BuildRequires: python-py
+BuildRequires: python-simplejson
+BuildRequires: python-tornado
+BuildRequires: python-paramiko
+# Test requirements
+BuildRequires: python-nose
+%endif
+Requires: python
+Recommends: python-cffi
+Recommends: python-gevent
+Recommends: python-numpy
+Recommends: python-pexpect
+Recommends: python-py
+Recommends: python-simplejson
+Recommends: python-tornado
+Recommends: python-paramiko
Recommends: zeromq
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if 0%{?suse_version} && 0%{?suse_version} <= 1110
[View Less]
1
0
Hello community,
here is the log from the commit of package cacti for openSUSE:Factory checked in at 2015-08-01 11:38:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cacti (Old)
and /work/SRC/openSUSE:Factory/.cacti.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cacti"
Changes:
--------
--- /work/SRC/openSUSE:Factory/cacti/cacti.changes 2015-06-17 16:16:22.000000000 +0200
+++…
[View More] /work/SRC/openSUSE:Factory/.cacti.new/cacti.changes 2015-08-01 11:38:12.000000000 +0200
@@ -1,0 +2,31 @@
+Sun Jul 26 19:12:38 UTC 2015 - astieger(a)suse.com
+
+- cacti 0.8.8f:
+ * 0.8.8e Poller Script Parser is Broken
+ * cli/upgrade_database.php is missing releases
+ * Graph managment graphs.php save button does not work
+ * Poller Script Parser is Broken
+
+-------------------------------------------------------------------
+Mon Jul 20 10:53:24 UTC 2015 - joop.boonen(a)opensuse.org
+
+- Fixed the spec file so the package also builds for el7, Fedora 20 > etc.
+
+-------------------------------------------------------------------
+Sat Jul 18 17:37:49 UTC 2015 - astieger(a)suse.com
+
+- Update to 0.8.8e:
+ This update contains importand security fixes: [boo#937997]
+ - Multiple XSS and SQL injection vulnerabilities
+ - CVE-2015-4634 - SQL injection in graphs.php
+ Further fixes:
+ - Fixed issue with graph zooming failing to work
+ - Impossible to have a URL pointing directly to a graph
+ - Cannot delete data sources from the GUI
+ - viewing host in new tab - Undefined index: nodeid
+ - status_fail_date and status_rec_date are set incorrectly after
+ host is marked down
+ - Incorrect value in Hosts column on Host Templates page
+ - Incorrect row number in Devices -> (Edit) page
+
+-------------------------------------------------------------------
Old:
----
cacti-0.8.8d.tar.gz
New:
----
cacti-0.8.8f.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cacti.spec ++++++
--- /var/tmp/diff_new_pack.MA0cg7/_old 2015-08-01 11:38:13.000000000 +0200
+++ /var/tmp/diff_new_pack.MA0cg7/_new 2015-08-01 11:38:13.000000000 +0200
@@ -17,7 +17,7 @@
Name: cacti
-Version: 0.8.8d
+Version: 0.8.8f
Release: 0.0
Summary: Web Front-End to Monitor System Data via RRDtool
License: GPL-2.0+
@@ -81,8 +81,12 @@
%if 0%{?suse_version}
%define apxs /usr/sbin/apxs2
%else
+%if 0%{?rhel_version} >= 700 || 0%{?centos_version} >= 700 || 0%{?fedora_version} >= 20
+%define apxs /bin/apxs
+%else
%define apxs /usr/sbin/apxs
%endif
+%endif
%define apache2_sysconfdir %(%{apxs} -q SYSCONFDIR)
%if 0%{?suse_version} <= 1210
%define prefix %{_datadir}/cacti
++++++ cacti-0.8.8d.tar.gz -> cacti-0.8.8f.tar.gz ++++++
++++ 19922 lines of diff (skipped)
[View Less]
1
0
Hello community,
here is the log from the commit of package perl-YAML-Tiny for openSUSE:Factory checked in at 2015-08-01 11:38:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-YAML-Tiny (Old)
and /work/SRC/openSUSE:Factory/.perl-YAML-Tiny.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-YAML-Tiny"
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-YAML-Tiny/perl-…
[View More]YAML-Tiny.changes 2015-05-18 22:20:30.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-YAML-Tiny.new/perl-YAML-Tiny.changes 2015-08-01 11:38:10.000000000 +0200
@@ -1,0 +2,6 @@
+Tue Jul 28 09:27:07 UTC 2015 - coolo(a)suse.com
+
+- updated to 1.69
+ see /usr/share/doc/packages/perl-YAML-Tiny/Changes
+
+-------------------------------------------------------------------
Old:
----
YAML-Tiny-1.67.tar.gz
New:
----
YAML-Tiny-1.69.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-YAML-Tiny.spec ++++++
--- /var/tmp/diff_new_pack.w2JBjQ/_old 2015-08-01 11:38:11.000000000 +0200
+++ /var/tmp/diff_new_pack.w2JBjQ/_new 2015-08-01 11:38:11.000000000 +0200
@@ -17,7 +17,7 @@
Name: perl-YAML-Tiny
-Version: 1.67
+Version: 1.69
Release: 0
%define cpan_name YAML-Tiny
Summary: Read/Write YAML files with as little code as possible
@@ -32,7 +32,7 @@
BuildRequires: perl-macros
BuildRequires: perl(File::Temp) >= 0.19
BuildRequires: perl(JSON::PP)
-BuildRequires: perl(Test::More) >= 0.99
+BuildRequires: perl(Test::More) >= 0.88
%{perl_requires}
%description
++++++ YAML-Tiny-1.67.tar.gz -> YAML-Tiny-1.69.tar.gz ++++++
++++ 2270 lines of diff (skipped)
[View Less]
1
0
Hello community,
here is the log from the commit of package perl-Apache-Filter for openSUSE:Factory checked in at 2015-08-01 11:38:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Apache-Filter (Old)
and /work/SRC/openSUSE:Factory/.perl-Apache-Filter.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Apache-Filter"
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-…
[View More]Apache-Filter/perl-Apache-Filter.changes 2011-11-21 12:35:51.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.perl-Apache-Filter.new/perl-Apache-Filter.changes 2015-08-01 11:38:06.000000000 +0200
@@ -1,0 +2,6 @@
+Tue Jul 28 13:56:18 UTC 2015 - dimstar(a)opensuse.org
+
+- Fix build with latest apache2 package, where /usr/sbin/httpd2 is,
+ in accordance to upstream, named /usr/sbin/httpd.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Apache-Filter.spec ++++++
--- /var/tmp/diff_new_pack.6s2mr3/_old 2015-08-01 11:38:07.000000000 +0200
+++ /var/tmp/diff_new_pack.6s2mr3/_new 2015-08-01 11:38:07.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package perl-Apache-Filter
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -15,23 +15,24 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
-# norootforbuild
-
Name: perl-Apache-Filter
-BuildRequires: apache2-devel apache2-mod_perl libapr-util1-devel pcre-devel
+BuildRequires: apache2-devel
+BuildRequires: apache2-mod_perl
+BuildRequires: libapr-util1-devel
+BuildRequires: pcre-devel
BuildRequires: perl-macros
Version: 1.024
-Release: 221
+Release: 0
Provides: Apache-Filter
Requires: apache
-Requires: apache2-mod_perl perl-URI
+Requires: apache2-mod_perl
+Requires: perl-URI
Conflicts: perlmod
-AutoReqProv: on
-Group: Development/Libraries/Perl
-License: Artistic-1.0
Url: http://cpan.org/modules/by-module/Apache/
Summary: Alter the output of previous handlers
+License: Artistic-1.0
+Group: Development/Libraries/Perl
Source: Apache-Filter-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%{perl_requires}
@@ -55,22 +56,30 @@
they start printing to STDOUT. There should be almost no overhead for
doing this when there's only one element in the chain.
-
-
-Authors:
---------
- Ken Williams <ken(a)forum.swarthmore.edu>
-
%prep
%setup -q -n Apache-Filter-%{version}
%build
-export APACHE=/usr/sbin/httpd2
+if [ -x /usr/sbin/httpd2 ]; then
+ export APACHE=/usr/sbin/httpd2
+elif [ -x /usr/sbin/httpd ]; then
+ export APACHE=/usr/sbin/httpd
+else
+ echo "could not find the apache main executable..."
+ exit 1
+fi
perl Makefile.PL
make %{?_smp_mflags}
%install
-export APACHE=/usr/sbin/httpd2
+if [ -x /usr/sbin/httpd2 ]; then
+ export APACHE=/usr/sbin/httpd2
+elif [ -x /usr/sbin/httpd ]; then
+ export APACHE=/usr/sbin/httpd
+else
+ echo "could not find the apache main executable..."
+ exit 1
+fi
%perl_make_install
%perl_process_packlist
[View Less]
1
0
Hello community,
here is the log from the commit of package perl-PerlIO-via-Timeout for openSUSE:Factory checked in at 2015-08-01 11:38:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-PerlIO-via-Timeout (Old)
and /work/SRC/openSUSE:Factory/.perl-PerlIO-via-Timeout.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-PerlIO-via-Timeout"
Changes:
--------
--- /work/SRC/…
[View More]openSUSE:Factory/perl-PerlIO-via-Timeout/perl-PerlIO-via-Timeout.changes 2015-05-15 07:44:58.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-PerlIO-via-Timeout.new/perl-PerlIO-via-Timeout.changes 2015-08-01 11:38:05.000000000 +0200
@@ -1,0 +2,10 @@
+Wed Jul 29 09:01:07 UTC 2015 - coolo(a)suse.com
+
+- updated to 0.31
+ see /usr/share/doc/packages/perl-PerlIO-via-Timeout/Changes
+
+ 0.31 2015-07-29 07:59:46CEST+0200 Europe/Paris
+ . fixed a potential race condition case where read or write would be
+ blocking even with a timeout (thanks to Luciano Rocha)
+
+-------------------------------------------------------------------
Old:
----
PerlIO-via-Timeout-0.30.tar.gz
New:
----
PerlIO-via-Timeout-0.31.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-PerlIO-via-Timeout.spec ++++++
--- /var/tmp/diff_new_pack.jt8vbZ/_old 2015-08-01 11:38:05.000000000 +0200
+++ /var/tmp/diff_new_pack.jt8vbZ/_new 2015-08-01 11:38:05.000000000 +0200
@@ -17,7 +17,7 @@
Name: perl-PerlIO-via-Timeout
-Version: 0.30
+Version: 0.31
Release: 0
%define cpan_name PerlIO-via-Timeout
Summary: PerlIO layer that adds read & write timeout to a handle
++++++ PerlIO-via-Timeout-0.30.tar.gz -> PerlIO-via-Timeout-0.31.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PerlIO-via-Timeout-0.30/Changes new/PerlIO-via-Timeout-0.31/Changes
--- old/PerlIO-via-Timeout-0.30/Changes 2015-05-13 20:33:15.000000000 +0200
+++ new/PerlIO-via-Timeout-0.31/Changes 2015-07-29 07:59:52.000000000 +0200
@@ -1,3 +1,7 @@
+0.31 2015-07-29 07:59:46CEST+0200 Europe/Paris
+ . fixed a potential race condition case where read or write would be
+ blocking even with a timeout (thanks to Luciano Rocha)
+
0.30 2015-05-13 20:33:08CEST+0200 Europe/Amsterdam
0.29 2013-12-28 22:31:38 Europe/Paris
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PerlIO-via-Timeout-0.30/META.yml new/PerlIO-via-Timeout-0.31/META.yml
--- old/PerlIO-via-Timeout-0.30/META.yml 2015-05-13 20:33:15.000000000 +0200
+++ new/PerlIO-via-Timeout-0.31/META.yml 2015-07-29 07:59:52.000000000 +0200
@@ -21,7 +21,7 @@
provides:
PerlIO::via::Timeout:
file: lib/PerlIO/via/Timeout.pm
- version: 0.30
+ version: 0.31
requires:
Exporter: 5.57
PerlIO::via: 0
@@ -29,4 +29,4 @@
resources:
bugtracker: https://github.com/dams/perlio-via-timeout/issues
repository: git://github.com/dams/perlio-via-timeout.git
-version: 0.30
+version: 0.31
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PerlIO-via-Timeout-0.30/Makefile.PL new/PerlIO-via-Timeout-0.31/Makefile.PL
--- old/PerlIO-via-Timeout-0.30/Makefile.PL 2015-05-13 20:33:15.000000000 +0200
+++ new/PerlIO-via-Timeout-0.31/Makefile.PL 2015-07-29 07:59:52.000000000 +0200
@@ -92,7 +92,7 @@
"Test::More" => 0,
"Test::TCP" => 0
},
- "VERSION" => "0.30",
+ "VERSION" => "0.31",
"test" => {
"TESTS" => "t/*.t"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PerlIO-via-Timeout-0.30/README new/PerlIO-via-Timeout-0.31/README
--- old/PerlIO-via-Timeout-0.30/README 2015-05-13 20:33:15.000000000 +0200
+++ new/PerlIO-via-Timeout-0.31/README 2015-07-29 07:59:52.000000000 +0200
@@ -1,7 +1,7 @@
This archive contains the distribution PerlIO-via-Timeout,
-version 0.30:
+version 0.31:
a PerlIO layer that adds read & write timeout to a handle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PerlIO-via-Timeout-0.30/lib/PerlIO/via/Timeout.pm new/PerlIO-via-Timeout-0.31/lib/PerlIO/via/Timeout.pm
--- old/PerlIO-via-Timeout-0.30/lib/PerlIO/via/Timeout.pm 2015-05-13 20:33:15.000000000 +0200
+++ new/PerlIO-via-Timeout-0.31/lib/PerlIO/via/Timeout.pm 2015-07-29 07:59:52.000000000 +0200
@@ -7,7 +7,7 @@
# the same terms as the Perl 5 programming language system itself.
#
package PerlIO::via::Timeout;
-$PerlIO::via::Timeout::VERSION = '0.30';
+$PerlIO::via::Timeout::VERSION = '0.31';
# ABSTRACT: a PerlIO layer that adds read & write timeout to a handle
require 5.008;
@@ -15,7 +15,9 @@
use strict;
use warnings;
use Carp;
-use Errno qw(EBADF EINTR ETIMEDOUT);
+use Errno qw(EBADF EINTR ETIMEDOUT EAGAIN EWOULDBLOCK);
+use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
+
use Exporter 'import'; # gives you Exporter's import() method directly
@@ -60,40 +62,75 @@
close $_[1] or -1;
}
+sub _set_flags {
+ # params: FH, FLAGS
+ local $!;
+ fcntl($_[0], F_SETFL, $_[1])
+ or die "Can't set flags for the filehandle: $!\n";
+
+}
+
+sub _get_flags {
+ # params: FH
+ local $!;
+ my $flags = fcntl($_[0], F_GETFL, 0)
+ or die "Can't get flags for the filehandle: $!\n";
+ return $flags;
+}
+
sub READ {
# params: SELF, BUF, LEN, FH
my ($self, undef, $len, $fh) = @_;
- # There is a bug in PerlIO::via (possibly in PerlIO ?). We would like
- # to return -1 to signify error, but doing so doesn't work (it usually
- # segfault), it looks like the implementation is not complete. So we
- # return 0.
my ($prop, $fd) = __PACKAGE__->_fh2prop($fh);
my $timeout_enabled = $prop->{timeout_enabled};
my $read_timeout = $prop->{read_timeout};
my $offset = 0;
- while ($len) {
- if ( $timeout_enabled && $read_timeout && $len && ! _can_read_write($fh, $fd, $read_timeout, 0)) {
- $! ||= ETIMEDOUT;
- return 0;
- }
- my $r = sysread($fh, $_[1], $len, $offset);
- if (defined $r) {
- last unless $r;
- $len -= $r;
- $offset += $r;
- }
- elsif ($! != EINTR) {
- # There is a bug in PerlIO::via (possibly in PerlIO ?). We would like
- # to return -1 to signify error, but doing so doesn't work (it usually
- # segfault), it looks like the implementation is not complete. So we
- # return 0.
- return 0;
+
+ if ( ! $timeout_enabled || ! $read_timeout) {
+ while ($len) {
+ my $r = sysread($fh, $_[1], $len, $offset);
+ if (defined $r) {
+ last unless $r;
+ $len -= $r;
+ $offset += $r;
+ } elsif ($! != EINTR) {
+ # There is a bug in PerlIO::via (possibly in PerlIO ?). We would
+ # like to return -1 to signify error, but doing so doesn't work (it
+ # usually segfaults), it looks like the implementation is not
+ # complete. So we return 0.
+ return 0;
+ }
}
+ return $offset;
+ } else {
+ my $flags = _get_flags($fh);
+ _set_flags($fh, $flags | O_NONBLOCK);
+ while ($len) {
+ if ($len && ! _can_read_write($fh, $fd, $read_timeout, 0)) {
+ $! ||= ETIMEDOUT;
+ $offset = 0;
+ last;
+ }
+ my $r = sysread($fh, $_[1], $len, $offset);
+ if (defined $r) {
+ last unless $r; #EOF
+ $len -= $r;
+ $offset += $r;
+ } elsif ($! != EINTR && $! != EAGAIN && $! != EWOULDBLOCK) {
+ # There is a bug in PerlIO::via (possibly in PerlIO ?). We would
+ # like to return -1 to signify error, but doing so doesn't work (it
+ # usually segfaults), it looks like the implementation is not
+ # complete. So we return 0.
+ $offset = 0;
+ last;
+ }
+ }
+ _set_flags($fh, $flags);
+ return $offset;
}
- return $offset;
}
sub WRITE {
@@ -107,22 +144,39 @@
my $len = length $_[1];
my $offset = 0;
- while ($len) {
- if ( $len && $timeout_enabled && $write_timeout && ! _can_read_write($fh, $fd, $write_timeout, 1)) {
- $! ||= ETIMEDOUT;
- return -1;
- }
- my $r = syswrite($fh, $_[1], $len, $offset);
- if (defined $r) {
- $len -= $r;
- $offset += $r;
- last unless $len;
+
+ if ( ! $timeout_enabled || ! $write_timeout) {
+ while ($len) {
+ my $r = syswrite($fh, $_[1], $len, $offset);
+ if (defined $r) {
+ $len -= $r;
+ $offset += $r;
+ } elsif ($! != EINTR) {
+ return -1;
+ }
}
- elsif ($! != EINTR) {
- return -1;
+ } else {
+ my $flags = _get_flags($fh);
+ _set_flags($fh, $flags | O_NONBLOCK);
+ while ($len) {
+ if ( $len && ! _can_read_write($fh, $fd, $write_timeout, 1)) {
+ $! ||= ETIMEDOUT;
+ $offset = -1;
+ last;
+ }
+ my $r = syswrite($fh, $_[1], $len, $offset);
+ if (defined $r) {
+ $len -= $r;
+ $offset += $r;
+ last unless $len; # EOF
+ } elsif ($! != EINTR && $! != EAGAIN && $! != EWOULDBLOCK) {
+ $offset = -1;
+ last
+ }
}
+ _set_flags($fh, $flags);
+ return $offset;
}
- return $offset;
}
sub _can_read_write {
@@ -145,8 +199,8 @@
if ($nfound == -1) {
$! == EINTR
or croak(qq/select(2): '$!'/);
- redo if !$timeout || ($pending = $timeout - (Time::HiRes::time -
- $initial)) > 0;
+ !$timeout || ($pending -= Time::HiRes::time - $initial) > 0
+ and next;
$nfound = 0;
}
last;
@@ -209,7 +263,7 @@
=head1 VERSION
-version 0.30
+version 0.31
=head1 SYNOPSIS
[View Less]
1
0
Hello community,
here is the log from the commit of package pinpoint for openSUSE:Factory checked in at 2015-08-01 11:38:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pinpoint (Old)
and /work/SRC/openSUSE:Factory/.pinpoint.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pinpoint"
Changes:
--------
--- /work/SRC/openSUSE:Factory/pinpoint/pinpoint.changes 2013-01-21 17:44:30.…
[View More]000000000 +0100
+++ /work/SRC/openSUSE:Factory/.pinpoint.new/pinpoint.changes 2015-08-01 11:38:03.000000000 +0200
@@ -1,0 +2,17 @@
+Tue Jul 28 13:03:55 UTC 2015 - dimstar(a)opensuse.org
+
+- Update to version 0.1.6:
+ + --ignore-comments to generate slides without comments.
+ + Switched to a more recent version of GStreamer.
+ + Switched to a more recent version of Clutter-Gst.
+ + Background alignment.
+ + A LOT of fixes.
+- Add pkgconfig(clutter-gst-3.0) BuildRequires, new, explicitly
+ verified dependency.
+- Drop libtool BuildRequires and call to autogen.sh: the tarball
+ is properly bootstrapped.
+- Drop 0001-Fix-overwriting-of-slides-in-speaker-screen.patch and
+ 0001-Honor-stage-color-in-PDF-output.patch: No reference why
+ they were added, no tag line.
+
+-------------------------------------------------------------------
Old:
----
0001-Fix-overwriting-of-slides-in-speaker-screen.patch
0001-Honor-stage-color-in-PDF-output.patch
pinpoint-0.1.4+git.tar.xz
New:
----
pinpoint-0.1.6.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pinpoint.spec ++++++
--- /var/tmp/diff_new_pack.qqaQ7R/_old 2015-08-01 11:38:04.000000000 +0200
+++ /var/tmp/diff_new_pack.qqaQ7R/_new 2015-08-01 11:38:04.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package pinpoint
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,20 +17,16 @@
Name: pinpoint
-Version: 0.1.4+git
+Version: 0.1.6
Release: 0
Summary: Simple Presentation Tool for Excellent Presentations
License: LGPL-2.1+
Group: Productivity/Publishing/Presentation
Url: http://live.gnome.org/Pinpoint
-Source: %{name}-%{version}.tar.xz
-# PATCH-FIX-UPSTREAM 0001-Fix-overwriting-of-slides-in-speaker-screen.patch kkaempf(a)suse.de
-Patch1: 0001-Fix-overwriting-of-slides-in-speaker-screen.patch
-# PATCH-FIX-UPSTREAM 0001-Honor-stage-color-in-PDF-output.patch kkaempf(a)suse.de
-Patch2: 0001-Honor-stage-color-in-PDF-output.patch
-BuildRequires: libtool
+Source: http://download.gnome.org/sources/pinpoint/0.1/%{name}-%{version}.tar.xz
BuildRequires: pkgconfig(cairo-pdf)
-BuildRequires: pkgconfig(clutter-1.0)
+BuildRequires: pkgconfig(clutter-1.0) >= 1.12
+BuildRequires: pkgconfig(clutter-gst-3.0) >= 3.0.0
BuildRequires: pkgconfig(gdk-pixbuf-2.0)
BuildRequires: pkgconfig(gio-2.0)
BuildRequires: pkgconfig(librsvg-2.0)
@@ -44,20 +40,14 @@
%prep
%setup -q
-%patch1 -p1
-%patch2 -p1
%build
-./autogen.sh
%configure
make %{?_smp_mflags}
%install
%make_install
-%clean
-%{?buildroot:%__rm -rf %{buildroot}}
-
%files
%defattr(-,root,root)
%doc AUTHORS COPYING NEWS README
++++++ pinpoint-0.1.4+git.tar.xz -> pinpoint-0.1.6.tar.xz ++++++
++++ 17776 lines of diff (skipped)
[View Less]
1
0
Hello community,
here is the log from the commit of package python-pdfrw for openSUSE:Factory checked in at 2015-08-01 11:38:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pdfrw (Old)
and /work/SRC/openSUSE:Factory/.python-pdfrw.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pdfrw"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pdfrw/python-pdfrw.…
[View More]changes 2013-11-14 14:22:29.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-pdfrw.new/python-pdfrw.changes 2015-08-01 11:38:02.000000000 +0200
@@ -1,0 +2,5 @@
+Mon Jul 13 13:12:38 UTC 2015 - toddrme2178(a)gmail.com
+
+- Fix building on SLES 11
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pdfrw.spec ++++++
--- /var/tmp/diff_new_pack.KqadHa/_old 2015-08-01 11:38:03.000000000 +0200
+++ /var/tmp/diff_new_pack.KqadHa/_new 2015-08-01 11:38:03.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pdfrw
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -27,7 +27,9 @@
BuildRequires: python-setuptools
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%{py_requires}
+%if 0%{?suse_version} && 0%{?suse_version} > 1110
BuildArch: noarch
+%endif
%description
PDF file reader/writer library written in python
[View Less]
1
0