openSUSE Commits
Threads by month
- ----- 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
February 2015
- 1 participants
- 1390 discussions
Hello community,
here is the log from the commit of package armadillo for openSUSE:Factory checked in at 2015-02-27 10:59:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/armadillo (Old)
and /work/SRC/openSUSE:Factory/.armadillo.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "armadillo"
Changes:
--------
--- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes 2015-01-22 00:48:47.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.armadillo.new/armadillo.changes 2015-02-27 11:00:32.000000000 +0100
@@ -1,0 +2,14 @@
+Wed Feb 18 03:20:26 UTC 2015 - badshah400(a)gmail.com
+
+- Update to version 4.650.1:
+ + List of changes not documented upstream.
+- Changes from version 4.650 (Intravenous Caffeine Injector):
+ + Added randg() for generating random values from gamma
+ distributions (C++11 only).
+ + Added .head_rows() and .tail_rows() to submatrix views.
+ + Added .head_cols() and .tail_cols() to submatrix views.
+ + Expanded eigs_sym() to optionally calculate eigenvalues with
+ smallest/largest algebraic values fixes for handling of sparse
+ matrices.
+
+-------------------------------------------------------------------
Old:
----
armadillo-4.600.3.tar.gz
New:
----
armadillo-4.650.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ armadillo.spec ++++++
--- /var/tmp/diff_new_pack.vyNanH/_old 2015-02-27 11:00:34.000000000 +0100
+++ /var/tmp/diff_new_pack.vyNanH/_new 2015-02-27 11:00:34.000000000 +0100
@@ -19,7 +19,7 @@
%define soname libarmadillo4
Name: armadillo
-Version: 4.600.3
+Version: 4.650.1
Release: 0
Summary: Fast C++ matrix library with interfaces to LAPACK and ATLAS
License: MPL-2.0
++++++ armadillo-4.600.3.tar.gz -> armadillo-4.650.1.tar.gz ++++++
++++ 5949 lines of diff (skipped)
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package python3-tox for openSUSE:Factory checked in at 2015-02-27 10:59:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-tox (Old)
and /work/SRC/openSUSE:Factory/.python3-tox.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-tox"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-tox/python3-tox.changes 2015-02-16 22:25:07.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python3-tox.new/python3-tox.changes 2015-02-27 11:00:31.000000000 +0100
@@ -1,0 +2,20 @@
+Thu Feb 26 02:58:07 UTC 2015 - arun(a)gmx.de
+
+- update to version 1.9.0:
+ * fix issue193: Remove "--pre" from the default "install_command";
+ by default tox will now only install final releases from PyPI for
+ unpinned dependencies. Use "pip_pre = true" in a testenv or the
+ "--pre" command-line option to restore the previous behavior.
+ * fix issue199: fill resultlog structure ahead of virtualenv
+ creation
+ * refine determination if we run from Jenkins, thanks Borge Lanes.
+ * echo output to stdout when "--report-json" is used
+ * fix issue11: add a "skip_install" per-testenv setting which
+ prevents the installation of a package. Thanks Julian Krause.
+ * fix issue124: ignore command exit codes; when a command has a "-"
+ prefix, tox will ignore the exit code of that command
+ * fix issue198: fix broken envlist settings,
+ e.g. {py26,py27}{-lint,}
+ * fix issue191: lessen factor-use checks
+
+-------------------------------------------------------------------
Old:
----
tox-1.8.1.tar.gz
New:
----
tox-1.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-tox.spec ++++++
--- /var/tmp/diff_new_pack.klVcNa/_old 2015-02-27 11:00:32.000000000 +0100
+++ /var/tmp/diff_new_pack.klVcNa/_new 2015-02-27 11:00:32.000000000 +0100
@@ -17,7 +17,7 @@
Name: python3-tox
-Version: 1.8.1
+Version: 1.9.0
Release: 0
Summary: Virtualenv-based automation of test activities
License: MIT
++++++ tox-1.8.1.tar.gz -> tox-1.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/CHANGELOG new/tox-1.9.0/CHANGELOG
--- old/tox-1.8.1/CHANGELOG 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/CHANGELOG 2015-02-24 16:20:48.000000000 +0100
@@ -1,4 +1,29 @@
-1.8.1.dev
+1.9.0
+-----------
+
+- fix issue193: Remove ``--pre`` from the default ``install_command``; by
+ default tox will now only install final releases from PyPI for unpinned
+ dependencies. Use ``pip_pre = true`` in a testenv or the ``--pre``
+ command-line option to restore the previous behavior.
+
+- fix issue199: fill resultlog structure ahead of virtualenv creation
+
+- refine determination if we run from Jenkins, thanks Borge Lanes.
+
+- echo output to stdout when ``--report-json`` is used
+
+- fix issue11: add a ``skip_install`` per-testenv setting which
+ prevents the installation of a package. Thanks Julian Krause.
+
+- fix issue124: ignore command exit codes; when a command has a "-" prefix,
+ tox will ignore the exit code of that command
+
+- fix issue198: fix broken envlist settings, e.g. {py26,py27}{-lint,}
+
+- fix issue191: lessen factor-use checks
+
+
+1.8.1
-----------
- fix issue190: allow setenv to be empty.
@@ -11,7 +36,6 @@
- report subprocess exit code when execution fails. Thanks Marius
Gedminas.
-
1.8.0
-----------
@@ -83,7 +107,7 @@
- merged PR125: tox now sets "PYTHONHASHSEED" to a random value
and offers a "--hashseed" option to repeat a test run with a specific seed.
- You can also use --hashsheed=notset to instruct tox to leave the value
+ You can also use --hashsheed=noset to instruct tox to leave the value
alone. Thanks Chris Jerdonek for all the work behind this.
- fix issue132: removing zip_safe setting (so it defaults to false)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/CONTRIBUTORS new/tox-1.9.0/CONTRIBUTORS
--- old/tox-1.8.1/CONTRIBUTORS 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/CONTRIBUTORS 2015-02-24 16:20:48.000000000 +0100
@@ -24,8 +24,10 @@
Mattieu Agopian
Asmund Grammeltwedt
Ionel Maries Cristian
+Julian Krause
Alexandre Conrad
Morgan Fainberg
Marc Schlaich
Clark Boylan
Eugene Yunak
+Mark Hirota
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/PKG-INFO new/tox-1.9.0/PKG-INFO
--- old/tox-1.8.1/PKG-INFO 2014-10-24 14:58:39.000000000 +0200
+++ new/tox-1.9.0/PKG-INFO 2015-02-24 16:20:48.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: tox
-Version: 1.8.1
+Version: 1.9.0
Summary: virtualenv-based automation of test activities
Home-page: http://tox.testrun.org/
Author: holger krekel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/doc/announce/release-1.9.txt new/tox-1.9.0/doc/announce/release-1.9.txt
--- old/tox-1.8.1/doc/announce/release-1.9.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/tox-1.9.0/doc/announce/release-1.9.txt 2015-02-24 16:20:48.000000000 +0100
@@ -0,0 +1,59 @@
+tox 1.9: refinements, fixes
+=============================================================================
+
+This is a maintenance release of tox with a few backward-compatible
+enhancements. Thanks to Alexander Schepanosvki, Florian Schulze
+and others for the contributed fixes and improvements.
+
+More documentation about tox in general:
+
+ http://tox.testrun.org/
+
+Installation:
+
+ pip install -U tox
+
+code hosting and issue tracking on bitbucket:
+
+ https://bitbucket.org/hpk42/tox
+
+What is tox?
+----------------
+
+tox standardizes and automates tedious test activities driven from a
+simple ``tox.ini`` file, including:
+
+* creation and management of different virtualenv environments
+ with different Python interpreters
+* packaging and installing your package into each of them
+* running your test tool of choice, be it nose, py.test or unittest2 or other tools such as "sphinx" doc checks
+* testing dev packages against each other without needing to upload to PyPI
+
+best,
+Holger Krekel, merlinux GmbH
+
+
+1.9.0
+-----------
+
+- fix issue193: Remove ``--pre`` from the default ``install_command``; by
+ default tox will now only install final releases from PyPI for unpinned
+ dependencies. Use ``pip_pre = true`` in a testenv or the ``--pre``
+ command-line option to restore the previous behavior.
+
+- fix issue199: fill resultlog structure ahead of virtualenv creation
+
+- refine determination if we run from Jenkins, thanks Borge Lanes.
+
+- echo output to stdout when ``--report-json`` is used
+
+- fix issue11: add a ``skip_install`` per-testenv setting which
+ prevents the installation of a package. Thanks Julian Krause.
+
+- fix issue124: ignore command exit codes; when a command has a "-" prefix,
+ tox will ignore the exit code of that command
+
+- fix issue198: fix broken envlist settings, e.g. {py26,py27}{-lint,}
+
+- fix issue191: lessen factor-use checks
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/doc/conf.py new/tox-1.9.0/doc/conf.py
--- old/tox-1.8.1/doc/conf.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/doc/conf.py 2015-02-24 16:20:48.000000000 +0100
@@ -48,8 +48,8 @@
# built documents.
#
# The short X.Y version.
-release = "1.8"
-version = "1.8.0"
+release = "1.9"
+version = "1.9.0"
# The full version, including alpha/beta/rc tags.
# The language for content autogenerated by Sphinx. Refer to documentation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/doc/config.txt new/tox-1.9.0/doc/config.txt
--- old/tox-1.8.1/doc/config.txt 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/doc/config.txt 2015-02-24 16:20:48.000000000 +0100
@@ -86,6 +86,8 @@
will be appended (and may contain another ``\`` character ...).
For eventually performing a call to ``subprocess.Popen(args, ...)``
``args`` are determined by splitting the whole command by whitespace.
+ Similar to ``make`` recipe lines, any command with a leading ``-``
+ will ignore the exit code.
.. confval:: install_command=ARGV
@@ -106,7 +108,22 @@
**default**::
- pip install --pre {opts} {packages}
+ pip install {opts} {packages}
+
+.. confval:: pip_pre=True|False(default)
+
+ .. versionadded:: 1.9
+
+ If ``True``, adds ``--pre`` to the ``opts`` passed to
+ :confval:`install_command`. If :confval:`install_command` uses pip, this
+ will cause it to install the latest available pre-release of any
+ dependencies without a specified version. If ``False`` (the default), pip
+ will only install final releases of unpinned dependencies.
+
+ Passing the ``--pre`` command-line option to tox will force this to
+ ``True`` for all testenvs.
+
+ Don't set this option if your :confval:`install_command` does not use pip.
.. confval:: whitelist_externals=MULTI-LINE-LIST
@@ -237,6 +254,16 @@
**default**: ``False``
+.. confval:: skip_install=BOOL
+
+ .. versionadded:: 1.9
+
+ Do not install the current package. This can be used when you need the
+ virtualenv management but do not want to install the current package
+ into that environment.
+
+ **default**: ``False``
+
Substitutions
-------------
@@ -422,6 +449,8 @@
Let's go through this step by step.
+.. _generative-envlist:
+
Generative envlist
+++++++++++++++++++++++
@@ -455,6 +484,8 @@
flake
+.. _factors:
+
Factors and factor-conditional settings
++++++++++++++++++++++++++++++++++++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/doc/example/basic.txt new/tox-1.9.0/doc/example/basic.txt
--- old/tox-1.8.1/doc/example/basic.txt 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/doc/example/basic.txt 2015-02-24 16:20:48.000000000 +0100
@@ -74,9 +74,9 @@
(experimental) If you have a ``requirements.txt`` file
you can add it to your ``deps`` variable like this::
- deps = -rrequirements.txt
+ deps = -rrequirements.txt
-All installation commands are executed using ``{toxinidir}}``
+All installation commands are executed using ``{toxinidir}``
(the directory where ``tox.ini`` resides) as the current
working directory. Therefore, the underlying ``pip`` installation
will assume ``requirements.txt`` to exist at ``{toxinidir}/requirements.txt``.
@@ -191,10 +191,14 @@
command-line option to ``tox``. You can also override the hash seed value
per test environment in ``tox.ini`` as follows::
- [testenv:hash]
+ [testenv]
setenv =
PYTHONHASHSEED = 100
+If you wish to disable this feature, you can pass the command line option
+``--hashseed=noset`` when ``tox`` is invoked. You can also disable it from the
+``tox.ini`` by setting ``PYTHONHASHSEED = 0`` as described above.
+
.. _`in Python 3.3`: http://docs.python.org/3/whatsnew/3.3.html#builtin-functions-and-types
.. _PYTHONHASHSEED: http://docs.python.org/using/cmdline.html#envvar-PYTHONHASHSEED
@@ -240,3 +244,36 @@
python setup.py test -a "-epy27"
is equivalent to running ``tox -epy27``.
+
+Ignoring a command exit code
+----------------------------
+
+In some cases, you may want to ignore a command exit code. For example::
+
+ [testenv:py27]
+ commands = coverage erase
+ {envbindir}/python setup.py develop
+ coverage run -p setup.py test
+ coverage combine
+ - coverage html
+ {envbindir}/flake8 loads
+
+By using the ``-`` prefix, similar to a ``make`` recipe line, you can ignore
+the exit code for that command.
+
+Compressing dependency matrix
+-----------------------------
+
+If you have a large matrix of dependencies, python versions and/or environments you can
+use :ref:`generative-envlist` and :ref:`conditional settings <factors>` to express that in a concise form::
+
+ [tox]
+ envlist = py{26,27,33}-django{15,16}-{sqlite,mysql}
+
+ [testenv]
+ deps =
+ django15: Django>=1.5,<1.6
+ django16: Django>=1.6,<1.7
+ py33-mysql: PyMySQL ; use if both py33 and mysql are in an env name
+ py26,py27: urllib3 ; use if any of py26 or py27 are in an env name
+ py{26,27}-sqlite: mock ; mocking sqlite in python 2.x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/setup.py new/tox-1.9.0/setup.py
--- old/tox-1.8.1/setup.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/setup.py 2015-02-24 16:20:48.000000000 +0100
@@ -26,7 +26,7 @@
description='virtualenv-based automation of test activities',
long_description=open("README.rst").read(),
url='http://tox.testrun.org/',
- version='1.8.1',
+ version='1.9.0',
license='http://opensource.org/licenses/MIT',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
author='holger krekel',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tests/test_config.py new/tox-1.9.0/tests/test_config.py
--- old/tox-1.8.1/tests/test_config.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tests/test_config.py 2015-02-24 16:20:48.000000000 +0100
@@ -106,6 +106,7 @@
envconfig = config.envconfigs['python']
assert envconfig.args_are_paths
assert not envconfig.recreate
+ assert not envconfig.pip_pre
def test_defaults_distshare(self, tmpdir, newconfig):
config = newconfig([], "")
@@ -147,6 +148,20 @@
assert get_homedir() == "123"
+class TestGetcontextname:
+ def test_blank(self, monkeypatch):
+ monkeypatch.setattr(os, "environ", {})
+ assert getcontextname() is None
+
+ def test_jenkins(self, monkeypatch):
+ monkeypatch.setattr(os, "environ", {"JENKINS_URL": "xyz"})
+ assert getcontextname() == "jenkins"
+
+ def test_hudson_legacy(self, monkeypatch):
+ monkeypatch.setattr(os, "environ", {"HUDSON_URL": "xyz"})
+ assert getcontextname() == "jenkins"
+
+
class TestIniParser:
def test_getdefault_single(self, tmpdir, newconfig):
config = newconfig("""
@@ -620,6 +635,24 @@
'some_install', '--arg=%s/foo' % config.toxinidir, 'python',
'{opts}', '{packages}']
+ def test_pip_pre(self, newconfig):
+ config = newconfig("""
+ [testenv]
+ pip_pre=true
+ """)
+ envconfig = config.envconfigs['python']
+ assert envconfig.pip_pre
+
+ def test_pip_pre_cmdline_override(self, newconfig):
+ config = newconfig(
+ ['--pre'],
+ """
+ [testenv]
+ pip_pre=false
+ """)
+ envconfig = config.envconfigs['python']
+ assert envconfig.pip_pre
+
def test_downloadcache(self, newconfig, monkeypatch):
monkeypatch.delenv("PIP_DOWNLOAD_CACHE", raising=False)
config = newconfig("""
@@ -927,6 +960,31 @@
assert configs["py27"].setenv["X"] == "1"
assert "X" not in configs["py26"].setenv
+ @pytest.mark.issue191
+ def test_factor_use_not_checked(self, newconfig):
+ inisource="""
+ [tox]
+ envlist = py27-{a,b}
+
+ [testenv]
+ deps = b: test
+ """
+ configs = newconfig([], inisource).envconfigs
+ assert set(configs.keys()) == set(['py27-a', 'py27-b'])
+
+ @pytest.mark.issue198
+ def test_factors_groups_touch(self, newconfig):
+ inisource="""
+ [tox]
+ envlist = {a,b}{-x,}
+
+ [testenv]
+ deps=
+ a,b,x,y: dep
+ """
+ configs = newconfig([], inisource).envconfigs
+ assert set(configs.keys()) == set(['a', 'a-x', 'b', 'b-x'])
+
def test_period_in_factor(self, newconfig):
inisource="""
[tox]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tests/test_quickstart.py new/tox-1.9.0/tests/test_quickstart.py
--- old/tox-1.8.1/tests/test_quickstart.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tests/test_quickstart.py 2015-02-24 16:20:48.000000000 +0100
@@ -37,6 +37,7 @@
'Y', # py32
'Y', # py33
'Y', # py34
+ 'Y', # py35
'Y', # pypy
'N', # jython
'py.test', # command to run tests
@@ -54,7 +55,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy
+envlist = py26, py27, py32, py33, py34, py35, pypy
[testenv]
commands = py.test
@@ -77,6 +78,7 @@
'Y', # py32
'Y', # py33
'Y', # py34
+ 'Y', # py35
'Y', # pypy
'N', # jython
'nosetests', # command to run tests
@@ -94,7 +96,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy
+envlist = py26, py27, py32, py33, py34, py35, pypy
[testenv]
commands = nosetests
@@ -117,6 +119,7 @@
'Y', # py32
'Y', # py33
'Y', # py34
+ 'Y', # py35
'Y', # pypy
'N', # jython
'trial', # command to run tests
@@ -134,7 +137,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy
+envlist = py26, py27, py32, py33, py34, py35, pypy
[testenv]
commands = trial
@@ -157,6 +160,7 @@
'Y', # py32
'Y', # py33
'Y', # py34
+ 'Y', # py35
'Y', # pypy
'N', # jython
'py.test', # command to run tests
@@ -173,7 +177,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy
+envlist = py26, py27, py32, py33, py34, py35, pypy
[testenv]
commands = py.test
@@ -272,7 +276,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy, jython
+envlist = py26, py27, py32, py33, py34, py35, pypy, jython
[testenv]
commands = py.test
@@ -295,6 +299,7 @@
'', # py32
'', # py33
'', # py34
+ '', # py35
'', # pypy
'', # jython
'', # command to run tests
@@ -312,7 +317,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy, jython
+envlist = py26, py27, py32, py33, py34, py35, pypy, jython
[testenv]
commands = {envpython} setup.py test
@@ -339,6 +344,7 @@
'', # py32
'', # py33
'', # py34
+ '', # py35
'', # pypy
'', # jython
'', # command to run tests
@@ -357,7 +363,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py32, py33, py34, pypy, jython
+envlist = py26, py27, py32, py33, py34, py35, pypy, jython
[testenv]
commands = {envpython} setup.py test
@@ -459,6 +465,7 @@
'py32': True,
'py33': True,
'py34': True,
+ 'py35': True,
'pypy': True,
'commands': 'nosetests -v',
'deps': 'nose',
@@ -470,7 +477,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py27, py32, py33, py34, pypy
+envlist = py27, py32, py33, py34, py35, pypy
[testenv]
commands = nosetests -v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tests/test_result.py new/tox-1.9.0/tests/test_result.py
--- old/tox-1.8.1/tests/test_result.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tests/test_result.py 2015-02-24 16:20:48.000000000 +0100
@@ -10,6 +10,18 @@
p.write("whatever")
return p
+def test_pre_set_header(pkg):
+ replog = ResultLog()
+ d = replog.dict
+ assert replog.dict == d
+ assert replog.dict["reportversion"] == "1"
+ assert replog.dict["toxversion"] == tox.__version__
+ assert replog.dict["platform"] == sys.platform
+ assert replog.dict["host"] == py.std.socket.getfqdn()
+ data = replog.dumps_json()
+ replog2 = ResultLog.loads_json(data)
+ assert replog2.dict == replog.dict
+
def test_set_header(pkg):
replog = ResultLog()
d = replog.dict
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tests/test_venv.py new/tox-1.9.0/tests/test_venv.py
--- old/tox-1.8.1/tests/test_venv.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tests/test_venv.py 2015-02-24 16:20:48.000000000 +0100
@@ -211,6 +211,25 @@
assert "-i ABC" in args
assert "dep3" in args
+def test_install_deps_pre(newmocksession):
+ mocksession = newmocksession([], """
+ [testenv]
+ pip_pre=true
+ deps=
+ dep1
+ """)
+ venv = mocksession.getenv('python')
+ venv.create()
+ l = mocksession._pcalls
+ assert len(l) == 1
+ l[:] = []
+
+ venv.install_deps()
+ assert len(l) == 1
+ args = " ".join(l[0].args)
+ assert "--pre " in args
+ assert "dep1" in args
+
def test_installpkg_indexserver(newmocksession, tmpdir):
mocksession = newmocksession([], """
[tox]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox/__init__.py new/tox-1.9.0/tox/__init__.py
--- old/tox-1.8.1/tox/__init__.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox/__init__.py 2015-02-24 16:20:48.000000000 +0100
@@ -1,5 +1,5 @@
#
-__version__ = '1.8.1'
+__version__ = '1.9.0'
class exception:
class Error(Exception):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox/_cmdline.py new/tox-1.9.0/tox/_cmdline.py
--- old/tox-1.8.1/tox/_cmdline.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox/_cmdline.py 2015-02-24 16:20:48.000000000 +0100
@@ -11,6 +11,7 @@
import os
import sys
import subprocess
+import time
from tox._verlib import NormalizedVersion, IrrationalVersionError
from tox._venv import VirtualEnv
from tox._config import parseconfig
@@ -78,8 +79,8 @@
f.flush()
return f
- def popen(self, args, cwd=None, env=None, redirect=True, returnout=False):
- f = outpath = None
+ def popen(self, args, cwd=None, env=None, redirect=True, returnout=False, ignore_ret=False):
+ stdout = outpath = None
resultjson = self.session.config.option.resultjson
if resultjson or redirect:
f = self._initlogpath(self.id)
@@ -87,14 +88,18 @@
self.id, self.msg, args, env))
f.flush()
self.popen_outpath = outpath = py.path.local(f.name)
+ if resultjson:
+ stdout = subprocess.PIPE
+ else:
+ stdout = f
elif returnout:
- f = subprocess.PIPE
+ stdout = subprocess.PIPE
if cwd is None:
# XXX cwd = self.session.config.cwd
cwd = py.path.local()
try:
popen = self._popen(args, cwd, env=env,
- stdout=f, stderr=STDOUT)
+ stdout=stdout, stderr=STDOUT)
except OSError as e:
self.report.error("invocation failed (errno %d), args: %s, cwd: %s" %
(e.errno, args, cwd))
@@ -107,7 +112,28 @@
try:
self.report.logpopen(popen, env=env)
try:
- out, err = popen.communicate()
+ if resultjson and not redirect:
+ assert popen.stderr is None # prevent deadlock
+ out = None
+ last_time = time.time()
+ while 1:
+ # we have to read one byte at a time, otherwise there
+ # might be no output for a long time with slow tests
+ data = popen.stdout.read(1)
+ if data:
+ sys.stdout.write(data)
+ if '\n' in data or (time.time() - last_time) > 5:
+ # we flush on newlines or after 5 seconds to
+ # provide quick enough feedback to the user
+ # when printing a dot per test
+ sys.stdout.flush()
+ last_time = time.time()
+ f.write(data)
+ elif popen.poll() is not None:
+ popen.stdout.close()
+ break
+ else:
+ out, err = popen.communicate()
except KeyboardInterrupt:
self.report.keyboard_interrupt()
popen.wait()
@@ -115,7 +141,7 @@
ret = popen.wait()
finally:
self._popenlist.remove(popen)
- if ret:
+ if ret and not ignore_ret:
invoked = " ".join(map(str, popen.args))
if outpath:
self.report.error("invocation failed (exit code %d), logfile: %s" %
@@ -448,7 +474,7 @@
if self.setupenv(venv):
if venv.envconfig.develop:
self.developpkg(venv, self.config.setupdir)
- elif self.config.skipsdist:
+ elif self.config.skipsdist or venv.envconfig.skip_install:
self.finishvenv(venv)
else:
self.installpkg(venv, sdist_path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox/_config.py new/tox-1.9.0/tox/_config.py
--- old/tox-1.8.1/tox/_config.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox/_config.py 2015-02-24 16:20:48.000000000 +0100
@@ -18,7 +18,7 @@
default_factors = {'jython': 'jython', 'pypy': 'pypy', 'pypy3': 'pypy3',
'py': sys.executable}
-for version in '24,25,26,27,30,31,32,33,34'.split(','):
+for version in '24,25,26,27,30,31,32,33,34,35'.split(','):
default_factors['py' + version] = 'python%s.%s' % tuple(version)
def parseconfig(args=None, pkg=None):
@@ -105,6 +105,9 @@
dest="indexurl", metavar="URL",
help="set indexserver url (if URL is of form name=url set the "
"url for the 'name' indexserver, specifically)")
+ parser.add_argument("--pre", action="store_true", dest="pre",
+ help="install pre-releases and development versions of dependencies. "
+ "This will pass the --pre option to install_command (pip by default).")
parser.add_argument("-r", "--recreate", action="store_true",
dest="recreate",
help="force recreation of virtual environments")
@@ -284,10 +287,18 @@
config.envlist, all_envs = self._getenvdata(reader, toxsection)
- # configure testenvs
+ # factors used in config or predefined
known_factors = self._list_section_factors("testenv")
known_factors.update(default_factors)
known_factors.add("python")
+
+ # factors stated in config envlist
+ stated_envlist = reader.getdefault(toxsection, "envlist", replace=False)
+ if stated_envlist:
+ for env in _split_env(stated_envlist):
+ known_factors.update(env.split('-'))
+
+ # configure testenvs
for name in all_envs:
section = testenvprefix + name
factors = set(name.split('-'))
@@ -381,15 +392,19 @@
downloadcache = os.environ.get("PIP_DOWNLOAD_CACHE", downloadcache)
vc.downloadcache = py.path.local(downloadcache)
- pip_default_opts = ["--pre", "{opts}", "{packages}"]
vc.install_command = reader.getargv(
section,
"install_command",
- "pip install " + " ".join(pip_default_opts),
+ "pip install {opts} {packages}",
)
if '{packages}' not in vc.install_command:
raise tox.exception.ConfigError(
"'install_command' must contain '{packages}' substitution")
+ vc.pip_pre = config.option.pre or reader.getbool(
+ section, "pip_pre", False)
+
+ vc.skip_install = reader.getbool(section, "skip_install", False)
+
return vc
def _getenvdata(self, reader, toxsection):
@@ -451,7 +466,7 @@
def _expand_envstr(envstr):
# split by commas not in groups
- tokens = re.split(r'(\{[^}]+\})|,', envstr)
+ tokens = re.split(r'((?:\{[^}]+\})+)|,', envstr)
envlist = [''.join(g).strip()
for k, g in itertools.groupby(tokens, key=bool) if k]
@@ -797,7 +812,7 @@
return ps.yield_words
def getcontextname():
- if 'HUDSON_URL' in os.environ:
+ if any(env in os.environ for env in ['JENKINS_URL', 'HUDSON_URL']):
return 'jenkins'
return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox/_quickstart.py new/tox-1.9.0/tox/_quickstart.py
--- old/tox-1.8.1/tox/_quickstart.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox/_quickstart.py 2015-02-24 16:20:48.000000000 +0100
@@ -56,7 +56,7 @@
term_input = input
-all_envs = ['py26', 'py27', 'py32', 'py33', 'py34', 'pypy', 'jython']
+all_envs = ['py26', 'py27', 'py32', 'py33', 'py34', 'py35', 'pypy', 'jython']
PROMPT_PREFIX = '> '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox/_venv.py new/tox-1.9.0/tox/_venv.py
--- old/tox-1.8.1/tox/_venv.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox/_venv.py 2015-02-24 16:20:48.000000000 +0100
@@ -260,6 +260,8 @@
if self.envconfig.downloadcache:
self.envconfig.downloadcache.ensure(dir=1)
l.append("--download-cache=%s" % self.envconfig.downloadcache)
+ if self.envconfig.pip_pre:
+ l.append("--pre")
return l
def run_install_command(self, packages, options=(),
@@ -343,8 +345,19 @@
message = "commands[%s] | %s" % (i, ' '.join(
[str(x) for x in argv]))
action.setactivity("runtests", message)
+ # check to see if we need to ignore the return code
+ # if so, we need to alter the command line arguments
+ if argv[0].startswith("-"):
+ ignore_ret = True
+ if argv[0] == "-":
+ del argv[0]
+ else:
+ argv[0] = argv[0].lstrip("-")
+ else:
+ ignore_ret = False
+
try:
- self._pcall(argv, cwd=cwd, action=action, redirect=redirect)
+ self._pcall(argv, cwd=cwd, action=action, redirect=redirect, ignore_ret=ignore_ret)
except tox.exception.InvocationError:
val = sys.exc_info()[1]
self.session.report.error(str(val))
@@ -355,7 +368,7 @@
raise
def _pcall(self, args, venv=True, cwd=None, extraenv={},
- action=None, redirect=True):
+ action=None, redirect=True, ignore_ret=False):
for name in ("VIRTUALENV_PYTHON", "PYTHONDONTWRITEBYTECODE"):
try:
del os.environ[name]
@@ -367,7 +380,7 @@
try:
args[0] = self.getcommandpath(args[0], venv, cwd)
env = self._getenv(extraenv)
- return action.popen(args, cwd=cwd, env=env, redirect=redirect)
+ return action.popen(args, cwd=cwd, env=env, redirect=redirect, ignore_ret=ignore_ret)
finally:
os.environ['PATH'] = old
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox/result.py new/tox-1.9.0/tox/result.py
--- old/tox-1.8.1/tox/result.py 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox/result.py 2015-02-24 16:20:48.000000000 +0100
@@ -1,9 +1,7 @@
import sys
import py
-try:
- import json
-except ImportError:
- import simplejson as json
+from tox import __version__ as toxver
+import json
class ResultLog:
@@ -11,12 +9,11 @@
if dict is None:
dict = {}
self.dict = dict
-
- def set_header(self, installpkg):
- from tox import __version__ as toxver
self.dict.update({"reportversion": "1", "toxversion": toxver})
self.dict["platform"] = sys.platform
self.dict["host"] = py.std.socket.getfqdn()
+
+ def set_header(self, installpkg):
self.dict["installpkg"] = dict(
md5=installpkg.computehash("md5"),
sha256=installpkg.computehash("sha256"),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox.egg-info/PKG-INFO new/tox-1.9.0/tox.egg-info/PKG-INFO
--- old/tox-1.8.1/tox.egg-info/PKG-INFO 2014-10-24 14:58:39.000000000 +0200
+++ new/tox-1.9.0/tox.egg-info/PKG-INFO 2015-02-24 16:20:48.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: tox
-Version: 1.8.1
+Version: 1.9.0
Summary: virtualenv-based automation of test activities
Home-page: http://tox.testrun.org/
Author: holger krekel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox.egg-info/SOURCES.txt new/tox-1.9.0/tox.egg-info/SOURCES.txt
--- old/tox-1.8.1/tox.egg-info/SOURCES.txt 2014-10-24 14:58:39.000000000 +0200
+++ new/tox-1.9.0/tox.egg-info/SOURCES.txt 2015-02-24 16:20:48.000000000 +0100
@@ -29,6 +29,7 @@
doc/announce/release-1.4.3.txt
doc/announce/release-1.4.txt
doc/announce/release-1.8.txt
+doc/announce/release-1.9.txt
doc/example/basic.txt
doc/example/devenv.txt
doc/example/general.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.8.1/tox.ini new/tox-1.9.0/tox.ini
--- old/tox-1.8.1/tox.ini 2014-10-24 14:58:38.000000000 +0200
+++ new/tox-1.9.0/tox.ini 2015-02-24 16:20:48.000000000 +0100
@@ -1,5 +1,5 @@
[tox]
-envlist=py27,py26,py34,py33,py32,pypy,flakes
+envlist=py27,py26,py34,py33,pypy,flakes
[testenv:X]
commands=echo {posargs}
@@ -14,7 +14,7 @@
deps=sphinx
{[testenv]deps}
commands=
- py.test -v \
+ py.test -v
--junitxml={envlogdir}/junit-{envname}.xml \
check_sphinx.py {posargs}
@@ -22,9 +22,6 @@
deps = pytest-flakes>=0.2
commands = py.test --flakes -m flakes tox tests
-[testenv:py25]
-setenv= PIP_INSECURE=1
-
[pytest]
rsyncdirs=tests tox
addopts = -rsxXf
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package python3-requests for openSUSE:Factory checked in at 2015-02-27 10:59:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-requests (Old)
and /work/SRC/openSUSE:Factory/.python3-requests.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-requests"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-requests/python3-requests.changes 2015-01-20 12:37:38.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python3-requests.new/python3-requests.changes 2015-02-27 11:00:29.000000000 +0100
@@ -1,0 +2,33 @@
+Thu Feb 26 02:44:36 UTC 2015 - arun(a)gmx.de
+
+- update to version 2.5.3:
+ * Revert changes to our vendored certificate bundle. For more
+ context see (#2455, #2456, and http://bugs.python.org/issue23476)
+
+- changes from version 2.5.2:
+ * Features and Improvements
+ - Add sha256 fingerprint support. (shazow/urllib3#540)
+ - Improve the performance of headers. (shazow/urllib3#544)
+ * Bugfixes
+ - Copy pip’s import machinery. When downstream redistributors
+ remove requests.packages.urllib3 the import machinery will
+ continue to let those same symbols work. Example usage in
+ requests’ documentation and 3rd-party libraries relying on the
+ vendored copies of urllib3 will work without having to fallback
+ to the system urllib3.
+ - Attempt to quote parts of the URL on redirect if unquoting and
+ then quoting fails. (#2356)
+ - Fix filename type check for multipart form-data uploads. (#2411)
+ - Properly handle the case where a server issuing digest
+ authentication challenges provides both auth and auth-int
+ qop-values. (#2408)
+ - Fix a socket leak. (shazow/urllib3#549)
+ - Fix multiple Set-Cookie headers properly. (shazow/urllib3#534)
+ - Disable the built-in hostname verification. (shazow/urllib3#526)
+ - Fix the behaviour of decoding an exhausted
+ stream. (shazow/urllib3#535)
+ * Security
+ - Pulled in an updated cacert.pem.
+ - Drop RC4 from the default cipher list. (shazow/urllib3#551)
+
+-------------------------------------------------------------------
Old:
----
requests-2.5.1.tar.gz
New:
----
requests-2.5.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-requests.spec ++++++
--- /var/tmp/diff_new_pack.CCAdQI/_old 2015-02-27 11:00:31.000000000 +0100
+++ /var/tmp/diff_new_pack.CCAdQI/_new 2015-02-27 11:00:31.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python3-requests
#
-# Copyright (c) 2015 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,7 +17,7 @@
Name: python3-requests
-Version: 2.5.1
+Version: 2.5.3
Release: 0
Url: http://python-requests.org
Summary: Awesome Python HTTP Library That's Actually Usable
++++++ requests-2.5.1.tar.gz -> requests-2.5.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/HISTORY.rst new/requests-2.5.3/HISTORY.rst
--- old/requests-2.5.1/HISTORY.rst 2014-12-23 18:50:19.000000000 +0100
+++ new/requests-2.5.3/HISTORY.rst 2015-02-24 17:33:01.000000000 +0100
@@ -3,6 +3,61 @@
Release History
---------------
+2.5.3 (2015-02-24)
+++++++++++++++++++
+
+**Bugfixes**
+
+- Revert changes to our vendored certificate bundle. For more context see
+ (#2455, #2456, and http://bugs.python.org/issue23476)
+
+2.5.2 (2015-02-23)
+++++++++++++++++++
+
+**Features and Improvements**
+
+- Add sha256 fingerprint support. (`shazow/urllib3#540`_)
+
+- Improve the performance of headers. (`shazow/urllib3#544`_)
+
+**Bugfixes**
+
+- Copy pip's import machinery. When downstream redistributors remove
+ requests.packages.urllib3 the import machinery will continue to let those
+ same symbols work. Example usage in requests' documentation and 3rd-party
+ libraries relying on the vendored copies of urllib3 will work without having
+ to fallback to the system urllib3.
+
+- Attempt to quote parts of the URL on redirect if unquoting and then quoting
+ fails. (#2356)
+
+- Fix filename type check for multipart form-data uploads. (#2411)
+
+- Properly handle the case where a server issuing digest authentication
+ challenges provides both auth and auth-int qop-values. (#2408)
+
+- Fix a socket leak. (`shazow/urllib3#549`_)
+
+- Fix multiple ``Set-Cookie`` headers properly. (`shazow/urllib3#534`_)
+
+- Disable the built-in hostname verification. (`shazow/urllib3#526`_)
+
+- Fix the behaviour of decoding an exhausted stream. (`shazow/urllib3#535`_)
+
+**Security**
+
+- Pulled in an updated ``cacert.pem``.
+
+- Drop RC4 from the default cipher list. (`shazow/urllib3#551`_)
+
+.. _shazow/urllib3#551: https://github.com/shazow/urllib3/pull/551
+.. _shazow/urllib3#549: https://github.com/shazow/urllib3/pull/549
+.. _shazow/urllib3#544: https://github.com/shazow/urllib3/pull/544
+.. _shazow/urllib3#540: https://github.com/shazow/urllib3/pull/540
+.. _shazow/urllib3#535: https://github.com/shazow/urllib3/pull/535
+.. _shazow/urllib3#534: https://github.com/shazow/urllib3/pull/534
+.. _shazow/urllib3#526: https://github.com/shazow/urllib3/pull/526
+
2.5.1 (2014-12-23)
++++++++++++++++++
@@ -103,7 +158,7 @@
- Support for connect timeouts! Timeout now accepts a tuple (connect, read) which is used to set individual connect and read timeouts.
- Allow copying of PreparedRequests without headers/cookies.
- Updated bundled urllib3 version.
-- Refactored settings loading from environment — new `Session.merge_environment_settings`.
+- Refactored settings loading from environment -- new `Session.merge_environment_settings`.
- Handle socket errors in iter_content.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/LICENSE new/requests-2.5.3/LICENSE
--- old/requests-2.5.1/LICENSE 2014-06-23 21:22:31.000000000 +0200
+++ new/requests-2.5.3/LICENSE 2015-02-24 17:27:00.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright 2014 Kenneth Reitz
+Copyright 2015 Kenneth Reitz
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/PKG-INFO new/requests-2.5.3/PKG-INFO
--- old/requests-2.5.1/PKG-INFO 2014-12-23 18:55:23.000000000 +0100
+++ new/requests-2.5.3/PKG-INFO 2015-02-24 17:33:44.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: requests
-Version: 2.5.1
+Version: 2.5.3
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
@@ -9,11 +9,11 @@
Description: Requests: HTTP for Humans
=========================
- .. image:: https://badge.fury.io/py/requests.png
- :target: http://badge.fury.io/py/requests
+ .. image:: https://img.shields.io/pypi/v/requests.svg
+ :target: https://pypi.python.org/pypi/requests
- .. image:: https://pypip.in/d/requests/badge.png
- :target: https://crate.io/packages/requests/
+ .. image:: https://img.shields.io/pypi/dm/requests.svg
+ :target: https://pypi.python.org/pypi/requests
Requests is an Apache2 Licensed HTTP library, written in Python, for human
@@ -98,6 +98,61 @@
Release History
---------------
+ 2.5.3 (2015-02-24)
+ ++++++++++++++++++
+
+ **Bugfixes**
+
+ - Revert changes to our vendored certificate bundle. For more context see
+ (#2455, #2456, and http://bugs.python.org/issue23476)
+
+ 2.5.2 (2015-02-23)
+ ++++++++++++++++++
+
+ **Features and Improvements**
+
+ - Add sha256 fingerprint support. (`shazow/urllib3#540`_)
+
+ - Improve the performance of headers. (`shazow/urllib3#544`_)
+
+ **Bugfixes**
+
+ - Copy pip's import machinery. When downstream redistributors remove
+ requests.packages.urllib3 the import machinery will continue to let those
+ same symbols work. Example usage in requests' documentation and 3rd-party
+ libraries relying on the vendored copies of urllib3 will work without having
+ to fallback to the system urllib3.
+
+ - Attempt to quote parts of the URL on redirect if unquoting and then quoting
+ fails. (#2356)
+
+ - Fix filename type check for multipart form-data uploads. (#2411)
+
+ - Properly handle the case where a server issuing digest authentication
+ challenges provides both auth and auth-int qop-values. (#2408)
+
+ - Fix a socket leak. (`shazow/urllib3#549`_)
+
+ - Fix multiple ``Set-Cookie`` headers properly. (`shazow/urllib3#534`_)
+
+ - Disable the built-in hostname verification. (`shazow/urllib3#526`_)
+
+ - Fix the behaviour of decoding an exhausted stream. (`shazow/urllib3#535`_)
+
+ **Security**
+
+ - Pulled in an updated ``cacert.pem``.
+
+ - Drop RC4 from the default cipher list. (`shazow/urllib3#551`_)
+
+ .. _shazow/urllib3#551: https://github.com/shazow/urllib3/pull/551
+ .. _shazow/urllib3#549: https://github.com/shazow/urllib3/pull/549
+ .. _shazow/urllib3#544: https://github.com/shazow/urllib3/pull/544
+ .. _shazow/urllib3#540: https://github.com/shazow/urllib3/pull/540
+ .. _shazow/urllib3#535: https://github.com/shazow/urllib3/pull/535
+ .. _shazow/urllib3#534: https://github.com/shazow/urllib3/pull/534
+ .. _shazow/urllib3#526: https://github.com/shazow/urllib3/pull/526
+
2.5.1 (2014-12-23)
++++++++++++++++++
@@ -198,7 +253,7 @@
- Support for connect timeouts! Timeout now accepts a tuple (connect, read) which is used to set individual connect and read timeouts.
- Allow copying of PreparedRequests without headers/cookies.
- Updated bundled urllib3 version.
- - Refactored settings loading from environment — new `Session.merge_environment_settings`.
+ - Refactored settings loading from environment -- new `Session.merge_environment_settings`.
- Handle socket errors in iter_content.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/README.rst new/requests-2.5.3/README.rst
--- old/requests-2.5.1/README.rst 2014-12-09 03:41:38.000000000 +0100
+++ new/requests-2.5.3/README.rst 2015-02-24 17:27:00.000000000 +0100
@@ -1,11 +1,11 @@
Requests: HTTP for Humans
=========================
-.. image:: https://badge.fury.io/py/requests.png
- :target: http://badge.fury.io/py/requests
+.. image:: https://img.shields.io/pypi/v/requests.svg
+ :target: https://pypi.python.org/pypi/requests
-.. image:: https://pypip.in/d/requests/badge.png
- :target: https://crate.io/packages/requests/
+.. image:: https://img.shields.io/pypi/dm/requests.svg
+ :target: https://pypi.python.org/pypi/requests
Requests is an Apache2 Licensed HTTP library, written in Python, for human
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/__init__.py new/requests-2.5.3/requests/__init__.py
--- old/requests-2.5.1/requests/__init__.py 2014-12-23 18:50:46.000000000 +0100
+++ new/requests-2.5.3/requests/__init__.py 2015-02-24 17:33:01.000000000 +0100
@@ -36,17 +36,17 @@
The other HTTP methods are supported - see `requests.api`. Full documentation
is at <http://python-requests.org>.
-:copyright: (c) 2014 by Kenneth Reitz.
+:copyright: (c) 2015 by Kenneth Reitz.
:license: Apache 2.0, see LICENSE for more details.
"""
__title__ = 'requests'
-__version__ = '2.5.1'
-__build__ = 0x020501
+__version__ = '2.5.3'
+__build__ = 0x020503
__author__ = 'Kenneth Reitz'
__license__ = 'Apache 2.0'
-__copyright__ = 'Copyright 2014 Kenneth Reitz'
+__copyright__ = 'Copyright 2015 Kenneth Reitz'
# Attempt to enable urllib3's SNI support, if possible
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/auth.py new/requests-2.5.3/requests/auth.py
--- old/requests-2.5.1/requests/auth.py 2014-12-23 18:43:13.000000000 +0100
+++ new/requests-2.5.3/requests/auth.py 2015-02-24 17:27:00.000000000 +0100
@@ -124,13 +124,15 @@
s += os.urandom(8)
cnonce = (hashlib.sha1(s).hexdigest()[:16])
- noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, qop, HA2)
if _algorithm == 'MD5-SESS':
HA1 = hash_utf8('%s:%s:%s' % (HA1, nonce, cnonce))
if qop is None:
respdig = KD(HA1, "%s:%s" % (nonce, HA2))
elif qop == 'auth' or 'auth' in qop.split(','):
+ noncebit = "%s:%s:%s:%s:%s" % (
+ nonce, ncvalue, cnonce, 'auth', HA2
+ )
respdig = KD(HA1, noncebit)
else:
# XXX handle auth-int.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/compat.py new/requests-2.5.3/requests/compat.py
--- old/requests-2.5.1/requests/compat.py 2014-12-23 18:43:04.000000000 +0100
+++ new/requests-2.5.3/requests/compat.py 2015-02-24 17:27:00.000000000 +0100
@@ -21,58 +21,6 @@
#: Python 3.x?
is_py3 = (_ver[0] == 3)
-#: Python 3.0.x
-is_py30 = (is_py3 and _ver[1] == 0)
-
-#: Python 3.1.x
-is_py31 = (is_py3 and _ver[1] == 1)
-
-#: Python 3.2.x
-is_py32 = (is_py3 and _ver[1] == 2)
-
-#: Python 3.3.x
-is_py33 = (is_py3 and _ver[1] == 3)
-
-#: Python 3.4.x
-is_py34 = (is_py3 and _ver[1] == 4)
-
-#: Python 2.7.x
-is_py27 = (is_py2 and _ver[1] == 7)
-
-#: Python 2.6.x
-is_py26 = (is_py2 and _ver[1] == 6)
-
-#: Python 2.5.x
-is_py25 = (is_py2 and _ver[1] == 5)
-
-#: Python 2.4.x
-is_py24 = (is_py2 and _ver[1] == 4) # I'm assuming this is not by choice.
-
-
-# ---------
-# Platforms
-# ---------
-
-
-# Syntax sugar.
-_ver = sys.version.lower()
-
-is_pypy = ('pypy' in _ver)
-is_jython = ('jython' in _ver)
-is_ironpython = ('iron' in _ver)
-
-# Assume CPython, if nothing else.
-is_cpython = not any((is_pypy, is_jython, is_ironpython))
-
-# Windows-based system.
-is_windows = 'win32' in str(sys.platform).lower()
-
-# Standard Linux 2+ system.
-is_linux = ('linux' in str(sys.platform).lower())
-is_osx = ('darwin' in str(sys.platform).lower())
-is_hpux = ('hpux' in str(sys.platform).lower()) # Complete guess.
-is_solaris = ('solar==' in str(sys.platform).lower()) # Complete guess.
-
try:
import simplejson as json
except (ImportError, SyntaxError):
@@ -99,7 +47,6 @@
basestring = basestring
numeric_types = (int, long, float)
-
elif is_py3:
from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag
from urllib.request import parse_http_list, getproxies, proxy_bypass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/cookies.py new/requests-2.5.3/requests/cookies.py
--- old/requests-2.5.1/requests/cookies.py 2014-06-23 21:22:31.000000000 +0200
+++ new/requests-2.5.3/requests/cookies.py 2015-02-24 17:27:00.000000000 +0100
@@ -157,26 +157,28 @@
class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
- """Compatibility class; is a cookielib.CookieJar, but exposes a dict interface.
+ """Compatibility class; is a cookielib.CookieJar, but exposes a dict
+ interface.
This is the CookieJar we create by default for requests and sessions that
don't specify one, since some clients may expect response.cookies and
session.cookies to support dict operations.
- Don't use the dict interface internally; it's just for compatibility with
- with external client code. All `requests` code should work out of the box
- with externally provided instances of CookieJar, e.g., LWPCookieJar and
- FileCookieJar.
-
- Caution: dictionary operations that are normally O(1) may be O(n).
+ Requests does not use the dict interface internally; it's just for
+ compatibility with external client code. All requests code should work
+ out of the box with externally provided instances of ``CookieJar``, e.g.
+ ``LWPCookieJar`` and ``FileCookieJar``.
Unlike a regular CookieJar, this class is pickleable.
- """
+ .. warning:: dictionary operations that are normally O(1) may be O(n).
+ """
def get(self, name, default=None, domain=None, path=None):
"""Dict-like get() that also supports optional domain and path args in
order to resolve naming collisions from using one cookie jar over
- multiple domains. Caution: operation is O(n), not O(1)."""
+ multiple domains.
+
+ .. warning:: operation is O(n), not O(1)."""
try:
return self._find_no_duplicates(name, domain, path)
except KeyError:
@@ -199,37 +201,38 @@
return c
def iterkeys(self):
- """Dict-like iterkeys() that returns an iterator of names of cookies from the jar.
- See itervalues() and iteritems()."""
+ """Dict-like iterkeys() that returns an iterator of names of cookies
+ from the jar. See itervalues() and iteritems()."""
for cookie in iter(self):
yield cookie.name
def keys(self):
- """Dict-like keys() that returns a list of names of cookies from the jar.
- See values() and items()."""
+ """Dict-like keys() that returns a list of names of cookies from the
+ jar. See values() and items()."""
return list(self.iterkeys())
def itervalues(self):
- """Dict-like itervalues() that returns an iterator of values of cookies from the jar.
- See iterkeys() and iteritems()."""
+ """Dict-like itervalues() that returns an iterator of values of cookies
+ from the jar. See iterkeys() and iteritems()."""
for cookie in iter(self):
yield cookie.value
def values(self):
- """Dict-like values() that returns a list of values of cookies from the jar.
- See keys() and items()."""
+ """Dict-like values() that returns a list of values of cookies from the
+ jar. See keys() and items()."""
return list(self.itervalues())
def iteritems(self):
- """Dict-like iteritems() that returns an iterator of name-value tuples from the jar.
- See iterkeys() and itervalues()."""
+ """Dict-like iteritems() that returns an iterator of name-value tuples
+ from the jar. See iterkeys() and itervalues()."""
for cookie in iter(self):
yield cookie.name, cookie.value
def items(self):
- """Dict-like items() that returns a list of name-value tuples from the jar.
- See keys() and values(). Allows client-code to call "dict(RequestsCookieJar)
- and get a vanilla python dict of key value pairs."""
+ """Dict-like items() that returns a list of name-value tuples from the
+ jar. See keys() and values(). Allows client-code to call
+ ``dict(RequestsCookieJar)`` and get a vanilla python dict of key value
+ pairs."""
return list(self.iteritems())
def list_domains(self):
@@ -259,8 +262,9 @@
return False # there is only one domain in jar
def get_dict(self, domain=None, path=None):
- """Takes as an argument an optional domain and path and returns a plain old
- Python dict of name-value pairs of cookies that meet the requirements."""
+ """Takes as an argument an optional domain and path and returns a plain
+ old Python dict of name-value pairs of cookies that meet the
+ requirements."""
dictionary = {}
for cookie in iter(self):
if (domain is None or cookie.domain == domain) and (path is None
@@ -269,21 +273,24 @@
return dictionary
def __getitem__(self, name):
- """Dict-like __getitem__() for compatibility with client code. Throws exception
- if there are more than one cookie with name. In that case, use the more
- explicit get() method instead. Caution: operation is O(n), not O(1)."""
+ """Dict-like __getitem__() for compatibility with client code. Throws
+ exception if there are more than one cookie with name. In that case,
+ use the more explicit get() method instead.
+
+ .. warning:: operation is O(n), not O(1)."""
return self._find_no_duplicates(name)
def __setitem__(self, name, value):
- """Dict-like __setitem__ for compatibility with client code. Throws exception
- if there is already a cookie of that name in the jar. In that case, use the more
- explicit set() method instead."""
+ """Dict-like __setitem__ for compatibility with client code. Throws
+ exception if there is already a cookie of that name in the jar. In that
+ case, use the more explicit set() method instead."""
self.set(name, value)
def __delitem__(self, name):
- """Deletes a cookie given a name. Wraps cookielib.CookieJar's remove_cookie_by_name()."""
+ """Deletes a cookie given a name. Wraps ``cookielib.CookieJar``'s
+ ``remove_cookie_by_name()``."""
remove_cookie_by_name(self, name)
def set_cookie(self, cookie, *args, **kwargs):
@@ -300,10 +307,11 @@
super(RequestsCookieJar, self).update(other)
def _find(self, name, domain=None, path=None):
- """Requests uses this method internally to get cookie values. Takes as args name
- and optional domain and path. Returns a cookie.value. If there are conflicting cookies,
- _find arbitrarily chooses one. See _find_no_duplicates if you want an exception thrown
- if there are conflicting cookies."""
+ """Requests uses this method internally to get cookie values. Takes as
+ args name and optional domain and path. Returns a cookie.value. If
+ there are conflicting cookies, _find arbitrarily chooses one. See
+ _find_no_duplicates if you want an exception thrown if there are
+ conflicting cookies."""
for cookie in iter(self):
if cookie.name == name:
if domain is None or cookie.domain == domain:
@@ -313,10 +321,11 @@
raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
def _find_no_duplicates(self, name, domain=None, path=None):
- """__get_item__ and get call _find_no_duplicates -- never used in Requests internally.
- Takes as args name and optional domain and path. Returns a cookie.value.
- Throws KeyError if cookie is not found and CookieConflictError if there are
- multiple cookies that match name and optionally domain and path."""
+ """Both ``__get_item__`` and ``get`` call this function: it's never
+ used elsewhere in Requests. Takes as args name and optional domain and
+ path. Returns a cookie.value. Throws KeyError if cookie is not found
+ and CookieConflictError if there are multiple cookies that match name
+ and optionally domain and path."""
toReturn = None
for cookie in iter(self):
if cookie.name == name:
@@ -440,7 +449,7 @@
"""
if not isinstance(cookiejar, cookielib.CookieJar):
raise ValueError('You can only merge into CookieJar')
-
+
if isinstance(cookies, dict):
cookiejar = cookiejar_from_dict(
cookies, cookiejar=cookiejar, overwrite=False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/__init__.py new/requests-2.5.3/requests/packages/__init__.py
--- old/requests-2.5.1/requests/packages/__init__.py 2014-12-23 18:43:04.000000000 +0100
+++ new/requests-2.5.3/requests/packages/__init__.py 2015-02-24 17:27:00.000000000 +0100
@@ -1,3 +1,95 @@
+"""
+Copyright (c) Donald Stufft, pip, and individual contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
from __future__ import absolute_import
-from . import urllib3
+import sys
+
+
+class VendorAlias(object):
+
+ def __init__(self):
+ self._vendor_name = __name__
+ self._vendor_pkg = self._vendor_name + "."
+
+ def find_module(self, fullname, path=None):
+ if fullname.startswith(self._vendor_pkg):
+ return self
+
+ def load_module(self, name):
+ # Ensure that this only works for the vendored name
+ if not name.startswith(self._vendor_pkg):
+ raise ImportError(
+ "Cannot import %s, must be a subpackage of '%s'." % (
+ name, self._vendor_name,
+ )
+ )
+
+ # Check to see if we already have this item in sys.modules, if we do
+ # then simply return that.
+ if name in sys.modules:
+ return sys.modules[name]
+
+ # Check to see if we can import the vendor name
+ try:
+ # We do this dance here because we want to try and import this
+ # module without hitting a recursion error because of a bunch of
+ # VendorAlias instances on sys.meta_path
+ real_meta_path = sys.meta_path[:]
+ try:
+ sys.meta_path = [
+ m for m in sys.meta_path
+ if not isinstance(m, VendorAlias)
+ ]
+ __import__(name)
+ module = sys.modules[name]
+ finally:
+ # Re-add any additions to sys.meta_path that were made while
+ # during the import we just did, otherwise things like
+ # requests.packages.urllib3.poolmanager will fail.
+ for m in sys.meta_path:
+ if m not in real_meta_path:
+ real_meta_path.append(m)
+
+ # Restore sys.meta_path with any new items.
+ sys.meta_path = real_meta_path
+ except ImportError:
+ # We can't import the vendor name, so we'll try to import the
+ # "real" name.
+ real_name = name[len(self._vendor_pkg):]
+ try:
+ __import__(real_name)
+ module = sys.modules[real_name]
+ except ImportError:
+ raise ImportError("No module named '%s'" % (name,))
+
+ # If we've gotten here we've found the module we're looking for, either
+ # as part of our vendored package, or as the real name, so we'll add
+ # it to sys.modules as the vendored name so that we don't have to do
+ # the lookup again.
+ sys.modules[name] = module
+
+ # Finally, return the loaded module
+ return module
+
+
+sys.meta_path.append(VendorAlias())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/__init__.py new/requests-2.5.3/requests/packages/urllib3/__init__.py
--- old/requests-2.5.1/requests/packages/urllib3/__init__.py 2014-12-01 22:02:39.000000000 +0100
+++ new/requests-2.5.3/requests/packages/urllib3/__init__.py 2015-02-24 17:27:00.000000000 +0100
@@ -55,7 +55,7 @@
del NullHandler
-# Set security warning to only go off once by default.
+# Set security warning to always go off by default.
import warnings
warnings.simplefilter('always', exceptions.SecurityWarning)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/_collections.py new/requests-2.5.3/requests/packages/urllib3/_collections.py
--- old/requests-2.5.1/requests/packages/urllib3/_collections.py 2014-12-01 22:02:39.000000000 +0100
+++ new/requests-2.5.3/requests/packages/urllib3/_collections.py 2015-02-24 17:27:00.000000000 +0100
@@ -1,7 +1,7 @@
from collections import Mapping, MutableMapping
try:
from threading import RLock
-except ImportError: # Platform-specific: No threads available
+except ImportError: # Platform-specific: No threads available
class RLock:
def __enter__(self):
pass
@@ -10,16 +10,18 @@
pass
-try: # Python 2.7+
+try: # Python 2.7+
from collections import OrderedDict
except ImportError:
from .packages.ordered_dict import OrderedDict
-from .packages.six import iterkeys, itervalues
+from .packages.six import iterkeys, itervalues, PY3
__all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict']
+MULTIPLE_HEADERS_ALLOWED = frozenset(['cookie', 'set-cookie', 'set-cookie2'])
+
_Null = object()
@@ -97,7 +99,14 @@
return list(iterkeys(self._container))
-class HTTPHeaderDict(MutableMapping):
+_dict_setitem = dict.__setitem__
+_dict_getitem = dict.__getitem__
+_dict_delitem = dict.__delitem__
+_dict_contains = dict.__contains__
+_dict_setdefault = dict.setdefault
+
+
+class HTTPHeaderDict(dict):
"""
:param headers:
An iterable of field-value pairs. Must not contain multiple field names
@@ -129,25 +138,72 @@
'foo=bar, baz=quxx'
>>> headers['Content-Length']
'7'
-
- If you want to access the raw headers with their original casing
- for debugging purposes you can access the private ``._data`` attribute
- which is a normal python ``dict`` that maps the case-insensitive key to a
- list of tuples stored as (case-sensitive-original-name, value). Using the
- structure from above as our example:
-
- >>> headers._data
- {'set-cookie': [('Set-Cookie', 'foo=bar'), ('set-cookie', 'baz=quxx')],
- 'content-length': [('content-length', '7')]}
"""
def __init__(self, headers=None, **kwargs):
- self._data = {}
- if headers is None:
- headers = {}
- self.update(headers, **kwargs)
+ dict.__init__(self)
+ if headers is not None:
+ self.extend(headers)
+ if kwargs:
+ self.extend(kwargs)
+
+ def __setitem__(self, key, val):
+ return _dict_setitem(self, key.lower(), (key, val))
+
+ def __getitem__(self, key):
+ val = _dict_getitem(self, key.lower())
+ return ', '.join(val[1:])
+
+ def __delitem__(self, key):
+ return _dict_delitem(self, key.lower())
- def add(self, key, value):
+ def __contains__(self, key):
+ return _dict_contains(self, key.lower())
+
+ def __eq__(self, other):
+ if not isinstance(other, Mapping) and not hasattr(other, 'keys'):
+ return False
+ if not isinstance(other, type(self)):
+ other = type(self)(other)
+ return dict((k1, self[k1]) for k1 in self) == dict((k2, other[k2]) for k2 in other)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ values = MutableMapping.values
+ get = MutableMapping.get
+ update = MutableMapping.update
+
+ if not PY3: # Python 2
+ iterkeys = MutableMapping.iterkeys
+ itervalues = MutableMapping.itervalues
+
+ __marker = object()
+
+ def pop(self, key, default=__marker):
+ '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+ If key is not found, d is returned if given, otherwise KeyError is raised.
+ '''
+ # Using the MutableMapping function directly fails due to the private marker.
+ # Using ordinary dict.pop would expose the internal structures.
+ # So let's reinvent the wheel.
+ try:
+ value = self[key]
+ except KeyError:
+ if default is self.__marker:
+ raise
+ return default
+ else:
+ del self[key]
+ return value
+
+ def discard(self, key):
+ try:
+ del self[key]
+ except KeyError:
+ pass
+
+ def add(self, key, val):
"""Adds a (name, value) pair, doesn't overwrite the value if it already
exists.
@@ -156,43 +212,108 @@
>>> headers['foo']
'bar, baz'
"""
- self._data.setdefault(key.lower(), []).append((key, value))
+ key_lower = key.lower()
+ new_vals = key, val
+ # Keep the common case aka no item present as fast as possible
+ vals = _dict_setdefault(self, key_lower, new_vals)
+ if new_vals is not vals:
+ # new_vals was not inserted, as there was a previous one
+ if isinstance(vals, list):
+ # If already several items got inserted, we have a list
+ vals.append(val)
+ else:
+ # vals should be a tuple then, i.e. only one item so far
+ if key_lower in MULTIPLE_HEADERS_ALLOWED:
+ # Need to convert the tuple to list for further extension
+ _dict_setitem(self, key_lower, [vals[0], vals[1], val])
+ else:
+ _dict_setitem(self, key_lower, new_vals)
+
+ def extend(*args, **kwargs):
+ """Generic import function for any type of header-like object.
+ Adapted version of MutableMapping.update in order to insert items
+ with self.add instead of self.__setitem__
+ """
+ if len(args) > 2:
+ raise TypeError("update() takes at most 2 positional "
+ "arguments ({} given)".format(len(args)))
+ elif not args:
+ raise TypeError("update() takes at least 1 argument (0 given)")
+ self = args[0]
+ other = args[1] if len(args) >= 2 else ()
+
+ if isinstance(other, Mapping):
+ for key in other:
+ self.add(key, other[key])
+ elif hasattr(other, "keys"):
+ for key in other.keys():
+ self.add(key, other[key])
+ else:
+ for key, value in other:
+ self.add(key, value)
+
+ for key, value in kwargs.items():
+ self.add(key, value)
def getlist(self, key):
"""Returns a list of all the values for the named field. Returns an
empty list if the key doesn't exist."""
- return self[key].split(', ') if key in self else []
-
- def copy(self):
- h = HTTPHeaderDict()
- for key in self._data:
- for rawkey, value in self._data[key]:
- h.add(rawkey, value)
- return h
-
- def __eq__(self, other):
- if not isinstance(other, Mapping):
- return False
- other = HTTPHeaderDict(other)
- return dict((k1, self[k1]) for k1 in self._data) == \
- dict((k2, other[k2]) for k2 in other._data)
-
- def __getitem__(self, key):
- values = self._data[key.lower()]
- return ', '.join(value[1] for value in values)
-
- def __setitem__(self, key, value):
- self._data[key.lower()] = [(key, value)]
-
- def __delitem__(self, key):
- del self._data[key.lower()]
-
- def __len__(self):
- return len(self._data)
-
- def __iter__(self):
- for headers in itervalues(self._data):
- yield headers[0][0]
+ try:
+ vals = _dict_getitem(self, key.lower())
+ except KeyError:
+ return []
+ else:
+ if isinstance(vals, tuple):
+ return [vals[1]]
+ else:
+ return vals[1:]
+
+ # Backwards compatibility for httplib
+ getheaders = getlist
+ getallmatchingheaders = getlist
+ iget = getlist
def __repr__(self):
- return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
+ return "%s(%s)" % (type(self).__name__, dict(self.itermerged()))
+
+ def copy(self):
+ clone = type(self)()
+ for key in self:
+ val = _dict_getitem(self, key)
+ if isinstance(val, list):
+ # Don't need to convert tuples
+ val = list(val)
+ _dict_setitem(clone, key, val)
+ return clone
+
+ def iteritems(self):
+ """Iterate over all header lines, including duplicate ones."""
+ for key in self:
+ vals = _dict_getitem(self, key)
+ for val in vals[1:]:
+ yield vals[0], val
+
+ def itermerged(self):
+ """Iterate over all headers, merging duplicate ones together."""
+ for key in self:
+ val = _dict_getitem(self, key)
+ yield val[0], ', '.join(val[1:])
+
+ def items(self):
+ return list(self.iteritems())
+
+ @classmethod
+ def from_httplib(cls, message, duplicates=('set-cookie',)): # Python 2
+ """Read headers from a Python 2 httplib message object."""
+ ret = cls(message.items())
+ # ret now contains only the last header line for each duplicate.
+ # Importing with all duplicates would be nice, but this would
+ # mean to repeat most of the raw parsing already done, when the
+ # message object was created. Extracting only the headers of interest
+ # separately, the cookies, should be faster and requires less
+ # extra code.
+ for key in duplicates:
+ ret.discard(key)
+ for val in message.getheaders(key):
+ ret.add(key, val)
+ return ret
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/connectionpool.py new/requests-2.5.3/requests/packages/urllib3/connectionpool.py
--- old/requests-2.5.1/requests/packages/urllib3/connectionpool.py 2014-12-01 22:02:39.000000000 +0100
+++ new/requests-2.5.3/requests/packages/urllib3/connectionpool.py 2015-02-24 17:27:00.000000000 +0100
@@ -72,6 +72,21 @@
return '%s(host=%r, port=%r)' % (type(self).__name__,
self.host, self.port)
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ self.close()
+ # Return False to re-raise any potential exceptions
+ return False
+
+ def close():
+ """
+ Close all pooled connections and disable the pool.
+ """
+ pass
+
+
# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252
_blocking_errnos = set([errno.EAGAIN, errno.EWOULDBLOCK])
@@ -266,6 +281,10 @@
"""
pass
+ def _prepare_proxy(self, conn):
+ # Nothing to do for HTTP connections.
+ pass
+
def _get_timeout(self, timeout):
""" Helper that always returns a :class:`urllib3.util.Timeout` """
if timeout is _Default:
@@ -349,7 +368,7 @@
# Receive the response from the server
try:
- try: # Python 2.7+, use buffering of HTTP responses
+ try: # Python 2.7, use buffering of HTTP responses
httplib_response = conn.getresponse(buffering=True)
except TypeError: # Python 2.6 and older
httplib_response = conn.getresponse()
@@ -510,11 +529,18 @@
try:
# Request a connection from the queue.
+ timeout_obj = self._get_timeout(timeout)
conn = self._get_conn(timeout=pool_timeout)
+ conn.timeout = timeout_obj.connect_timeout
+
+ is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None)
+ if is_new_proxy_conn:
+ self._prepare_proxy(conn)
+
# Make the request on the httplib connection object.
httplib_response = self._make_request(conn, method, url,
- timeout=timeout,
+ timeout=timeout_obj,
body=body, headers=headers)
# If we're going to release the connection in ``finally:``, then
@@ -547,6 +573,14 @@
conn = None
raise SSLError(e)
+ except SSLError:
+ # Treat SSLError separately from BaseSSLError to preserve
+ # traceback.
+ if conn:
+ conn.close()
+ conn = None
+ raise
+
except (TimeoutError, HTTPException, SocketError, ConnectionError) as e:
if conn:
# Discard the connection for these exceptions. It will be
@@ -554,14 +588,13 @@
conn.close()
conn = None
- stacktrace = sys.exc_info()[2]
if isinstance(e, SocketError) and self.proxy:
e = ProxyError('Cannot connect to proxy.', e)
elif isinstance(e, (SocketError, HTTPException)):
e = ProtocolError('Connection aborted.', e)
- retries = retries.increment(method, url, error=e,
- _pool=self, _stacktrace=stacktrace)
+ retries = retries.increment(method, url, error=e, _pool=self,
+ _stacktrace=sys.exc_info()[2])
retries.sleep()
# Keep track of the error for the retry warning.
@@ -673,24 +706,26 @@
assert_fingerprint=self.assert_fingerprint)
conn.ssl_version = self.ssl_version
- if self.proxy is not None:
- # Python 2.7+
- try:
- set_tunnel = conn.set_tunnel
- except AttributeError: # Platform-specific: Python 2.6
- set_tunnel = conn._set_tunnel
-
- if sys.version_info <= (2, 6, 4) and not self.proxy_headers: # Python 2.6.4 and older
- set_tunnel(self.host, self.port)
- else:
- set_tunnel(self.host, self.port, self.proxy_headers)
-
- # Establish tunnel connection early, because otherwise httplib
- # would improperly set Host: header to proxy's IP:port.
- conn.connect()
-
return conn
+ def _prepare_proxy(self, conn):
+ """
+ Establish tunnel connection early, because otherwise httplib
+ would improperly set Host: header to proxy's IP:port.
+ """
+ # Python 2.7+
+ try:
+ set_tunnel = conn.set_tunnel
+ except AttributeError: # Platform-specific: Python 2.6
+ set_tunnel = conn._set_tunnel
+
+ if sys.version_info <= (2, 6, 4) and not self.proxy_headers: # Python 2.6.4 and older
+ set_tunnel(self.host, self.port)
+ else:
+ set_tunnel(self.host, self.port, self.proxy_headers)
+
+ conn.connect()
+
def _new_conn(self):
"""
Return a fresh :class:`httplib.HTTPSConnection`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/contrib/pyopenssl.py new/requests-2.5.3/requests/packages/urllib3/contrib/pyopenssl.py
--- old/requests-2.5.1/requests/packages/urllib3/contrib/pyopenssl.py 2014-12-01 22:02:39.000000000 +0100
+++ new/requests-2.5.3/requests/packages/urllib3/contrib/pyopenssl.py 2015-02-24 17:27:00.000000000 +0100
@@ -191,6 +191,11 @@
return b''
else:
raise
+ except OpenSSL.SSL.ZeroReturnError as e:
+ if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN:
+ return b''
+ else:
+ raise
except OpenSSL.SSL.WantReadError:
rd, wd, ed = select.select(
[self.socket], [], [], self.socket.gettimeout())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/poolmanager.py new/requests-2.5.3/requests/packages/urllib3/poolmanager.py
--- old/requests-2.5.1/requests/packages/urllib3/poolmanager.py 2014-08-29 21:37:47.000000000 +0200
+++ new/requests-2.5.3/requests/packages/urllib3/poolmanager.py 2015-02-24 17:27:00.000000000 +0100
@@ -8,7 +8,7 @@
from ._collections import RecentlyUsedContainer
from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool
from .connectionpool import port_by_scheme
-from .exceptions import LocationValueError
+from .exceptions import LocationValueError, MaxRetryError
from .request import RequestMethods
from .util.url import parse_url
from .util.retry import Retry
@@ -64,6 +64,14 @@
self.pools = RecentlyUsedContainer(num_pools,
dispose_func=lambda p: p.close())
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ self.clear()
+ # Return False to re-raise any potential exceptions
+ return False
+
def _new_pool(self, scheme, host, port):
"""
Create a new :class:`ConnectionPool` based on host, port and scheme.
@@ -167,7 +175,14 @@
if not isinstance(retries, Retry):
retries = Retry.from_int(retries, redirect=redirect)
- kw['retries'] = retries.increment(method, redirect_location)
+ try:
+ retries = retries.increment(method, url, response=response, _pool=conn)
+ except MaxRetryError:
+ if retries.raise_on_redirect:
+ raise
+ return response
+
+ kw['retries'] = retries
kw['redirect'] = redirect
log.info("Redirecting %s -> %s" % (url, redirect_location))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/response.py new/requests-2.5.3/requests/packages/urllib3/response.py
--- old/requests-2.5.1/requests/packages/urllib3/response.py 2014-08-29 21:37:47.000000000 +0200
+++ new/requests-2.5.3/requests/packages/urllib3/response.py 2015-02-24 17:27:00.000000000 +0100
@@ -4,12 +4,11 @@
from ._collections import HTTPHeaderDict
from .exceptions import ProtocolError, DecodeError, ReadTimeoutError
-from .packages.six import string_types as basestring, binary_type
+from .packages.six import string_types as basestring, binary_type, PY3
from .connection import HTTPException, BaseSSLError
from .util.response import is_fp_closed
-
class DeflateDecoder(object):
def __init__(self):
@@ -21,6 +20,9 @@
return getattr(self._obj, name)
def decompress(self, data):
+ if not data:
+ return data
+
if not self._first_try:
return self._obj.decompress(data)
@@ -36,9 +38,23 @@
self._data = None
+class GzipDecoder(object):
+
+ def __init__(self):
+ self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS)
+
+ def __getattr__(self, name):
+ return getattr(self._obj, name)
+
+ def decompress(self, data):
+ if not data:
+ return data
+ return self._obj.decompress(data)
+
+
def _get_decoder(mode):
if mode == 'gzip':
- return zlib.decompressobj(16 + zlib.MAX_WBITS)
+ return GzipDecoder()
return DeflateDecoder()
@@ -76,9 +92,10 @@
strict=0, preload_content=True, decode_content=True,
original_response=None, pool=None, connection=None):
- self.headers = HTTPHeaderDict()
- if headers:
- self.headers.update(headers)
+ if isinstance(headers, HTTPHeaderDict):
+ self.headers = headers
+ else:
+ self.headers = HTTPHeaderDict(headers)
self.status = status
self.version = version
self.reason = reason
@@ -202,7 +219,7 @@
except BaseSSLError as e:
# FIXME: Is there a better way to differentiate between SSLErrors?
- if not 'read operation timed out' in str(e): # Defensive:
+ if 'read operation timed out' not in str(e): # Defensive:
# This shouldn't happen but just in case we're missing an edge
# case, let's avoid swallowing SSL errors.
raise
@@ -267,14 +284,16 @@
Remaining parameters are passed to the HTTPResponse constructor, along
with ``original_response=r``.
"""
-
- headers = HTTPHeaderDict()
- for k, v in r.getheaders():
- headers.add(k, v)
+ headers = r.msg
+ if not isinstance(headers, HTTPHeaderDict):
+ if PY3: # Python 3
+ headers = HTTPHeaderDict(headers.items())
+ else: # Python 2
+ headers = HTTPHeaderDict.from_httplib(headers)
# HTTPResponse objects in Python 3 don't have a .strict attribute
strict = getattr(r, 'strict', 0)
- return ResponseCls(body=r,
+ resp = ResponseCls(body=r,
headers=headers,
status=r.status,
version=r.version,
@@ -282,6 +301,7 @@
strict=strict,
original_response=r,
**response_kw)
+ return resp
# Backwards-compatibility methods for httplib.HTTPResponse
def getheaders(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/util/connection.py new/requests-2.5.3/requests/packages/urllib3/util/connection.py
--- old/requests-2.5.1/requests/packages/urllib3/util/connection.py 2014-08-29 21:37:47.000000000 +0200
+++ new/requests-2.5.3/requests/packages/urllib3/util/connection.py 2015-02-24 17:27:00.000000000 +0100
@@ -82,6 +82,7 @@
err = _
if sock is not None:
sock.close()
+ sock = None
if err is not None:
raise err
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/util/retry.py new/requests-2.5.3/requests/packages/urllib3/util/retry.py
--- old/requests-2.5.1/requests/packages/urllib3/util/retry.py 2014-12-01 22:02:39.000000000 +0100
+++ new/requests-2.5.3/requests/packages/urllib3/util/retry.py 2015-02-24 17:27:00.000000000 +0100
@@ -190,7 +190,7 @@
return isinstance(err, (ReadTimeoutError, ProtocolError))
def is_forced_retry(self, method, status_code):
- """ Is this method/response retryable? (Based on method/codes whitelists)
+ """ Is this method/status code retryable? (Based on method/codes whitelists)
"""
if self.method_whitelist and method.upper() not in self.method_whitelist:
return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/packages/urllib3/util/ssl_.py new/requests-2.5.3/requests/packages/urllib3/util/ssl_.py
--- old/requests-2.5.1/requests/packages/urllib3/util/ssl_.py 2014-12-01 22:02:39.000000000 +0100
+++ new/requests-2.5.3/requests/packages/urllib3/util/ssl_.py 2015-02-24 17:27:00.000000000 +0100
@@ -1,5 +1,5 @@
from binascii import hexlify, unhexlify
-from hashlib import md5, sha1
+from hashlib import md5, sha1, sha256
from ..exceptions import SSLError
@@ -29,8 +29,8 @@
except ImportError:
_DEFAULT_CIPHERS = (
'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:'
- 'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:ECDH+RC4:'
- 'DH+RC4:RSA+RC4:!aNULL:!eNULL:!MD5'
+ 'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:'
+ '!eNULL:!MD5'
)
try:
@@ -96,7 +96,8 @@
# this digest.
hashfunc_map = {
16: md5,
- 20: sha1
+ 20: sha1,
+ 32: sha256,
}
fingerprint = fingerprint.replace(':', '').lower()
@@ -211,7 +212,9 @@
context.verify_mode = cert_reqs
if getattr(context, 'check_hostname', None) is not None: # Platform-specific: Python 3.2
- context.check_hostname = (context.verify_mode == ssl.CERT_REQUIRED)
+ # We do our own verification, including fingerprints and alternative
+ # hostnames. So disable it here
+ context.check_hostname = False
return context
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests/utils.py new/requests-2.5.3/requests/utils.py
--- old/requests-2.5.1/requests/utils.py 2014-12-23 18:43:04.000000000 +0100
+++ new/requests-2.5.3/requests/utils.py 2015-02-24 17:27:00.000000000 +0100
@@ -25,7 +25,8 @@
from . import certs
from .compat import parse_http_list as _parse_list_header
from .compat import (quote, urlparse, bytes, str, OrderedDict, unquote, is_py2,
- builtin_str, getproxies, proxy_bypass, urlunparse)
+ builtin_str, getproxies, proxy_bypass, urlunparse,
+ basestring)
from .cookies import RequestsCookieJar, cookiejar_from_dict
from .structures import CaseInsensitiveDict
from .exceptions import InvalidURL
@@ -115,7 +116,8 @@
def guess_filename(obj):
"""Tries to guess the filename of the given object."""
name = getattr(obj, 'name', None)
- if name and isinstance(name, builtin_str) and name[0] != '<' and name[-1] != '>':
+ if (name and isinstance(name, basestring) and name[0] != '<' and
+ name[-1] != '>'):
return os.path.basename(name)
@@ -418,10 +420,18 @@
This function passes the given URI through an unquote/quote cycle to
ensure that it is fully and consistently quoted.
"""
- # Unquote only the unreserved characters
- # Then quote only illegal characters (do not quote reserved, unreserved,
- # or '%')
- return quote(unquote_unreserved(uri), safe="!#$%&'()*+,/:;=?@[]~")
+ safe_with_percent = "!#$%&'()*+,/:;=?@[]~"
+ safe_without_percent = "!#$&'()*+,/:;=?@[]~"
+ try:
+ # Unquote only the unreserved characters
+ # Then quote only illegal characters (do not quote reserved,
+ # unreserved, or '%')
+ return quote(unquote_unreserved(uri), safe=safe_with_percent)
+ except InvalidURL:
+ # We couldn't unquote the given URI, so let's try quoting it, but
+ # there may be unquoted '%'s in the URI. We need to make sure they're
+ # properly quoted so they do not cause issues elsewhere.
+ return quote(uri, safe=safe_without_percent)
def address_in_network(ip, net):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/requests.egg-info/PKG-INFO new/requests-2.5.3/requests.egg-info/PKG-INFO
--- old/requests-2.5.1/requests.egg-info/PKG-INFO 2014-12-23 18:55:23.000000000 +0100
+++ new/requests-2.5.3/requests.egg-info/PKG-INFO 2015-02-24 17:33:43.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: requests
-Version: 2.5.1
+Version: 2.5.3
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
@@ -9,11 +9,11 @@
Description: Requests: HTTP for Humans
=========================
- .. image:: https://badge.fury.io/py/requests.png
- :target: http://badge.fury.io/py/requests
+ .. image:: https://img.shields.io/pypi/v/requests.svg
+ :target: https://pypi.python.org/pypi/requests
- .. image:: https://pypip.in/d/requests/badge.png
- :target: https://crate.io/packages/requests/
+ .. image:: https://img.shields.io/pypi/dm/requests.svg
+ :target: https://pypi.python.org/pypi/requests
Requests is an Apache2 Licensed HTTP library, written in Python, for human
@@ -98,6 +98,61 @@
Release History
---------------
+ 2.5.3 (2015-02-24)
+ ++++++++++++++++++
+
+ **Bugfixes**
+
+ - Revert changes to our vendored certificate bundle. For more context see
+ (#2455, #2456, and http://bugs.python.org/issue23476)
+
+ 2.5.2 (2015-02-23)
+ ++++++++++++++++++
+
+ **Features and Improvements**
+
+ - Add sha256 fingerprint support. (`shazow/urllib3#540`_)
+
+ - Improve the performance of headers. (`shazow/urllib3#544`_)
+
+ **Bugfixes**
+
+ - Copy pip's import machinery. When downstream redistributors remove
+ requests.packages.urllib3 the import machinery will continue to let those
+ same symbols work. Example usage in requests' documentation and 3rd-party
+ libraries relying on the vendored copies of urllib3 will work without having
+ to fallback to the system urllib3.
+
+ - Attempt to quote parts of the URL on redirect if unquoting and then quoting
+ fails. (#2356)
+
+ - Fix filename type check for multipart form-data uploads. (#2411)
+
+ - Properly handle the case where a server issuing digest authentication
+ challenges provides both auth and auth-int qop-values. (#2408)
+
+ - Fix a socket leak. (`shazow/urllib3#549`_)
+
+ - Fix multiple ``Set-Cookie`` headers properly. (`shazow/urllib3#534`_)
+
+ - Disable the built-in hostname verification. (`shazow/urllib3#526`_)
+
+ - Fix the behaviour of decoding an exhausted stream. (`shazow/urllib3#535`_)
+
+ **Security**
+
+ - Pulled in an updated ``cacert.pem``.
+
+ - Drop RC4 from the default cipher list. (`shazow/urllib3#551`_)
+
+ .. _shazow/urllib3#551: https://github.com/shazow/urllib3/pull/551
+ .. _shazow/urllib3#549: https://github.com/shazow/urllib3/pull/549
+ .. _shazow/urllib3#544: https://github.com/shazow/urllib3/pull/544
+ .. _shazow/urllib3#540: https://github.com/shazow/urllib3/pull/540
+ .. _shazow/urllib3#535: https://github.com/shazow/urllib3/pull/535
+ .. _shazow/urllib3#534: https://github.com/shazow/urllib3/pull/534
+ .. _shazow/urllib3#526: https://github.com/shazow/urllib3/pull/526
+
2.5.1 (2014-12-23)
++++++++++++++++++
@@ -198,7 +253,7 @@
- Support for connect timeouts! Timeout now accepts a tuple (connect, read) which is used to set individual connect and read timeouts.
- Allow copying of PreparedRequests without headers/cookies.
- Updated bundled urllib3 version.
- - Refactored settings loading from environment — new `Session.merge_environment_settings`.
+ - Refactored settings loading from environment -- new `Session.merge_environment_settings`.
- Handle socket errors in iter_content.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.5.1/test_requests.py new/requests-2.5.3/test_requests.py
--- old/requests-2.5.1/test_requests.py 2014-12-23 18:43:04.000000000 +0100
+++ new/requests-2.5.3/test_requests.py 2015-02-24 17:27:00.000000000 +0100
@@ -301,13 +301,15 @@
r = s.get(url)
assert r.status_code == 200
- def test_connection_error(self):
+ def test_connection_error_invalid_domain(self):
"""Connecting to an unknown domain should raise a ConnectionError"""
with pytest.raises(ConnectionError):
- requests.get("http://fooobarbangbazbing.httpbin.org")
+ requests.get("http://doesnotexist.google.com")
+ def test_connection_error_invalid_port(self):
+ """Connecting to an invalid port should raise a ConnectionError"""
with pytest.raises(ConnectionError):
- requests.get("http://httpbin.org:1")
+ requests.get("http://httpbin.org:1", timeout=1)
def test_LocationParseError(self):
"""Inputing a URL that cannot be parsed should raise an InvalidURL error"""
@@ -1265,6 +1267,32 @@
'http://localhost.localdomain:5000/v1.0/') == {}
assert get_environ_proxies('http://www.requests.com/') != {}
+ def test_guess_filename_when_int(self):
+ from requests.utils import guess_filename
+ assert None is guess_filename(1)
+
+ def test_guess_filename_when_filename_is_an_int(self):
+ from requests.utils import guess_filename
+ fake = type('Fake', (object,), {'name': 1})()
+ assert None is guess_filename(fake)
+
+ def test_guess_filename_with_file_like_obj(self):
+ from requests.utils import guess_filename
+ from requests import compat
+ fake = type('Fake', (object,), {'name': b'value'})()
+ guessed_name = guess_filename(fake)
+ assert b'value' == guessed_name
+ assert isinstance(guessed_name, compat.bytes)
+
+ def test_guess_filename_with_unicode_name(self):
+ from requests.utils import guess_filename
+ from requests import compat
+ filename = b'value'.decode('utf-8')
+ fake = type('Fake', (object,), {'name': filename})()
+ guessed_name = guess_filename(fake)
+ assert filename == guessed_name
+ assert isinstance(guessed_name, compat.str)
+
def test_is_ipv4_address(self):
from requests.utils import is_ipv4_address
assert is_ipv4_address('8.8.8.8')
@@ -1301,6 +1329,22 @@
assert username == percent_encoding_test_chars
assert password == percent_encoding_test_chars
+ def test_requote_uri_with_unquoted_percents(self):
+ """Ensure we handle unquoted percent signs in redirects.
+
+ See: https://github.com/kennethreitz/requests/issues/2356
+ """
+ from requests.utils import requote_uri
+ bad_uri = 'http://example.com/fiz?buz=%ppicture'
+ quoted = 'http://example.com/fiz?buz=%25ppicture'
+ assert quoted == requote_uri(bad_uri)
+
+ def test_requote_uri_properly_requotes(self):
+ """Ensure requoting doesn't break expectations."""
+ from requests.utils import requote_uri
+ quoted = 'http://example.com/fiz?buz=%25ppicture'
+ assert quoted == requote_uri(quoted)
+
class TestMorselToCookieExpires(unittest.TestCase):
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package abiword for openSUSE:Factory checked in at 2015-02-27 10:59:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/abiword (Old)
and /work/SRC/openSUSE:Factory/.abiword.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "abiword"
Changes:
--------
--- /work/SRC/openSUSE:Factory/abiword/abiword.changes 2015-01-30 17:50:03.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.abiword.new/abiword.changes 2015-02-27 11:00:28.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Feb 25 14:40:40 UTC 2015 - dimstar(a)opensuse.org
+
+- Drop loudmouth-devel BuildRequires: loudmouth is dead upstream
+ and not worth to be maintained.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ abiword.spec ++++++
--- /var/tmp/diff_new_pack.hxHCP4/_old 2015-02-27 11:00:29.000000000 +0100
+++ /var/tmp/diff_new_pack.hxHCP4/_new 2015-02-27 11:00:29.000000000 +0100
@@ -41,7 +41,6 @@
BuildRequires: libsoup-devel
BuildRequires: libwmf-devel
BuildRequires: link-grammar-devel
-BuildRequires: loudmouth-devel
BuildRequires: readline-devel
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(cairo) >= 1.10
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package dpic for openSUSE:Factory checked in at 2015-02-27 10:59:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dpic (Old)
and /work/SRC/openSUSE:Factory/.dpic.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dpic"
Changes:
--------
--- /work/SRC/openSUSE:Factory/dpic/dpic.changes 2014-01-15 16:24:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.dpic.new/dpic.changes 2015-02-27 11:00:26.000000000 +0100
@@ -1,0 +2,9 @@
+Wed Feb 25 21:20:15 UTC 2015 - dmitry_r(a)opensuse.org
+
+- Update to version 2015.02.16
+ * Reworked the handling of backslashes in strings in macro arguments.
+ * PDF output. Built-in variable dpicopt and variables added for
+ detecting command options. Linear objects reworked for
+ consistent fill.
+
+-------------------------------------------------------------------
Old:
----
dpic-2014.Jan.01.tar.gz
New:
----
dpic-2015.02.16.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dpic.spec ++++++
--- /var/tmp/diff_new_pack.uiHqlx/_old 2015-02-27 11:00:27.000000000 +0100
+++ /var/tmp/diff_new_pack.uiHqlx/_new 2015-02-27 11:00:27.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package dpic
#
-# Copyright (c) 2014 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,14 +17,13 @@
Name: dpic
-Version: 2014.01.01
+Version: 2015.02.16
Release: 0
-%define src_ver 2014.Jan.01
Summary: Pic language processor
License: BSD-2-Clause and CC-BY-3.0
Group: Productivity/Publishing/Other
Url: http://www.ece.uwaterloo.ca/~aplevich/dpic/
-Source0: https://ece.uwaterloo.ca/~aplevich/dpic/%{name}-%{src_ver}.tar.gz
+Source0: https://ece.uwaterloo.ca/~aplevich/dpic/%{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@@ -34,6 +33,7 @@
Summary: Documentation for dpic
Group: Documentation/Other
BuildArch: noarch
+Requires: dpic
%description doc
@@ -50,15 +50,17 @@
%install
%make_install PREFIX=%{_prefix}
install -Dm 644 doc/dpic.1 %{buildroot}%{_mandir}/man1/dpic.1
+install -Dm 644 doc/dpicdoc.pdf %{buildroot}%{_docdir}/dpic/dpicdoc.pdf
%files
%defattr(-,root,root)
-%{_bindir}/%{name}
%doc README CHANGES
+%exclude %{_docdir}/dpic/dpicdoc.pdf
+%{_bindir}/%{name}
%{_mandir}/man1/dpic.1*
%files doc
%defattr(-,root,root)
-%doc doc/dpicdoc.pdf
+%{_docdir}/dpic/dpicdoc.pdf
%changelog
++++++ dpic-2014.Jan.01.tar.gz -> dpic-2015.02.16.tar.gz ++++++
++++ 7796 lines of diff (skipped)
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package openvpn for openSUSE:Factory checked in at 2015-02-27 10:59:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openvpn (Old)
and /work/SRC/openSUSE:Factory/.openvpn.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openvpn"
Changes:
--------
--- /work/SRC/openSUSE:Factory/openvpn/openvpn.changes 2014-12-03 22:48:19.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.openvpn.new/openvpn.changes 2015-02-27 11:00:24.000000000 +0100
@@ -1,0 +2,5 @@
+Wed Feb 18 17:20:46 UTC 2015 - mt(a)suse.de
+
+- Fixed to use correct sha digest data length (boo#914166)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openvpn.spec ++++++
--- /var/tmp/diff_new_pack.Yh4grf/_old 2015-02-27 11:00:26.000000000 +0100
+++ /var/tmp/diff_new_pack.Yh4grf/_new 2015-02-27 11:00:26.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package openvpn
#
-# Copyright (c) 2014 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
++++++ openvpn-fips140-2.3.2.patch ++++++
--- /var/tmp/diff_new_pack.Yh4grf/_old 2015-02-27 11:00:26.000000000 +0100
+++ /var/tmp/diff_new_pack.Yh4grf/_new 2015-02-27 11:00:26.000000000 +0100
@@ -121,8 +121,9 @@
};
-struct md5_digest {
+- uint8_t digest [MD5_DIGEST_LENGTH];
+struct sha1_digest {
- uint8_t digest [MD5_DIGEST_LENGTH];
++ uint8_t digest [SHA_DIGEST_LENGTH];
};
-const char *md5sum(uint8_t *buf, int len, int n_print_chars, struct gc_arena *gc);
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package bats for openSUSE:Factory checked in at 2015-02-27 10:59:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/bats (Old)
and /work/SRC/openSUSE:Factory/.bats.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bats"
Changes:
--------
--- /work/SRC/openSUSE:Factory/bats/bats.changes 2015-02-25 02:17:05.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.bats.new/bats.changes 2015-02-27 11:00:24.000000000 +0100
@@ -1,0 +2,5 @@
+Tue Feb 24 22:29:38 UTC 2015 - seroton10(a)gmail.com
+
+- Fix RPM group
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ bats.spec ++++++
--- /var/tmp/diff_new_pack.gj2lXI/_old 2015-02-27 11:00:24.000000000 +0100
+++ /var/tmp/diff_new_pack.gj2lXI/_new 2015-02-27 11:00:24.000000000 +0100
@@ -21,7 +21,7 @@
Release: 0
Summary: Bash Automated Testing System
License: MIT
-Group: System/Base
+Group: Development/Tools
Url: https://github.com/sstephenson/bats
Source: https://github.com/sstephenson/bats/archive/v%{version}.tar.gz
Patch0: package-json.patch
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package gnome-initial-setup for openSUSE:Factory checked in at 2015-02-27 10:59:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-initial-setup (Old)
and /work/SRC/openSUSE:Factory/.gnome-initial-setup.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnome-initial-setup"
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnome-initial-setup/gnome-initial-setup.changes 2014-11-18 22:48:00.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.gnome-initial-setup.new/gnome-initial-setup.changes 2015-02-27 11:00:22.000000000 +0100
@@ -1,0 +2,13 @@
+Wed Feb 25 14:19:36 UTC 2015 - dimstar(a)opensuse.org
+
+- Update to version 3.14.3:
+ + Fix a crash in the network page.
+ + Append ibus sources to input sources list.
+ + Allow resizing on small screens.
+ + Use header bars on goa dialogs.
+ + Fix a crash in the language page.
+ + Hide the window instead of letting gdm kill it.
+ + Fix a crash in the keyboard page.
+ + Updated translations.
+
+-------------------------------------------------------------------
Old:
----
gnome-initial-setup-3.14.2.1.tar.xz
New:
----
gnome-initial-setup-3.14.3.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnome-initial-setup.spec ++++++
--- /var/tmp/diff_new_pack.ZZaXE5/_old 2015-02-27 11:00:23.000000000 +0100
+++ /var/tmp/diff_new_pack.ZZaXE5/_new 2015-02-27 11:00:23.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package gnome-initial-setup
#
-# Copyright (c) 2014 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,7 +17,7 @@
Name: gnome-initial-setup
-Version: 3.14.2.1
+Version: 3.14.3
Release: 0
Summary: GNOME Initial Setup Assistant
License: GPL-2.0+
++++++ gnome-initial-setup-3.14.2.1.tar.xz -> gnome-initial-setup-3.14.3.tar.xz ++++++
++++ 6677 lines of diff (skipped)
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package canna for openSUSE:Factory checked in at 2015-02-27 10:59:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/canna (Old)
and /work/SRC/openSUSE:Factory/.canna.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "canna"
Changes:
--------
--- /work/SRC/openSUSE:Factory/canna/canna.changes 2015-01-03 22:01:30.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.canna.new/canna.changes 2015-02-27 11:00:20.000000000 +0100
@@ -1,0 +2,6 @@
+Thu Feb 19 13:50:43 UTC 2015 - ftake(a)geeko.jp
+
+- Fix the insufficient fix for boo#910933
+ + fix /tmp/.iroha_unix is not removed at service start
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ canna.service ++++++
--- /var/tmp/diff_new_pack.50NugG/_old 2015-02-27 11:00:21.000000000 +0100
+++ /var/tmp/diff_new_pack.50NugG/_new 2015-02-27 11:00:21.000000000 +0100
@@ -3,7 +3,7 @@
[Service]
Type=forking
-ExecPre=/bin/rm -rf /tmp/.iroha_unix
+ExecStartPre=/bin/rm -rf /tmp/.iroha_unix
ExecStart=/usr/sbin/cannaserver -s -u wnn -r /var/lib/canna
ExecStopPost=/bin/rm -rf /tmp/.iroha_unix
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package libspnav for openSUSE:Factory checked in at 2015-02-27 10:59:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libspnav (Old)
and /work/SRC/openSUSE:Factory/.libspnav.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libspnav"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libspnav/libspnav.changes 2014-10-05 20:32:43.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.libspnav.new/libspnav.changes 2015-02-27 11:00:19.000000000 +0100
@@ -1,0 +2,8 @@
+Sat Feb 14 19:17:25 UTC 2015 - p.drouand(a)gmail.com
+
+- Update to version 0.2.3
+ * No changelog available
+- Add libspnav-0.2.3-lib_links.patch; fix libraries link against
+ $BUILDROOT
+
+-------------------------------------------------------------------
Old:
----
libspnav-0.2.2.tar.bz2
New:
----
libspnav-0.2.3-lib_links.patch
libspnav-0.2.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libspnav.spec ++++++
--- /var/tmp/diff_new_pack.fs3hoK/_old 2015-02-27 11:00:20.000000000 +0100
+++ /var/tmp/diff_new_pack.fs3hoK/_new 2015-02-27 11:00:20.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package libspnav
#
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2009,2011 Herbert Graeber
#
# All modifications and additions to the file contributed by third parties
@@ -18,13 +18,14 @@
Name: libspnav
-Version: 0.2.2
+Version: 0.2.3
Release: 0
Summary: Library for accessing 3D connexion devices
License: BSD-3-Clause
Group: Hardware/Other
Url: http://sourceforge.net/projects/spacenav/
-Source: %{name}-%{version}.tar.bz2
+Source: http://sourceforge.net/projects/spacenav/files/spacenav%20library%20%28SDK%…
+Patch: libspnav-0.2.3-lib_links.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: pkgconfig(x11)
@@ -82,20 +83,18 @@
%prep
%setup -q
+%patch -p1
%build
+# Set libdir properly
+sed -i "s/libdir=lib/libdir=%{_lib}/g" configure
%configure
-%__make opt="$RPM_OPT_FLAGS"
+sed -i "s/CFLAGS =/CFLAGS +=/g" Makefile
+make %{?_smp_mflags}
%install
-install -D -m 644 libspnav.so.0.1 $RPM_BUILD_ROOT%{_libdir}/libspnav.so.0.1
-install -D -m 644 spnav.h $RPM_BUILD_ROOT%{_includedir}/spnav.h
-install -D -m 644 spnav_magellan.h $RPM_BUILD_ROOT%{_includedir}/spnav_magellan.h
-install -D -m 644 spnav_config.h $RPM_BUILD_ROOT%{_includedir}/spnav_config.h
-pushd $RPM_BUILD_ROOT%{_libdir}
-ln -s libspnav.so.0.1 libspnav.so.0
-ln -s libspnav.so.0.1 libspnav.so
-popd
+make DESTDIR=%{buildroot} install
+rm -f %{buildroot}%{_libdir}/*.a
%post -n libspnav0 -p /sbin/ldconfig
++++++ libspnav-0.2.3-lib_links.patch ++++++
diff -Naur libspnav-0.2.3.orig/Makefile.in libspnav-0.2.3/Makefile.in
--- libspnav-0.2.3.orig/Makefile.in 2014-08-17 20:38:31.000000000 -0500
+++ libspnav-0.2.3/Makefile.in 2014-08-18 13:02:08.243930849 -0500
@@ -54,9 +54,11 @@
cp $(lib_so) $(DESTDIR)$(PREFIX)/$(libdir)/$(lib_so)
[ -n "$(soname)" ] && \
rm -f $(DESTDIR)$(PREFIX)/$(libdir)/$(soname) $(DESTDIR)$(PREFIX)/$(libdir)/$(devlink) && \
- ln -s $(DESTDIR)$(PREFIX)/$(libdir)/$(lib_so) $(DESTDIR)$(PREFIX)/$(libdir)/$(soname) && \
- ln -s $(DESTDIR)$(PREFIX)/$(libdir)/$(soname) $(DESTDIR)$(PREFIX)/$(libdir)/$(devlink) || \
- true
+ pushd $(DESTDIR)$(PREFIX)/$(libdir) && \
+ ln -s $(lib_so) $(soname) && \
+ ln -s $(soname) $(devlink) || \
+ true && \
+ popd
for h in $(hdr); do cp -p $(srcdir)/$$h $(DESTDIR)$(PREFIX)/include/; done
.PHONY: uninstall
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0