Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-Fabric for openSUSE:Factory 
checked in at 2022-08-02 22:09:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Fabric (Old)
 and      /work/SRC/openSUSE:Factory/.python-Fabric.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Fabric"

Tue Aug  2 22:09:55 2022 rev:39 rq:992357 version:2.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Fabric/python-Fabric.changes      
2022-05-17 17:24:50.739193396 +0200
+++ /work/SRC/openSUSE:Factory/.python-Fabric.new.1533/python-Fabric.changes    
2022-08-02 22:10:40.858030042 +0200
@@ -1,0 +2,9 @@
+Tue Aug  2 13:31:00 UTC 2022 - Otto Hollmann <otto.hollm...@suse.com>
+
+- Update to 2.7.1:
+  * [Bug] #1924: (also #2007) Overhaul behavior and testing re: merging 
together
+    different sources for the key_filename parameter in
+    Connection.connect_kwargs. This fixes a number of type-related errors
+    (string objects have no extend attribute, cannot add lists to strings, 
etc).
+
+-------------------------------------------------------------------

Old:
----
  fabric-2.7.0.tar.gz

New:
----
  fabric-2.7.1.tar.gz

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

Other differences:
------------------
++++++ python-Fabric.spec ++++++
--- /var/tmp/diff_new_pack.KHfxLq/_old  2022-08-02 22:10:41.302031322 +0200
+++ /var/tmp/diff_new_pack.KHfxLq/_new  2022-08-02 22:10:41.306031333 +0200
@@ -18,11 +18,11 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-Fabric
-Version:        2.7.0
+Version:        2.7.1
 Release:        0
 Summary:        A Pythonic tool for remote execution and deployment
 License:        BSD-2-Clause
-URL:            http://fabfile.org
+URL:            https://fabfile.org
 Source:         
https://files.pythonhosted.org/packages/source/f/fabric/fabric-%{version}.tar.gz
 # PATCH-FIX-UPSTREAM gh#fabric/fabric#2209
 Patch0:         fix-executable.patch

++++++ fabric-2.7.0.tar.gz -> fabric-2.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/PKG-INFO new/fabric-2.7.1/PKG-INFO
--- old/fabric-2.7.0/PKG-INFO   2022-03-26 02:43:59.000000000 +0100
+++ new/fabric-2.7.1/PKG-INFO   2022-07-15 00:39:03.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: fabric
-Version: 2.7.0
+Version: 2.7.1
 Summary: High level SSH command execution
 Home-page: https://fabfile.org
 Author: Jeff Forcier
@@ -12,11 +12,7 @@
 Project-URL: Changelog, https://www.fabfile.org/changelog.html
 Project-URL: CI, https://app.circleci.com/pipelines/github/fabric/fabric
 Project-URL: Twitter, https://twitter.com/pyfabric
-Description: 
-        To find out what's new in this version of Fabric, please see `the 
changelog
-        <https://fabfile.org/changelog.html>`_.
-        
-        |version| |python| |license| |ci| |coverage|
+Description: |version| |python| |license| |ci| |coverage|
         
         .. |version| image:: https://img.shields.io/pypi/v/fabric
             :target: https://pypi.org/project/fabric/
@@ -44,10 +40,11 @@
         implementation), extending their APIs to complement one another and 
provide
         additional functionality.
         
-        For a high level introduction, including example code, please see
-        `our main project website <https://fabfile.org>`_; or for detailed API 
docs, see
-        `the versioned API website <https://docs.fabfile.org>`_.
+        To find out what's new in this version of Fabric, please see `the 
changelog
+        <https://fabfile.org/changelog.html#{}>`_.
         
+        The project maintainer keeps a `roadmap
+        <https://bitprophet.org/projects#roadmap>`_ on his website.
         
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/README.rst new/fabric-2.7.1/README.rst
--- old/fabric-2.7.0/README.rst 2022-03-26 02:43:27.000000000 +0100
+++ new/fabric-2.7.1/README.rst 2022-07-15 00:37:01.000000000 +0200
@@ -26,6 +26,8 @@
 implementation), extending their APIs to complement one another and provide
 additional functionality.
 
-For a high level introduction, including example code, please see
-`our main project website <https://fabfile.org>`_; or for detailed API docs, 
see
-`the versioned API website <https://docs.fabfile.org>`_.
+To find out what's new in this version of Fabric, please see `the changelog
+<https://fabfile.org/changelog.html#{}>`_.
+
+The project maintainer keeps a `roadmap
+<https://bitprophet.org/projects#roadmap>`_ on his website.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/dev-requirements.txt 
new/fabric-2.7.1/dev-requirements.txt
--- old/fabric-2.7.0/dev-requirements.txt       2022-03-26 02:43:27.000000000 
+0100
+++ new/fabric-2.7.1/dev-requirements.txt       2022-07-15 00:37:01.000000000 
+0200
@@ -1,7 +1,7 @@
 # Us, of course
 -e .
 # Invocations for common project tasks
-invocations==2.5.0
+invocations==2.6.0
 # pytest-relaxed for test organization, display etc tweaks
 pytest-relaxed>=1.0.1,<1.1
 pytest==3.2.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/fabric/_version.py 
new/fabric-2.7.1/fabric/_version.py
--- old/fabric-2.7.0/fabric/_version.py 2022-03-26 02:43:27.000000000 +0100
+++ new/fabric-2.7.1/fabric/_version.py 2022-07-15 00:37:01.000000000 +0200
@@ -1,2 +1,2 @@
-__version_info__ = (2, 7, 0)
+__version_info__ = (2, 7, 1)
 __version__ = ".".join(map(str, __version_info__))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/fabric/connection.py 
new/fabric-2.7.1/fabric/connection.py
--- old/fabric-2.7.0/fabric/connection.py       2022-03-26 02:43:27.000000000 
+0100
+++ new/fabric-2.7.1/fabric/connection.py       2022-07-15 00:37:01.000000000 
+0200
@@ -467,33 +467,33 @@
         self.inline_ssh_env = inline_ssh_env
 
     def resolve_connect_kwargs(self, connect_kwargs):
-        # Grab connect_kwargs from config if not explicitly given.
-        if connect_kwargs is None:
-            # TODO: is it better to pre-empt conflicts w/ manually-handled
-            # connect() kwargs (hostname, username, etc) here or in open()?
-            # We're doing open() for now in case e.g. someone manually modifies
-            # .connect_kwargs attributewise, but otherwise it feels better to
-            # do it early instead of late.
-            connect_kwargs = self.config.connect_kwargs
-        # Special case: key_filename gets merged instead of overridden.
-        # TODO: probably want some sorta smart merging generally, special cases
-        # are bad.
-        elif "key_filename" in self.config.connect_kwargs:
-            kwarg_val = connect_kwargs.get("key_filename", [])
-            conf_val = self.config.connect_kwargs["key_filename"]
-            # Config value comes before kwarg value (because it may contain
-            # CLI flag value.)
-            connect_kwargs["key_filename"] = conf_val + kwarg_val
+        # TODO: is it better to pre-empt conflicts w/ manually-handled
+        # connect() kwargs (hostname, username, etc) here or in open()? We're
+        # doing open() for now in case e.g. someone manually modifies
+        # .connect_kwargs attributewise, but otherwise it feels better to do it
+        # early instead of late.
+        constructor_kwargs = connect_kwargs or {}
+        config_kwargs = self.config.connect_kwargs
+        constructor_keys = constructor_kwargs.get("key_filename", [])
+        config_keys = config_kwargs.get("key_filename", [])
+        ssh_config_keys = self.ssh_config.get("identityfile", [])
 
-        # SSH config identityfile values come last in the key_filename
-        # 'hierarchy'.
-        if "identityfile" in self.ssh_config:
-            connect_kwargs.setdefault("key_filename", [])
-            connect_kwargs["key_filename"].extend(
-                self.ssh_config["identityfile"]
-            )
+        # Default data: constructor if given, config otherwise
+        final_kwargs = constructor_kwargs or config_kwargs
 
-        return connect_kwargs
+        # Key filename: merge, in order, config (which includes CLI flags),
+        # then constructor kwargs, and finally SSH config file data.
+        # Make sure all are normalized to list as well!
+        final_keys = []
+        for value in (config_keys, constructor_keys, ssh_config_keys):
+            if isinstance(value, string_types):
+                value = [value]
+            final_keys.extend(value)
+        # Only populate if non-empty.
+        if final_keys:
+            final_kwargs["key_filename"] = final_keys
+
+        return final_kwargs
 
     def get_gateway(self):
         # SSH config wins over Invoke-style config
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/fabric.egg-info/PKG-INFO 
new/fabric-2.7.1/fabric.egg-info/PKG-INFO
--- old/fabric-2.7.0/fabric.egg-info/PKG-INFO   2022-03-26 02:43:58.000000000 
+0100
+++ new/fabric-2.7.1/fabric.egg-info/PKG-INFO   2022-07-15 00:39:03.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: fabric
-Version: 2.7.0
+Version: 2.7.1
 Summary: High level SSH command execution
 Home-page: https://fabfile.org
 Author: Jeff Forcier
@@ -12,11 +12,7 @@
 Project-URL: Changelog, https://www.fabfile.org/changelog.html
 Project-URL: CI, https://app.circleci.com/pipelines/github/fabric/fabric
 Project-URL: Twitter, https://twitter.com/pyfabric
-Description: 
-        To find out what's new in this version of Fabric, please see `the 
changelog
-        <https://fabfile.org/changelog.html>`_.
-        
-        |version| |python| |license| |ci| |coverage|
+Description: |version| |python| |license| |ci| |coverage|
         
         .. |version| image:: https://img.shields.io/pypi/v/fabric
             :target: https://pypi.org/project/fabric/
@@ -44,10 +40,11 @@
         implementation), extending their APIs to complement one another and 
provide
         additional functionality.
         
-        For a high level introduction, including example code, please see
-        `our main project website <https://fabfile.org>`_; or for detailed API 
docs, see
-        `the versioned API website <https://docs.fabfile.org>`_.
+        To find out what's new in this version of Fabric, please see `the 
changelog
+        <https://fabfile.org/changelog.html#{}>`_.
         
+        The project maintainer keeps a `roadmap
+        <https://bitprophet.org/projects#roadmap>`_ on his website.
         
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/setup.py new/fabric-2.7.1/setup.py
--- old/fabric-2.7.0/setup.py   2022-03-26 02:43:27.000000000 +0100
+++ new/fabric-2.7.1/setup.py   2022-07-15 00:37:01.000000000 +0200
@@ -45,16 +45,6 @@
     exec(fp.read(), None, _locals)
 version = _locals["__version__"]
 
-# Frankenstein long_description: changelog note + README
-long_description = """
-To find out what's new in this version of Fabric, please see `the changelog
-<https://fabfile.org/changelog.html>`_.
-
-{}
-""".format(
-    open("README.rst").read()
-)
-
 testing_deps = ["mock>=2.0.0,<3.0"]
 pytest_deps = ["pytest>=3.2.5,<4.0"]
 
@@ -63,7 +53,7 @@
     version=version,
     description="High level SSH command execution",
     license="BSD",
-    long_description=long_description,
+    long_description=open("README.rst").read(),
     author="Jeff Forcier",
     author_email="j...@bitprophet.org",
     url="https://fabfile.org";,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/sites/www/changelog.rst 
new/fabric-2.7.1/sites/www/changelog.rst
--- old/fabric-2.7.0/sites/www/changelog.rst    2022-03-26 02:43:56.000000000 
+0100
+++ new/fabric-2.7.1/sites/www/changelog.rst    2022-07-15 00:37:01.000000000 
+0200
@@ -13,6 +13,13 @@
     Click those projects' names in this paragraph to visit their changelogs and
     see what you might get if you upgrade your dependencies.
 
+- :release:`2.7.1 <2022-07-14>`
+- :bug:`1924` (also :issue:`2007`) Overhaul behavior and testing re: merging
+  together different sources for the ``key_filename`` parameter in
+  ``Connection.connect_kwargs``. This fixes a number of type-related errors
+  (string objects have no ``extend`` attribute, cannot add lists to strings,
+  etc). Thanks to Joey Dumont, Joseph Conti, and Jared Punzel for the reports;
+  and to Kyle Meyer for submitting an early version of the patch.
 - :release:`2.7.0 <2022-03-25>`
 - :support:`-` Overhaul administrative metadata and migrate to Circle-CI from
   Travis-CI.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/sites/www/index.rst 
new/fabric-2.7.1/sites/www/index.rst
--- old/fabric-2.7.0/sites/www/index.rst        2022-03-26 02:43:27.000000000 
+0100
+++ new/fabric-2.7.1/sites/www/index.rst        2022-07-15 00:37:01.000000000 
+0200
@@ -1,5 +1,12 @@
-Welcome to Fabric!
-==================
+.. include:: ../../README.rst
+
+This website covers project information for Fabric such as the changelog,
+contribution guidelines, and so forth. Detailed usage and API documentation can
+be found at our code documentation site, `docs.fabfile.org
+<https://docs.fabfile.org>`_.
+
+Please see below for a high level intro, or the navigation on the left for the
+rest of the site content.
 
 What is Fabric?
 ---------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fabric-2.7.0/tests/connection.py 
new/fabric-2.7.1/tests/connection.py
--- old/fabric-2.7.0/tests/connection.py        2022-03-26 02:43:27.000000000 
+0100
+++ new/fabric-2.7.1/tests/connection.py        2022-07-15 00:37:01.000000000 
+0200
@@ -801,6 +801,18 @@
                     ],
                     id="All sources",
                 ),
+                param(
+                    True,
+                    True,
+                    "kwarg.key",
+                    [
+                        "configured.key",
+                        "kwarg.key",
+                        "ssh-config-B.key",
+                        "ssh-config-A.key",
+                    ],
+                    id="All sources, kwarg (string)",
+                ),
                 param(False, False, False, [], id="No sources"),
                 param(
                     True,
@@ -824,6 +836,13 @@
                     id="Connection kwarg only",
                 ),
                 param(
+                    False,
+                    False,
+                    "kwarg.key",
+                    ["kwarg.key"],
+                    id="Connection kwarg (string) only",
+                ),
+                param(
                     True,
                     True,
                     False,
@@ -838,12 +857,59 @@
                     id="ssh_config + kwarg, no Invoke-level config",
                 ),
                 param(
+                    True,
+                    False,
+                    "kwarg.key",
+                    ["kwarg.key", "ssh-config-B.key", "ssh-config-A.key"],
+                    id="ssh_config + kwarg (string), no Invoke-level config",
+                ),
+                param(
                     False,
                     True,
                     True,
                     ["configured.key", "kwarg.key"],
                     id="Invoke-level config + kwarg, no ssh_config",
                 ),
+                param(
+                    False,
+                    True,
+                    "kwarg.key",
+                    ["configured.key", "kwarg.key"],
+                    id="Invoke-level config + kwarg (string), no ssh_config",
+                ),
+                param(
+                    True,
+                    "string.key",
+                    False,
+                    ["string.key", "ssh-config-B.key", "ssh-config-A.key"],
+                    id="ssh_config, string Invoke config, no kwarg",
+                ),
+                param(
+                    False,
+                    "string.key",
+                    True,
+                    ["string.key", "kwarg.key"],
+                    id="no ssh_config, string Invoke config, list kwarg",
+                ),
+                param(
+                    False,
+                    "config.key",
+                    "kwarg.key",
+                    ["config.key", "kwarg.key"],
+                    id="no ssh_config, string Invoke config, string kwarg",
+                ),
+                param(
+                    True,
+                    "config.key",
+                    "kwarg.key",
+                    [
+                        "config.key",
+                        "kwarg.key",
+                        "ssh-config-B.key",
+                        "ssh-config-A.key",
+                    ],
+                    id="ssh_config, string Invoke config, string kwarg",
+                ),
             ],
         )
         def merges_sources(self, client, ssh, invoke, kwarg, expected):
@@ -854,18 +920,22 @@
                     support, "ssh_config", "runtime_identity.conf"
                 )
             if invoke:
+                # Assume string value if not literal True
+                value = ["configured.key"] if invoke is True else invoke
                 # Use overrides config level to mimic --identity use NOTE: (the
                 # fact that --identity is an override, and thus overrides eg
                 # invoke config file values is part of invoke's config test
                 # suite)
                 config_kwargs["overrides"] = {
-                    "connect_kwargs": {"key_filename": ["configured.key"]}
+                    "connect_kwargs": {"key_filename": value}
                 }
             conf = Config(**config_kwargs)
             connect_kwargs = {}
             if kwarg:
-                # Stitch in connect_kwargs value
-                connect_kwargs = {"key_filename": ["kwarg.key"]}
+                # Assume string value if not literal True
+                value = ["kwarg.key"] if kwarg is True else kwarg
+                connect_kwargs = {"key_filename": value}
+
             # Tie in all sources that were configured & open()
             Connection(
                 "runtime", config=conf, connect_kwargs=connect_kwargs

Reply via email to