Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-devpi-client for 
openSUSE:Factory checked in at 2026-05-04 12:54:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-devpi-client (Old)
 and      /work/SRC/openSUSE:Factory/.python-devpi-client.new.30200 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-devpi-client"

Mon May  4 12:54:31 2026 rev:18 rq:1350560 version:7.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-devpi-client/python-devpi-client.changes  
2026-04-04 19:09:32.054332463 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-devpi-client.new.30200/python-devpi-client.changes
       2026-05-04 12:58:03.444691470 +0200
@@ -1,0 +2,7 @@
+Sun May  3 17:32:29 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 7.3.0:
+  * Allow ``patchjson`` to read from stdin with ``-`` as JSON
+    filename.
+
+-------------------------------------------------------------------

Old:
----
  devpi_client-7.2.1.tar.gz

New:
----
  devpi_client-7.3.0.tar.gz

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

Other differences:
------------------
++++++ python-devpi-client.spec ++++++
--- /var/tmp/diff_new_pack.T3SqNo/_old  2026-05-04 12:58:03.932711555 +0200
+++ /var/tmp/diff_new_pack.T3SqNo/_new  2026-05-04 12:58:03.936711720 +0200
@@ -26,7 +26,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-devpi-client%{psuffix}
-Version:        7.2.1
+Version:        7.3.0
 Release:        0
 Summary:        Client for devpi
 License:        MIT
@@ -127,7 +127,7 @@
 
 %if !%{with test}
 %files %{python_files}
-%doc AUTHORS CHANGELOG README.rst
+%doc CHANGELOG README.rst
 %license LICENSE
 %python_alternative %{_bindir}/devpi
 %{python_sitelib}/devpi

++++++ devpi_client-7.2.1.tar.gz -> devpi_client-7.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/.flake8 
new/devpi_client-7.3.0/.flake8
--- old/devpi_client-7.2.1/.flake8      1970-01-01 01:00:00.000000000 +0100
+++ new/devpi_client-7.3.0/.flake8      2026-04-30 11:10:07.000000000 +0200
@@ -0,0 +1,12 @@
+[flake8]
+# E203 is ignored because we enforce ruff format which contradicts it
+ignore = E203,E501,E704,E741,W503
+per-file-ignores =
+    conftest.py:E226
+    index.py:E225
+    list_remove.py:E226
+    main.py:E128,E225,E226
+    test*.py:E225
+    upload.py:E225
+    use.py:E225
+    user.py:E225
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/CHANGELOG 
new/devpi_client-7.3.0/CHANGELOG
--- old/devpi_client-7.2.1/CHANGELOG    2026-03-17 16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/CHANGELOG    2026-04-30 11:10:07.000000000 +0200
@@ -2,6 +2,15 @@
 
 .. towncrier release notes start
 
+7.3.0 (2026-04-30)
+==================
+
+Features
+--------
+
+- Allow ``patchjson`` to read from stdin with ``-`` as JSON filename.
+
+
 7.2.1 (2026-03-17)
 ==================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/CHANGELOG.short.rst 
new/devpi_client-7.3.0/CHANGELOG.short.rst
--- old/devpi_client-7.2.1/CHANGELOG.short.rst  2026-03-17 16:12:52.000000000 
+0100
+++ new/devpi_client-7.3.0/CHANGELOG.short.rst  2026-04-30 11:11:23.000000000 
+0200
@@ -9,6 +9,15 @@
 
 .. towncrier release notes start
 
+7.3.0 (2026-04-30)
+==================
+
+Features
+--------
+
+- Allow ``patchjson`` to read from stdin with ``-`` as JSON filename.
+
+
 7.2.1 (2026-03-17)
 ==================
 
@@ -79,12 +88,3 @@
 
 - Fix #1011: change HTTP status codes >=400 to use self.fatal instead of raw 
SystemExit, protect 403 and 404 errors from SystemExit
 
-
-7.0.2 (2023-10-19)
-==================
-
-Bug Fixes
----------
-
-- Fix #992: Fix error added in 6.0.4 when old authentication data from before 
6.x exists.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/MANIFEST.in 
new/devpi_client-7.3.0/MANIFEST.in
--- old/devpi_client-7.2.1/MANIFEST.in  2026-03-17 16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/MANIFEST.in  2026-04-30 11:10:07.000000000 +0200
@@ -1,3 +1,4 @@
+include .flake8
 include CHANGELOG
 include README.rst
 include AUTHORS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/PKG-INFO 
new/devpi_client-7.3.0/PKG-INFO
--- old/devpi_client-7.2.1/PKG-INFO     2026-03-17 16:12:52.635483000 +0100
+++ new/devpi_client-7.3.0/PKG-INFO     2026-04-30 11:11:23.232559400 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: devpi-client
-Version: 7.2.1
+Version: 7.3.0
 Summary: devpi upload/install/... workflow commands for Python developers
 Maintainer-email: Florian Schulze <[email protected]>
 License: 
@@ -92,6 +92,15 @@
 
 .. towncrier release notes start
 
+7.3.0 (2026-04-30)
+==================
+
+Features
+--------
+
+- Allow ``patchjson`` to read from stdin with ``-`` as JSON filename.
+
+
 7.2.1 (2026-03-17)
 ==================
 
@@ -162,12 +171,3 @@
 
 - Fix #1011: change HTTP status codes >=400 to use self.fatal instead of raw 
SystemExit, protect 403 and 404 errors from SystemExit
 
-
-7.0.2 (2023-10-19)
-==================
-
-Bug Fixes
----------
-
-- Fix #992: Fix error added in 6.0.4 when old authentication data from before 
6.x exists.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/devpi/__init__.py 
new/devpi_client-7.3.0/devpi/__init__.py
--- old/devpi_client-7.2.1/devpi/__init__.py    2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/devpi/__init__.py    2026-04-30 11:10:07.000000000 
+0200
@@ -1 +1 @@
-__version__ = "7.2.1"
+__version__ = "7.3.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/devpi/getjson.py 
new/devpi_client-7.3.0/devpi/getjson.py
--- old/devpi_client-7.2.1/devpi/getjson.py     2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/devpi/getjson.py     2026-04-30 11:10:07.000000000 
+0200
@@ -1,5 +1,7 @@
 from devpi_common.url import URL
+from pathlib import Path
 import json
+import sys
 
 
 def main(hub, args=None):
@@ -11,7 +13,7 @@
 
     current = hub.current
 
-    if path_url.scheme in ('http', 'https'):
+    if path_url.scheme in ("http", "https"):
         url = path_url
     elif not path_url.path.startswith("/") and not current.index:
         hub.fatal("cannot use relative path without an active index")
@@ -27,7 +29,7 @@
     if hub.args.verbose:
         hub.line("GET REQUEST sent to %s" % url)
         for name in sorted(r.headers):
-            hub.line("%s: %s" %(name.upper(), r.headers[name]))
+            hub.line("%s: %s" % (name.upper(), r.headers[name]))
         hub.line()
     hub.out_json(r._json)
 
@@ -38,8 +40,11 @@
     args = hub.args
 
     path = args.path
-    with open(args.jsonfile) as f:
-        data = json.load(f)
+    if args.jsonfile == "-":
+        data = json.load(sys.stdin)
+    else:
+        with Path(args.jsonfile).open() as f:
+            data = json.load(f)
 
     current = hub.current
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/devpi/login.py 
new/devpi_client-7.3.0/devpi/login.py
--- old/devpi_client-7.2.1/devpi/login.py       2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/devpi/login.py       2026-04-30 11:10:07.000000000 
+0200
@@ -11,11 +11,12 @@
     password = args.password
     if password is None:
         password = hub.hook.devpiclient_get_password(
-            url=hub.current.root_url.url, username=user)
+            url=hub.current.root_url.url, username=user
+        )
     input = dict(user=user, password=password)
     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)
+    hours = r.result["expiration"] / (60 * 60.0)
     msg = "logged in %r" % user
     if hub.current.index:
         msg = "%s at %r" % (msg, hub.current.index)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/devpi/main.py 
new/devpi_client-7.3.0/devpi/main.py
--- old/devpi_client-7.2.1/devpi/main.py        2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/devpi/main.py        2026-04-30 11:10:07.000000000 
+0200
@@ -865,8 +865,11 @@
     """
     parser.add_argument("path", action="store",
         help="path to a resource to patch information on. ")
-    parser.add_argument("jsonfile", action="store",
-        help="file to read json content from")
+    parser.add_argument(
+        "jsonfile",
+        action="store",
+        help="file to read json content from use '-' for STDIN",
+    )
 
 
 @subcommand("devpi.list_remove:main_list", "list")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/devpi_client.egg-info/PKG-INFO 
new/devpi_client-7.3.0/devpi_client.egg-info/PKG-INFO
--- old/devpi_client-7.2.1/devpi_client.egg-info/PKG-INFO       2026-03-17 
16:12:52.000000000 +0100
+++ new/devpi_client-7.3.0/devpi_client.egg-info/PKG-INFO       2026-04-30 
11:11:23.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: devpi-client
-Version: 7.2.1
+Version: 7.3.0
 Summary: devpi upload/install/... workflow commands for Python developers
 Maintainer-email: Florian Schulze <[email protected]>
 License: 
@@ -92,6 +92,15 @@
 
 .. towncrier release notes start
 
+7.3.0 (2026-04-30)
+==================
+
+Features
+--------
+
+- Allow ``patchjson`` to read from stdin with ``-`` as JSON filename.
+
+
 7.2.1 (2026-03-17)
 ==================
 
@@ -162,12 +171,3 @@
 
 - Fix #1011: change HTTP status codes >=400 to use self.fatal instead of raw 
SystemExit, protect 403 and 404 errors from SystemExit
 
-
-7.0.2 (2023-10-19)
-==================
-
-Bug Fixes
----------
-
-- Fix #992: Fix error added in 6.0.4 when old authentication data from before 
6.x exists.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/devpi_client.egg-info/SOURCES.txt 
new/devpi_client-7.3.0/devpi_client.egg-info/SOURCES.txt
--- old/devpi_client-7.2.1/devpi_client.egg-info/SOURCES.txt    2026-03-17 
16:12:52.000000000 +0100
+++ new/devpi_client-7.3.0/devpi_client.egg-info/SOURCES.txt    2026-04-30 
11:11:23.000000000 +0200
@@ -1,3 +1,4 @@
+.flake8
 AUTHORS
 CHANGELOG
 CHANGELOG.short.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/pyproject.toml 
new/devpi_client-7.3.0/pyproject.toml
--- old/devpi_client-7.2.1/pyproject.toml       2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/pyproject.toml       2026-04-30 11:10:07.000000000 
+0200
@@ -68,11 +68,9 @@
 
 [tool.ruff.format]
 exclude = [
-    "devpi/getjson.py",
     "devpi/index.py",
     "devpi/install.py",
     "devpi/list_remove.py",
-    "devpi/login.py",
     "devpi/main.py",
     "devpi/push.py",
     "devpi/refresh.py",
@@ -90,7 +88,6 @@
     "testing/test_login.py",
     "testing/test_main.py",
     "testing/test_push.py",
-    "testing/test_pypirc.py",
     "testing/test_test.py",
     "testing/test_upload.py",
     "testing/test_use.py",
@@ -150,12 +147,6 @@
 "devpi/use.py" = [
     "I001", # maybe cleanup later - import block unsorted
 ]
-"testing/conftest.py" = [
-    "I001", # maybe cleanup later - import block unsorted
-]
-"testing/test_functional.py" = [
-    "I001", # maybe cleanup later - import block unsorted
-]
 "testing/test_index.py" = [
     "I001", # maybe cleanup later - import block unsorted
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/testing/conftest.py 
new/devpi_client-7.3.0/testing/conftest.py
--- old/devpi_client-7.2.1/testing/conftest.py  2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/testing/conftest.py  2026-04-30 11:10:07.000000000 
+0200
@@ -1,26 +1,26 @@
 from _pytest import capture
 from contextlib import closing
+from devpi.main import Hub
+from devpi.main import get_pluginmanager
+from devpi.main import initmain
+from devpi.main import parse_args
 from devpi_common.contextlib import chdir
 from devpi_common.metadata import parse_version
+from devpi_common.url import URL
 from io import StringIO
 from pathlib import Path
-import codecs
 import gc
+import json
 import os
 import platform
 import pytest
-import socket
-import textwrap
 import shutil
+import socket
+import subprocess
 import sys
-import json
+import textwrap
 import time
 
-from devpi.main import Hub, get_pluginmanager, initmain, parse_args
-from devpi_common.url import URL
-
-import subprocess
-
 
 pytest_plugins = ["testing.reqmock"]
 
@@ -70,9 +70,33 @@
     return print(*args, **kwargs)
 
 
[email protected]
+def remote_index_info(server_version):
+    from devpi_common.metadata import parse_version
+
+    if server_version < parse_version("7.0.0.dev2"):
+
+        class MirrorInfo:
+            refresh_option = "mirror_cache_expiry"
+            type = "mirror"
+            url_fmt_option = "mirror_web_url_fmt"
+            url_option = "mirror_url"
+
+        return MirrorInfo()
+
+    class RemoteInfo:
+        refresh_option = "remote_refresh_delay"
+        type = "remote"
+        url_fmt_option = "remote_web_url_fmt"
+        url_option = "remote_url"
+
+    return RemoteInfo()
+
+
 @pytest.fixture(scope="session")
 def simpypiserver():
-    from .simpypi import httpserver, SimPyPIRequestHandler
+    from .simpypi import SimPyPIRequestHandler
+    from .simpypi import httpserver
     import threading
     host = 'localhost'
     port = get_open_port(host)
@@ -225,7 +249,7 @@
         "--serverdir", str(clientdir)]
     init_executable = server_executable.replace(
         "devpi-server", "devpi-init")
-    check_call(request, [init_executable, *args])
+    check_call(request, [init_executable, "--no-root-pypi", *args])
     args.extend(indexer_backend_option)
     out = check_output(request, [server_executable, "-h"])
     if b'--argon2' in out:
@@ -508,7 +532,7 @@
             out=capture.FDCapture(1),
             err=capture.FDCapture(2))
         cap.start_capturing()
-        now = time.time()
+        now = time.monotonic()
         ret = 0
         try:
             try:
@@ -525,7 +549,7 @@
             raise
         print(out)
         print(err, file=sys.stderr)
-        return RunResult(ret, out.split("\n"), None, time.time()-now)
+        return RunResult(ret, out.split("\n"), None, time.monotonic() - now)
     return out_devpi_func
 
 
@@ -587,15 +611,14 @@
     cmdargs = [str(x) for x in cmdargs]
     p1 = Path(tmpdir) / "stdout"
     print_info("running", cmdargs, "curdir=", Path())
-    with codecs.open(str(p1), "w", encoding="utf8") as f1:
-        now = time.time()
+    with open(p1, "w", encoding="utf8") as f1:
+        now = time.monotonic()
         popen = subprocess.Popen(
             cmdargs, stdout=f1, stderr=subprocess.STDOUT,
             close_fds=(sys.platform != "win32"))
         ret = popen.wait()
-    with codecs.open(str(p1), "r", encoding="utf8") as f1:
-        outerr = f1.read().splitlines()
-    return RunResult(ret, outerr, None, time.time()-now)
+    outerr = p1.read_text().splitlines()
+    return RunResult(ret, outerr, None, time.monotonic() - now)
 
 
 @pytest.fixture
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/testing/functional.py 
new/devpi_client-7.3.0/testing/functional.py
--- old/devpi_client-7.2.1/testing/functional.py        2026-03-17 
16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/testing/functional.py        2026-04-30 
11:10:07.000000000 +0200
@@ -168,20 +168,6 @@
         if m:  # only server-side mapp returns messages
             assert "not/exists" in m
 
-    def test_pypi_index_attributes(self, mapp):
-        mapp.login_root()
-        data = mapp.getjson("/root/pypi?no_projects=")
-        res = data["result"]
-        res.pop("projects", None)
-        assert sorted(res.keys()) == sorted([
-            "type", "volatile", "title", "mirror_url", "mirror_web_url_fmt"])
-        assert res["type"] == "mirror"
-        assert res["volatile"] is False
-        assert res["title"] == "PyPI"
-        assert 'pypi' in res["mirror_url"]
-        assert 'pypi' in res["mirror_web_url_fmt"]
-        assert '{name}' in res["mirror_web_url_fmt"]
-
     def test_create_index_base_empty(self, mapp):
         indexconfig = dict(bases="")
         mapp.login_root()
@@ -189,12 +175,6 @@
         data = mapp.getjson("/root/empty")
         assert not data["result"]["bases"]
 
-    def test_create_index_base_normalized(self, mapp):
-        indexconfig = dict(bases=("/root/pypi",))
-        mapp.login_root()
-        mapp.create_index("root/hello", indexconfig=indexconfig,
-                          code=200)
-
     def test_create_index_base_invalid(self, mapp):
         mapp.login_root()
         indexconfig = dict(bases=("/root/dev/123",))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/testing/test_functional.py 
new/devpi_client-7.3.0/testing/test_functional.py
--- old/devpi_client-7.2.1/testing/test_functional.py   2026-03-17 
16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/testing/test_functional.py   2026-04-30 
11:10:07.000000000 +0200
@@ -1,3 +1,8 @@
+from .functional import MappMixin
+from .functional import TestIndexPushThings  # noqa: F401
+from .functional import TestIndexThings  # noqa: F401
+from .functional import TestProjectThings  # noqa: F401
+from .functional import TestUserThings  # noqa: F401
 from io import BytesIO
 import json
 import pytest
@@ -6,12 +11,13 @@
 import tarfile
 import time
 
-from .functional import TestIndexThings  # noqa: F401
-from .functional import TestIndexPushThings  # noqa: F401
-from .functional import TestProjectThings  # noqa: F401
-from .functional import TestUserThings  # noqa: F401
-from .functional import TestMirrorIndexThings  # noqa: F401
-from .functional import MappMixin
+
+try:
+    from .functional import (  # type: ignore[attr-defined]  # noqa: F401
+        TestRemoteIndexThings,
+    )
+except ImportError:
+    from .functional import TestMirrorIndexThings  # noqa: F401
 
 
 @pytest.fixture
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/testing/test_pypirc.py 
new/devpi_client-7.3.0/testing/test_pypirc.py
--- old/devpi_client-7.2.1/testing/test_pypirc.py       2026-03-17 
16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/testing/test_pypirc.py       2026-04-30 
11:10:07.000000000 +0200
@@ -4,7 +4,8 @@
 
 def test_pypirc(tmpdir):
     p = tmpdir.join("pypirc")
-    p.write(dedent("""\n
+    p.write(
+        dedent("""\n
         [distutils]
         index-servers = local
             testindex
@@ -22,7 +23,8 @@
         [nopassword]
         repository: http://localhost:3141/
         username: test3
-    """))
+    """)
+    )
     rc = pypirc.Auth(p)
 
     url, (user, p) = rc.get_url_auth("local")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/testing/test_test.py 
new/devpi_client-7.3.0/testing/test_test.py
--- old/devpi_client-7.2.1/testing/test_test.py 2026-03-17 16:11:43.000000000 
+0100
+++ new/devpi_client-7.3.0/testing/test_test.py 2026-04-30 11:10:07.000000000 
+0200
@@ -444,8 +444,18 @@
         (out, err) = capfd.readouterr()
         assert "could not find/receive links for notexists73" in out
 
-    def test_main_example(self, out_devpi, create_and_upload):
-        result = out_devpi("index", "bases=root/pypi")
+    def test_main_example(
+        self, create_and_upload, devpi_username, remote_index_info, out_devpi
+    ):
+        result = out_devpi(
+            "index",
+            "-c",
+            "mirror",
+            f"type={remote_index_info.type}",
+            f"{remote_index_info.url_option}=https://pypi.org/simple/";,
+        )
+        assert result.ret == 0
+        result = out_devpi("index", f"bases={devpi_username}/mirror")
         assert result.ret == 0
         create_and_upload("exa-1.0", filedefs={
             "tox.ini": """
@@ -491,8 +501,18 @@
         result = out_devpi("test", "--no-upload", "exa")
         assert result.ret == 0
 
-    def test_specific_version(self, out_devpi, create_and_upload):
-        result = out_devpi("index", "bases=root/pypi")
+    def test_specific_version(
+        self, create_and_upload, devpi_username, remote_index_info, out_devpi
+    ):
+        result = out_devpi(
+            "index",
+            "-c",
+            "mirror",
+            f"type={remote_index_info.type}",
+            f"{remote_index_info.url_option}=https://pypi.org/simple/";,
+        )
+        assert result.ret == 0
+        result = out_devpi("index", f"bases={devpi_username}/mirror")
         assert result.ret == 0
         create_and_upload("exa-1.0", filedefs={
             "tox.ini": """
@@ -516,8 +536,18 @@
             *exa-1.0.*
             *tests passed*""")
 
-    def test_pkgname_with_dashes(self, out_devpi, create_and_upload):
-        result = out_devpi("index", "bases=root/pypi")
+    def test_pkgname_with_dashes(
+        self, create_and_upload, devpi_username, remote_index_info, out_devpi
+    ):
+        result = out_devpi(
+            "index",
+            "-c",
+            "mirror",
+            f"type={remote_index_info.type}",
+            f"{remote_index_info.url_option}=https://pypi.org/simple/";,
+        )
+        assert result.ret == 0
+        result = out_devpi("index", f"bases={devpi_username}/mirror")
         assert result.ret == 0
         create_and_upload(("my-pkg-123", "1.0"), filedefs={
             "tox.ini": """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/testing/test_upload.py 
new/devpi_client-7.3.0/testing/test_upload.py
--- old/devpi_client-7.2.1/testing/test_upload.py       2026-03-17 
16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/testing/test_upload.py       2026-04-30 
11:10:07.000000000 +0200
@@ -762,7 +762,8 @@
             """.format(projname_version=projname_version_norm_fnmatch))
 
     def test_upload_to_mirror(
-            self, initproj, out_devpi, projname_version):
+        self, initproj, out_devpi, projname_version, remote_index_info
+    ):
         initproj(projname_version.rsplit("-", 1), {"doc": {
             "conf.py": "#nothing",
             "contents.rst": "",
@@ -770,8 +771,9 @@
         assert Path("setup.py").is_file()
 
         # use mirror
-        out = out_devpi("use", "root/pypi")
-        out.stdout.fnmatch_lines_random("current devpi index*/root/pypi*")
+        out = out_devpi("index", "-c", "mirror", 
f"type={remote_index_info.type}")
+        out = out_devpi("use", "mirror")
+        out.stdout.fnmatch_lines_random("current devpi index*/*/mirror*")
         out = out_devpi("upload", "--no-isolation", "--dry-run")
         out.stdout.fnmatch_lines_random("*does not support upload.")
         out.stdout.fnmatch_lines_random("*it is a mirror.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/devpi_client-7.2.1/tox.ini 
new/devpi_client-7.3.0/tox.ini
--- old/devpi_client-7.2.1/tox.ini      2026-03-17 16:11:43.000000000 +0100
+++ new/devpi_client-7.3.0/tox.ini      2026-04-30 11:10:07.000000000 +0200
@@ -1,5 +1,5 @@
 [pytest]
-norecursedirs = .tox build
+collect_ignore = .tox build
 addopts =
     -r a
     -W once::DeprecationWarning
@@ -10,7 +10,7 @@
 
 
 [tox]
-envlist = py37{,-server520,-setuptools6920,-version},py314,pypy3,flake8
+envlist = py37{,-server6,-setuptools6920,-version},py314,pypy3,flake8
 
 [testenv]
 passenv = GITHUB_ACTIONS, LANG, PIP_INDEX_URL
@@ -20,7 +20,8 @@
        pytest-instafail
        pytest-timeout
        devpi-server;python_version>="3.9"
-       pypitoken
+       pip
+       pypitoken; python_version<"3.15"
        importlib.metadata;python_version<"3.8"
        mock
        sphinx
@@ -45,8 +46,8 @@
 commands = devpi --version
 
 
-[testenv:py37-server520]
-commands = py.test --timeout 300 --instafail {posargs} 
--devpi-server-requirements "devpi-server==5.2.0" --devpi-server-requirements 
"pyramid<2" --devpi-server-requirements "ruamel.yaml"
+[testenv:py37-server6]
+commands = py.test --timeout 300 --instafail {posargs} 
--devpi-server-requirements "devpi-server==6.0.0" --devpi-server-requirements 
"ruamel.yaml" --devpi-server-requirements "setuptools<=81"
 
 
 [testenv:flake8]

Reply via email to