Hello community,

here is the log from the commit of package python-devpi-client for 
openSUSE:Factory checked in at 2020-01-12 23:25:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-devpi-client (Old)
 and      /work/SRC/openSUSE:Factory/.python-devpi-client.new.6675 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-devpi-client"

Sun Jan 12 23:25:00 2020 rev:3 rq:763395 version:5.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-devpi-client/python-devpi-client.changes  
2019-09-30 15:58:32.257354158 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-devpi-client.new.6675/python-devpi-client.changes
        2020-01-12 23:26:26.674861850 +0100
@@ -1,0 +2,13 @@
+Sun Jan 12 00:54:29 CET 2020 - Matej Cepl <[email protected]>
+
+- Update to 5.1.1:
+  - Fix removing a range of versions with index inheritance.
+  - Add keyring support for devpi push to external repositories
+    like pypi.org. This is compatible with twine, see
+    https://twine.readthedocs.io/en/latest/#keyring-support
+  - fix #666: output nicer error message when section couldn’t be
+    found in pypirc.
+  - the 410 status for the register action isn’t marked as error
+    anymore for push to external repository.
+
+-------------------------------------------------------------------

Old:
----
  devpi-client-5.0.0.tar.gz

New:
----
  devpi-client-5.1.1.tar.gz

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

Other differences:
------------------
++++++ python-devpi-client.spec ++++++
--- /var/tmp/diff_new_pack.PXQmd4/_old  2020-01-12 23:26:27.070861996 +0100
+++ /var/tmp/diff_new_pack.PXQmd4/_new  2020-01-12 23:26:27.074861998 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-devpi-client
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-devpi-client
-Version:        5.0.0
+Version:        5.1.1
 Release:        0
 Summary:        Client for devpi
 License:        MIT

++++++ devpi-client-5.0.0.tar.gz -> devpi-client-5.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/CHANGELOG 
new/devpi-client-5.1.1/CHANGELOG
--- old/devpi-client-5.0.0/CHANGELOG    2019-06-28 10:50:41.000000000 +0200
+++ new/devpi-client-5.1.1/CHANGELOG    2019-12-18 09:08:44.000000000 +0100
@@ -2,6 +2,49 @@
 
 .. towncrier release notes start
 
+5.1.1 (2019-12-18)
+==================
+
+Bug Fixes
+---------
+
+- Fix removing a range of versions with index inheritance.
+
+
+5.1.0 (2019-10-31)
+==================
+
+Features
+--------
+
+- Add keyring support for ``devpi push`` to external repositories like 
pypi.org. This is compatible with ``twine``, see 
https://twine.readthedocs.io/en/latest/#keyring-support
+
+
+Bug Fixes
+---------
+
+- fix #666: output nicer error message when section couldn't be found in 
pypirc.
+
+- the 410 status for the register action isn't marked as error anymore for 
push to external repository.
+
+
+5.1.0 (2019-10-31)
+==================
+
+Features
+--------
+
+- Add keyring support for ``devpi push`` to external repositories like 
pypi.org. This is compatible with ``twine``, see 
https://twine.readthedocs.io/en/latest/#keyring-support
+
+
+Bug Fixes
+---------
+
+- fix #666: output nicer error message when section couldn't be found in 
pypirc.
+
+- the 410 status for the register action isn't marked as error anymore for 
push to external repository.
+
+
 5.0.0 (2019-06-28)
 ==================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/PKG-INFO 
new/devpi-client-5.1.1/PKG-INFO
--- old/devpi-client-5.0.0/PKG-INFO     2019-06-28 10:50:42.000000000 +0200
+++ new/devpi-client-5.1.1/PKG-INFO     2019-12-18 09:08:48.000000000 +0100
@@ -1,11 +1,11 @@
 Metadata-Version: 1.2
 Name: devpi-client
-Version: 5.0.0
+Version: 5.1.1
 Summary: devpi upload/install/... workflow commands for Python developers
 Home-page: https://github.com/devpi/devpi
 Maintainer: Holger Krekel
 Maintainer-email: [email protected]
-License: UNKNOWN
+License: MIT
 Description: ===============================================================
         devpi-client: manage devpi-server, Python packaging and testing
         ===============================================================
@@ -39,87 +39,89 @@
         
         .. towncrier release notes start
         
-        5.0.0 (2019-06-28)
+        5.1.1 (2019-12-18)
         ==================
         
-        Deprecations and Removals
-        -------------------------
+        Bug Fixes
+        ---------
         
-        - removed deprecated "quickstart" command.
+        - Fix removing a range of versions with index inheritance.
         
         
+        5.1.0 (2019-10-31)
+        ==================
+        
         Features
         --------
         
-        - fix #636: support ``--ignore-bases`` option for project listings. 
Requires devpi-server >= 5.0.0 to work, older versions will still include 
releases from bases.
-        
-        - decoupled the functional tests from devpi-server and run 
devpi-server in a Python 3 virtualenv when testing with Python 2.7.
-        
-        - support ``--no-projects`` option when showing indexes and use it 
automatically when creating and modifying and index. Requires devpi-server >= 
5.0.0 to work, older versions will still receive and show the projects.
+        - Add keyring support for ``devpi push`` to external repositories like 
pypi.org. This is compatible with ``twine``, see 
https://twine.readthedocs.io/en/latest/#keyring-support
         
-        - sort output of ``index -l``, ``use -l`` and ``user -l``.
         
+        Bug Fixes
+        ---------
         
-        Other Changes
-        -------------
+        - fix #666: output nicer error message when section couldn't be found 
in pypirc.
         
-        - The selection of the Python interpreter used for ``devpi upload`` 
has changed. If used the new ``-p/--python`` option has priority, then a 
currently activated virtualenv, lastly the ``sys.executable`` under which devpi 
is running.
+        - the 410 status for the register action isn't marked as error anymore 
for push to external repository.
         
         
-        4.4.0 (2019-04-26)
+        5.1.0 (2019-10-31)
         ==================
         
         Features
         --------
         
-        - implement #93: support setting password hash with devpi-server 4.9.0.
+        - Add keyring support for ``devpi push`` to external repositories like 
pypi.org. This is compatible with ``twine``, see 
https://twine.readthedocs.io/en/latest/#keyring-support
         
         
         Bug Fixes
         ---------
         
-        - fix #622: deletion of package with inherited versions failed.
+        - fix #666: output nicer error message when section couldn't be found 
in pypirc.
+        
+        - the 410 status for the register action isn't marked as error anymore 
for push to external repository.
         
         
-        4.3.0 (2019-03-14)
+        5.0.0 (2019-06-28)
         ==================
         
+        Deprecations and Removals
+        -------------------------
+        
+        - removed deprecated "quickstart" command.
+        
+        
         Features
         --------
         
-        - support for additional commands added by plugins via 
``devpiclient_subcommands`` hook.
-        
+        - fix #636: support ``--ignore-bases`` option for project listings. 
Requires devpi-server >= 5.0.0 to work, older versions will still include 
releases from bases.
         
-        Bug Fixes
-        ---------
+        - decoupled the functional tests from devpi-server and run 
devpi-server in a Python 3 virtualenv when testing with Python 2.7.
         
-        - Update import location for detox 0.18.
+        - support ``--no-projects`` option when showing indexes and use it 
automatically when creating and modifying and index. Requires devpi-server >= 
5.0.0 to work, older versions will still receive and show the projects.
         
+        - sort output of ``index -l``, ``use -l`` and ``user -l``.
         
-        4.2.0 (2018-11-16)
-        ==================
         
-        Features
-        --------
+        Other Changes
+        -------------
         
-        - Use server side operations for modifying indexes if the devpi-server 
version supports it. This prevents overwriting changes if two clients modify 
the same index concurrently.
+        - The selection of the Python interpreter used for ``devpi upload`` 
has changed. If used the new ``-p/--python`` option has priority, then a 
currently activated virtualenv, lastly the ``sys.executable`` under which devpi 
is running.
         
         
-        4.1.0 (2018-09-09)
+        4.4.0 (2019-04-26)
         ==================
         
         Features
         --------
         
-        - implement #565: To show toxresults with ``devpi list`` the new 
``-t/--toxresults`` option is now required, the toxresults aren't shown by 
default anymore.
-        
-        - implement #579: client can remove specific file with ``devpi remove 
url_to_file``. This requires at least devpi-server 4.6.0
+        - implement #93: support setting password hash with devpi-server 4.9.0.
         
         
         Bug Fixes
         ---------
         
-        - fix #523: better error message when index does not support upload.
+        - fix #622: deletion of package with inherited versions failed.
         
         
 Platform: UNKNOWN
@@ -133,3 +135,4 @@
 Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/devpi/__init__.py 
new/devpi-client-5.1.1/devpi/__init__.py
--- old/devpi-client-5.0.0/devpi/__init__.py    2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/devpi/__init__.py    2019-12-18 09:08:44.000000000 
+0100
@@ -1,2 +1,2 @@
 
-__version__ = '5.0.0'
+__version__ = '5.1.1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/devpi/list_remove.py 
new/devpi-client-5.1.1/devpi/list_remove.py
--- old/devpi-client-5.0.0/devpi/list_remove.py 2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/devpi/list_remove.py 2019-12-18 09:08:44.000000000 
+0100
@@ -139,7 +139,7 @@
     index_url = hub.current.get_index_url(indexname=args.index)
     proj_url = hub.current.get_project_url(
         req.project_name, indexname=args.index)
-    reply = hub.http_api("get", proj_url, type="projectconfig")
+    reply = hub.http_api("get", proj_url.replace(query=dict(ignore_bases="")), 
type="projectconfig")
     ver_to_delete = get_versions_to_delete(index_url, reply, req)
     if not ver_to_delete:
         hub.error(
@@ -173,6 +173,8 @@
             files_to_delete = [link for link in vv.get_links()
                                if link.href.startswith(index_url.url)]
             ver_to_delete.append((version, files_to_delete))
+    # filter versions with no releases
+    ver_to_delete = [x for x in ver_to_delete if x[1]]
     return ver_to_delete
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/devpi/login.py 
new/devpi-client-5.1.1/devpi/login.py
--- old/devpi-client-5.0.0/devpi/login.py       2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/devpi/login.py       2019-12-18 09:08:44.000000000 
+0100
@@ -14,16 +14,16 @@
     r = hub.http_api("post", hub.current.login, input, quiet=False)
     hub.current.set_auth(user, r.result["password"])
     hours = r.result["expiration"] / (60*60.0)
-    hub.info("logged in %r at %r, credentials valid for %.2f hours" %
-             (user, hub.current.index, hours))
-    #else:
-    #    hub.error("server refused %r login, code=%s" %(user, r.status_code))
-    #    return 1
+    msg = "logged in %r" % user
+    if hub.current.index:
+        msg = "%s at %r" % (msg, hub.current.index)
+    msg = "%s, credentials valid for %.2f hours" % (msg, hours)
+    hub.info(msg)
 
 
 @hookimpl(trylast=True)
 def devpiclient_get_password(url, username):
-    return getpass.getpass("password for user %s: " % username)
+    return getpass.getpass("password for user %s at %s: " % (username, url))
 
 
 def logoff(hub, args):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/devpi/push.py 
new/devpi-client-5.1.1/devpi/push.py
--- old/devpi-client-5.0.0/devpi/push.py        2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/devpi/push.py        2019-12-18 09:08:44.000000000 
+0100
@@ -1,6 +1,8 @@
 import py
 from devpi_common.metadata import parse_requirement, splitbasename
 from . import pypirc
+import traceback
+
 
 class PyPIPush:
     def __init__(self, posturl, user, password):
@@ -12,9 +14,7 @@
         req = dict(name=name, version=str(version), posturl=self.posturl,
                    username=self.user, password=self.password )
         index = hub.current.index
-        return hub.http_api("push", index, kvdict=req, fatal=True)
-
-        #assert r.status_code == 200, r.content
+        return hub.http_api("push", index, kvdict=req, fatal=False)
 
 
 class DevpiPush:
@@ -39,10 +39,17 @@
             hub.fatal("no pypirc file found at: %s" %(pypirc_path))
         hub.info("using pypirc", pypirc_path)
         auth = pypirc.Auth(pypirc_path)
-        posturl, (user, password) = auth.get_url_auth(posturl)
+        try:
+            posturl, (user, password) = auth.get_url_auth(posturl)
+        except KeyError as e:
+            hub.fatal("Error while trying to read section '%s': %s" % (
+                posturl, traceback.format_exception_only(e.__class__, e)))
         if posturl is None:
             posturl = "https://upload.pypi.org/legacy/";
             hub.info("using default pypi url %s" % posturl)
+        if password is None:
+            password = hub.hook.devpiclient_get_password(
+                url=posturl, username=user)
         return PyPIPush(posturl, user, password)
     if args.target.count("/") != 1:
         hub.fatal("target %r not of form USER/NAME or pypi:REPONAME" % (
@@ -73,8 +80,12 @@
             "Old style package specification is deprecated, "
             "use this form: your-pkg-name==your.version.specifier")
     r = pusher.execute(hub, name, version)
+    failed = r.status_code not in (200, 201)
     if r.type == "actionlog":
         for action in r["result"]:
-            red = int(action[0]) >= 400
+            red = int(action[0]) not in (200, 201, 410)
+            failed = failed or red
             for line in (" ".join(map(str, action))).split("\n"):
                 hub.line("   " + line, red=red)
+    if failed:
+        hub.fatal("Failure during upload")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/devpi/pypirc.py 
new/devpi-client-5.1.1/devpi/pypirc.py
--- old/devpi-client-5.0.0/devpi/pypirc.py      2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/devpi/pypirc.py      2019-12-18 09:08:44.000000000 
+0100
@@ -3,42 +3,17 @@
 """
 import py
 
+
 class Auth:
     def __init__(self, path=None):
         if path is None:
             path = py.path.local._gethomedir().join(".pypirc")
-        self.path = path
         self.ini = py.iniconfig.IniConfig(path)
 
-    def validate_user(self, url, user, password):
-        indexservers = self.ini.get("distutils", "index-servers")
-        assert indexservers, "no index-servers entry found in %s" % 
(self.path,)
-        url = url.rstrip("/")
-        for indexserver in indexservers.split():
-            section = self.ini[indexserver]
-            repo = section.get("repository")
-            repo = repo.rstrip("/")
-            if repo == url:
-                if user == section["username"] and \
-                   password == section["password"]:
-                    return True
-        print ("auth failed", url, user, password)
-
-    def get_userpass(self, url):
-        indexservers = self.ini.get("distutils", "index-servers")
-        assert indexservers, "no index-servers entry found in %s" % 
(self.path,)
-        url = url.rstrip("/")
-        for indexserver in indexservers.split():
-            section = self.ini[indexserver]
-            repo = section.get("repository")
-            if repo and repo.rstrip("/") == url:
-                return (section["username"], section["password"])
-        return None
-
     def get_url_auth(self, secname):
         section = self.ini[secname]
         repo = section.get("repository")
-        auth = (section["username"], section["password"])
+        username = section["username"]
+        password = section.get("password")
+        auth = (username, password)
         return repo, auth
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/devpi_client.egg-info/PKG-INFO 
new/devpi-client-5.1.1/devpi_client.egg-info/PKG-INFO
--- old/devpi-client-5.0.0/devpi_client.egg-info/PKG-INFO       2019-06-28 
10:50:42.000000000 +0200
+++ new/devpi-client-5.1.1/devpi_client.egg-info/PKG-INFO       2019-12-18 
09:08:48.000000000 +0100
@@ -1,11 +1,11 @@
 Metadata-Version: 1.2
 Name: devpi-client
-Version: 5.0.0
+Version: 5.1.1
 Summary: devpi upload/install/... workflow commands for Python developers
 Home-page: https://github.com/devpi/devpi
 Maintainer: Holger Krekel
 Maintainer-email: [email protected]
-License: UNKNOWN
+License: MIT
 Description: ===============================================================
         devpi-client: manage devpi-server, Python packaging and testing
         ===============================================================
@@ -39,87 +39,89 @@
         
         .. towncrier release notes start
         
-        5.0.0 (2019-06-28)
+        5.1.1 (2019-12-18)
         ==================
         
-        Deprecations and Removals
-        -------------------------
+        Bug Fixes
+        ---------
         
-        - removed deprecated "quickstart" command.
+        - Fix removing a range of versions with index inheritance.
         
         
+        5.1.0 (2019-10-31)
+        ==================
+        
         Features
         --------
         
-        - fix #636: support ``--ignore-bases`` option for project listings. 
Requires devpi-server >= 5.0.0 to work, older versions will still include 
releases from bases.
-        
-        - decoupled the functional tests from devpi-server and run 
devpi-server in a Python 3 virtualenv when testing with Python 2.7.
-        
-        - support ``--no-projects`` option when showing indexes and use it 
automatically when creating and modifying and index. Requires devpi-server >= 
5.0.0 to work, older versions will still receive and show the projects.
+        - Add keyring support for ``devpi push`` to external repositories like 
pypi.org. This is compatible with ``twine``, see 
https://twine.readthedocs.io/en/latest/#keyring-support
         
-        - sort output of ``index -l``, ``use -l`` and ``user -l``.
         
+        Bug Fixes
+        ---------
         
-        Other Changes
-        -------------
+        - fix #666: output nicer error message when section couldn't be found 
in pypirc.
         
-        - The selection of the Python interpreter used for ``devpi upload`` 
has changed. If used the new ``-p/--python`` option has priority, then a 
currently activated virtualenv, lastly the ``sys.executable`` under which devpi 
is running.
+        - the 410 status for the register action isn't marked as error anymore 
for push to external repository.
         
         
-        4.4.0 (2019-04-26)
+        5.1.0 (2019-10-31)
         ==================
         
         Features
         --------
         
-        - implement #93: support setting password hash with devpi-server 4.9.0.
+        - Add keyring support for ``devpi push`` to external repositories like 
pypi.org. This is compatible with ``twine``, see 
https://twine.readthedocs.io/en/latest/#keyring-support
         
         
         Bug Fixes
         ---------
         
-        - fix #622: deletion of package with inherited versions failed.
+        - fix #666: output nicer error message when section couldn't be found 
in pypirc.
+        
+        - the 410 status for the register action isn't marked as error anymore 
for push to external repository.
         
         
-        4.3.0 (2019-03-14)
+        5.0.0 (2019-06-28)
         ==================
         
+        Deprecations and Removals
+        -------------------------
+        
+        - removed deprecated "quickstart" command.
+        
+        
         Features
         --------
         
-        - support for additional commands added by plugins via 
``devpiclient_subcommands`` hook.
-        
+        - fix #636: support ``--ignore-bases`` option for project listings. 
Requires devpi-server >= 5.0.0 to work, older versions will still include 
releases from bases.
         
-        Bug Fixes
-        ---------
+        - decoupled the functional tests from devpi-server and run 
devpi-server in a Python 3 virtualenv when testing with Python 2.7.
         
-        - Update import location for detox 0.18.
+        - support ``--no-projects`` option when showing indexes and use it 
automatically when creating and modifying and index. Requires devpi-server >= 
5.0.0 to work, older versions will still receive and show the projects.
         
+        - sort output of ``index -l``, ``use -l`` and ``user -l``.
         
-        4.2.0 (2018-11-16)
-        ==================
         
-        Features
-        --------
+        Other Changes
+        -------------
         
-        - Use server side operations for modifying indexes if the devpi-server 
version supports it. This prevents overwriting changes if two clients modify 
the same index concurrently.
+        - The selection of the Python interpreter used for ``devpi upload`` 
has changed. If used the new ``-p/--python`` option has priority, then a 
currently activated virtualenv, lastly the ``sys.executable`` under which devpi 
is running.
         
         
-        4.1.0 (2018-09-09)
+        4.4.0 (2019-04-26)
         ==================
         
         Features
         --------
         
-        - implement #565: To show toxresults with ``devpi list`` the new 
``-t/--toxresults`` option is now required, the toxresults aren't shown by 
default anymore.
-        
-        - implement #579: client can remove specific file with ``devpi remove 
url_to_file``. This requires at least devpi-server 4.6.0
+        - implement #93: support setting password hash with devpi-server 4.9.0.
         
         
         Bug Fixes
         ---------
         
-        - fix #523: better error message when index does not support upload.
+        - fix #622: deletion of package with inherited versions failed.
         
         
 Platform: UNKNOWN
@@ -133,3 +135,4 @@
 Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/devpi-client-5.0.0/devpi_client.egg-info/top_level.txt 
new/devpi-client-5.1.1/devpi_client.egg-info/top_level.txt
--- old/devpi-client-5.0.0/devpi_client.egg-info/top_level.txt  2019-06-28 
10:50:42.000000000 +0200
+++ new/devpi-client-5.1.1/devpi_client.egg-info/top_level.txt  2019-12-18 
09:08:48.000000000 +0100
@@ -1,2 +1 @@
 devpi
-testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/setup.py 
new/devpi-client-5.1.1/setup.py
--- old/devpi-client-5.0.0/setup.py     2019-06-28 10:50:41.000000000 +0200
+++ new/devpi-client-5.1.1/setup.py     2019-12-18 09:08:44.000000000 +0100
@@ -1,12 +1,17 @@
 #! /usr/bin/env python
 
 import io
-import os, re
+import os
+import re
+import sys
 
-from setuptools import setup, find_packages
+from setuptools import setup
 
 
 def get_changelog():
+    if 'bdist_rpm' in sys.argv:
+        # exclude changelog when building rpm
+        return ""
     text = io.open(os.path.join(here, 'CHANGELOG'), encoding='utf-8').read()
     header_matches = list(re.finditer('^=+$', text, re.MULTILINE))
     # until fifth header
@@ -35,13 +40,14 @@
       description="devpi upload/install/... workflow commands for Python "
                   "developers",
       long_description="\n\n".join([README, CHANGELOG]),
-      version='5.0.0',
-      packages=find_packages(),
+      version='5.1.1',
+      packages=['devpi'],
       install_requires=install_requires,
       extras_require=extras_require,
       url="https://github.com/devpi/devpi";,
       maintainer="Holger Krekel",
       maintainer_email="[email protected]",
+      license="MIT",
       classifiers=[
         "Development Status :: 5 - Production/Stable",
         "Environment :: Web Environment",
@@ -51,7 +57,7 @@
         "Programming Language :: Python :: Implementation :: PyPy",
         ] + [
             ("Programming Language :: Python :: %s" % x) for x in
-                "2.7 3.4 3.5 3.6".split()],
+                "2.7 3.4 3.5 3.6 3.7".split()],
       entry_points = {
         'console_scripts': [
           "devpi = devpi.main:main"],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/testing/conftest.py 
new/devpi-client-5.1.1/testing/conftest.py
--- old/devpi-client-5.0.0/testing/conftest.py  2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/testing/conftest.py  2019-12-18 09:08:44.000000000 
+0100
@@ -112,8 +112,6 @@
 
 def find_python3():
     locations = [
-        "C:\\Python34-x64\\python.exe",
-        "C:\\Python34\\python.exe",
         "C:\\Python35-x64\\python.exe",
         "C:\\Python35\\python.exe",
         "C:\\Python36-x64\\python.exe",
@@ -130,11 +128,10 @@
         except subprocess.CalledProcessError:
             continue
     names = [
-        'python3',
-        'python3.4',
         'python3.5',
         'python3.6',
-        'python3.7']
+        'python3.7',
+        'python3']
     for name in names:
         path = py.path.local.sysfind(name)
         if not path:
@@ -204,17 +201,22 @@
     port = get_open_port(host)
     try:
         args = [
-            server_executable, "--serverdir", str(clientdir), "--debug",
-            "--host", host, "--port", str(port)]
-        if server_version >= pkg_resources.parse_version('4.2.0.dev'):
-            subprocess.check_call(args + ['--init'])
+            "--serverdir", str(clientdir)]
+        if server_version >= pkg_resources.parse_version('5.2.0.dev'):
+            init_executable = server_executable.replace(
+                "devpi-server", "devpi-init")
+            subprocess.check_call([init_executable] + args)
+        elif server_version >= pkg_resources.parse_version('4.2.0.dev'):
+            subprocess.check_call([server_executable] + args + [
+                '--debug', '--init'])
     except subprocess.CalledProcessError as e:
         # this won't output anything on Windows
         print(
             getattr(e, 'output', "Can't get process output on Windows"),
             file=sys.stderr)
         raise
-    p = subprocess.Popen(args)
+    p = subprocess.Popen([server_executable] + args + [
+        "--debug", "--host", host, "--port", str(port)])
     wait_for_port(host, port)
     return (p, URL("http://%s:%s"; % (host, port)))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/testing/functional.py 
new/devpi-client-5.1.1/testing/functional.py
--- old/devpi-client-5.0.0/testing/functional.py        2019-06-28 
10:50:41.000000000 +0200
+++ new/devpi-client-5.1.1/testing/functional.py        2019-12-18 
09:08:44.000000000 +0100
@@ -201,7 +201,7 @@
     def test_create_index_and_config_gets(self, mapp):
         mapp.create_and_login_user("cuser2")
         mapp.create_index("dev")
-        res =  mapp.getjson("/cuser2/dev")
+        res = mapp.getjson("/cuser2/dev")
         assert res["type"] == "indexconfig"
         assert res["result"]["projects"] == []
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/testing/test_list_remove.py 
new/devpi-client-5.1.1/testing/test_list_remove.py
--- old/devpi-client-5.0.0/testing/test_list_remove.py  2019-06-28 
10:50:41.000000000 +0200
+++ new/devpi-client-5.1.1/testing/test_list_remove.py  2019-12-18 
09:08:44.000000000 +0100
@@ -205,6 +205,43 @@
         with pytest.raises(ValueError):
             out.stdout.fnmatch_lines_random("*/dev/*/dddttt-0.666.zip")
 
+    def test_delete_version_range_with_inheritance(self, initproj, devpi, 
out_devpi, simpypi):
+        import re
+        # upload 0.666 to dev index
+        initproj("dddttt-0.666", {"doc": {
+            "conf.py": "",
+            "index.html": "<html/>"}})
+        assert py.path.local("setup.py").check()
+        devpi("upload", "--formats", "sdist.zip")
+        # remember username
+        out = out_devpi("use")
+        user = re.search(r'\(logged in as (.+?)\)', out.stdout.str()).group(1)
+        devpi("index", "-c", "dev2", "bases=%s/dev" % user)
+        devpi("use", "dev2")
+        # upload 1.0 to dev2 index
+        initproj("dddttt-1.0", {"doc": {
+            "conf.py": "",
+            "index.html": "<html/>"}})
+        assert py.path.local("setup.py").check()
+        devpi("upload", "--formats", "sdist.zip")
+        # upload 2.0 to dev2 index
+        initproj("dddttt-2.0", {"doc": {
+            "conf.py": "",
+            "index.html": "<html/>"}})
+        assert py.path.local("setup.py").check()
+        devpi("upload", "--formats", "sdist.zip")
+
+        out = out_devpi("list", "dddttt", "--all")
+        out.stdout.fnmatch_lines_random("*/dev/*/dddttt-0.666.zip")
+        out.stdout.fnmatch_lines_random("*/dev2/*/dddttt-1.0.zip")
+        out.stdout.fnmatch_lines_random("*/dev2/*/dddttt-2.0.zip")
+        out = out_devpi("remove", "dddttt<2.0", code=200)
+        out = out_devpi("list", "dddttt", "--all")
+        out.stdout.fnmatch_lines_random("*/dev/*/dddttt-0.666.zip")
+        with pytest.raises(ValueError):
+            out.stdout.fnmatch_lines_random("*/dev/*/dddttt-1.0.zip")
+        out.stdout.fnmatch_lines_random("*/dev2/*/dddttt-2.0.zip")
+
     def test_delete_project_with_inheritance(self, initproj, devpi, out_devpi, 
simpypi):
         devpi("index", "bases=root/pypi", "mirror_whitelist=*")
         initproj("dddttt-0.666", {"doc": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/testing/test_push.py 
new/devpi-client-5.1.1/testing/test_push.py
--- old/devpi-client-5.0.0/testing/test_push.py 2019-06-28 10:50:41.000000000 
+0200
+++ new/devpi-client-5.1.1/testing/test_push.py 2019-12-18 09:08:44.000000000 
+0100
@@ -85,7 +85,7 @@
 
 
 @pytest.mark.parametrize("spec", ("pkg==1.0", "pkg-1.0"))
-def test_main_push_pypi(monkeypatch, tmpdir, spec):
+def test_main_push_pypi(capsys, monkeypatch, tmpdir, spec):
     from devpi.push import main
     l = []
     def mypost(method, url, data, headers, auth=None, cert=None, verify=None):
@@ -136,6 +136,19 @@
     assert req["username"] == "test"
     assert req["password"] == "testp"
 
+    class args:
+        pypirc = str(p)
+        target = "pypi:notspecified"
+        pkgspec = spec
+        index = None
+
+    (out, err) = capsys.readouterr()
+    with pytest.raises(SystemExit):
+        main(hub, args)
+    (out, err) = capsys.readouterr()
+    assert "Error while trying to read section 'notspecified'" in out
+    assert "KeyError" in out
+
 
 def test_fail_push(monkeypatch, tmpdir):
     from devpi.push import main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/testing/test_pypirc.py 
new/devpi-client-5.1.1/testing/test_pypirc.py
--- old/devpi-client-5.0.0/testing/test_pypirc.py       2019-06-28 
10:50:41.000000000 +0200
+++ new/devpi-client-5.1.1/testing/test_pypirc.py       2019-12-18 
09:08:44.000000000 +0100
@@ -1,7 +1,7 @@
-
 from devpi import pypirc
 from textwrap import dedent
 
+
 def test_pypirc(tmpdir):
     p = tmpdir.join("pypirc")
     p.write(dedent("""\n
@@ -18,21 +18,24 @@
         repository: http://localhost:3141/
         username: test2
         password: test2
+
+        [nopassword]
+        repository: http://localhost:3141/
+        username: test3
     """))
     rc = pypirc.Auth(p)
-    assert rc.validate_user("http://pypi.testrun.org/";, "test", "test")
-    assert not rc.validate_user("http://pypi.testrun.org/";, "test", "test2")
-    assert rc.validate_user("http://localhost:3141/";, "test2", "test2")
-    assert not rc.validate_user("http://localhost:3141/";, "test", "test")
-
-    userpass = rc.get_userpass("http://pypi.testrun.org/";)
-    assert userpass == ("test", "test")
-    userpass = rc.get_userpass("http://localhost:3141/";)
-    assert userpass == ("test2", "test2")
-    userpass = rc.get_userpass("http://qwleklocalhost:3141/";)
-    assert userpass is None
 
     url, (user, p) = rc.get_url_auth("local")
     assert url == "http://pypi.testrun.org/";
     assert user == "test"
     assert p == "test"
+
+    url, (user, p) = rc.get_url_auth("testindex")
+    assert url == "http://localhost:3141/";
+    assert user == "test2"
+    assert p == "test2"
+
+    url, (user, p) = rc.get_url_auth("nopassword")
+    assert url == "http://localhost:3141/";
+    assert user == "test3"
+    assert p is None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi-client-5.0.0/tox.ini 
new/devpi-client-5.1.1/tox.ini
--- old/devpi-client-5.0.0/tox.ini      2019-06-28 10:50:41.000000000 +0200
+++ new/devpi-client-5.1.1/tox.ini      2019-12-18 09:08:44.000000000 +0100
@@ -1,6 +1,6 @@
 [pytest]
 norecursedirs = attic .tox
-addopts = -ra --flake8
+addopts = -r a --flake8
 flake8-ignore =
     * E501
     *.py E111 E117 E121 E122 E123 E124 E126 E127 E128 E131 E201 E202 E211 E222 
E225 E226 E231 E251 E265 E271 E301 E302 E303 E305 E306 E401 E501 E711 E712 E722 
E741 W291 W391 W504
@@ -15,7 +15,8 @@
 
 [testenv]
 passenv = LANG
-deps = pytest
+deps = py34: colorama<=0.4.1 ; sys_platform == 'win32'
+       pytest
        pytest-flake8
        pytest-instafail
        !py27: devpi-server


Reply via email to