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