)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"3357ac84d255fc2db8460c724cf5e4bdcb193f63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"faafa689_25a9c445","updated":"2026-10-28 19:01:18.000000000","message":"I don\u0027t want to block this fix with it, but I have an extra idea that might also be done in a follow-up\n\ngiven how complex this whole function has become, it might also be a good idea to add some test cases in `tests/`, but also no blocker","commit_id":"1ae434b5797cdff0c22149efe26b238018acfaf7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6a85067c2c354b155081a6e2460dfad69c3d2053","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c0aedc4d_460403ac","updated":"2026-10-30 16:27:06.000000000","message":"looks like all good here","commit_id":"1ae434b5797cdff0c22149efe26b238018acfaf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c92fe434c5970d88eb4b084d846617137ef9b558","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b3bdd08a_a4a9fd26","updated":"2026-10-27 14:18:16.000000000","message":"recheck","commit_id":"1ae434b5797cdff0c22149efe26b238018acfaf7"}],"inc/python":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"3357ac84d255fc2db8460c724cf5e4bdcb193f63","unresolved":true,"context_lines":[{"line_number":400,"context_line":"        if [ -f \"$project_dir/setup.cfg\" ]; then"},{"line_number":401,"context_line":"            name\u003d$(awk \u0027/^name.*\u003d/ {print $3}\u0027 $project_dir/setup.cfg)"},{"line_number":402,"context_line":"        fi"},{"line_number":403,"context_line":"        if [ -z \"$name\" ] \u0026\u0026 [ -f \"$project_dir/pyproject.toml\" ]; then"},{"line_number":404,"context_line":"            name\u003d$(\"$PYTHON\" -c \u0027import sys, tomllib; print(tomllib.load(sys.stdin.buffer).get(\"project\", {}).get(\"name\", \"\"))\u0027 \u003c \"$project_dir/pyproject.toml\")"},{"line_number":405,"context_line":"        fi"},{"line_number":406,"context_line":"        if [ -z \"$name\" ]; then"},{"line_number":407,"context_line":"            die $LINENO \"Unable to determine the package name for $project_dir\""},{"line_number":408,"context_line":"        fi"},{"line_number":409,"context_line":"        $REQUIREMENTS_DIR/.venv/bin/edit-constraints \\"},{"line_number":410,"context_line":"            $REQUIREMENTS_DIR/upper-constraints.txt -- $name"},{"line_number":411,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"eef6f4c2_ee2f3531","line":408,"range":{"start_line":403,"start_character":0,"end_line":408,"end_character":10},"updated":"2026-10-28 19:01:18.000000000","message":"this still ignores pyproject.toml as long as setup.cfg contains a name. I wonder whether it would be worth using the opportunity to check for consistency if both are present, like:\n\n```suggestion\n        if [ -f \"$project_dir/pyproject.toml\" ]; then\n            local name2\n            name2\u003d$(\"$PYTHON\" -c \u0027import sys, tomllib; print(tomllib.load(sys.stdin.buffer).get(\"project\", {}).get(\"name\", \"\"))\u0027 \u003c \"$project_dir/pyproject.toml\")\n            if [ -n \"$name\" \u0026\u0026 \"$name\" !\u003d \"$name2\"]; then\n                die inconsistent naming found\n            else\n                name\u003dname2\n            fi\n        fi\n        if [ -z \"$name\" ]; then\n            die $LINENO \"Unable to determine the package name for $project_dir\"\n        fi\n```","commit_id":"1ae434b5797cdff0c22149efe26b238018acfaf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"16c367dce6e2e35c304f9c751e1afd0ccf3ff53c","unresolved":true,"context_lines":[{"line_number":400,"context_line":"        if [ -f \"$project_dir/setup.cfg\" ]; then"},{"line_number":401,"context_line":"            name\u003d$(awk \u0027/^name.*\u003d/ {print $3}\u0027 $project_dir/setup.cfg)"},{"line_number":402,"context_line":"        fi"},{"line_number":403,"context_line":"        if [ -z \"$name\" ] \u0026\u0026 [ -f \"$project_dir/pyproject.toml\" ]; then"},{"line_number":404,"context_line":"            name\u003d$(\"$PYTHON\" -c \u0027import sys, tomllib; print(tomllib.load(sys.stdin.buffer).get(\"project\", {}).get(\"name\", \"\"))\u0027 \u003c \"$project_dir/pyproject.toml\")"},{"line_number":405,"context_line":"        fi"},{"line_number":406,"context_line":"        if [ -z \"$name\" ]; then"},{"line_number":407,"context_line":"            die $LINENO \"Unable to determine the package name for $project_dir\""},{"line_number":408,"context_line":"        fi"},{"line_number":409,"context_line":"        $REQUIREMENTS_DIR/.venv/bin/edit-constraints \\"},{"line_number":410,"context_line":"            $REQUIREMENTS_DIR/upper-constraints.txt -- $name"},{"line_number":411,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"fe2535d3_6ab0ada1","line":408,"range":{"start_line":403,"start_character":0,"end_line":408,"end_character":10},"in_reply_to":"eef6f4c2_ee2f3531","updated":"2026-10-29 18:02:11.000000000","message":"\u003e this still ignores pyproject.toml as long as setup.cfg contains a name. I wonder whether it would be worth using the opportunity to check for consistency if both are present, like\n\nThat would be a packaging bug and not something I think devstack should care about. fwiw pbr will break if you do this. From `openstacksdk` (where we have both)\n\n```\n❯ git diff\ndiff --git a/pyproject.toml b/pyproject.toml\nindex a635eb328..05ca29d90 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -3,7 +3,7 @@ requires \u003d [\"pbr\u003e\u003d6.1.1\"]\n build-backend \u003d \"pbr.build\"\n\n [project]\n-name \u003d \"openstacksdk\"\n+name \u003d \"openstacksdk2\"\n\n❯ python -m build .\n... snipped ...\n* Building wheel...\nError parsing\nTraceback (most recent call last):\n  File \"/tmp/build-env-4bgnab9v/lib64/python3.14/site-packages/pbr/setupcfg.py\", line 806, in pbr\n    attrs \u003d setup_cfg_to_args(path, dist.script_args)\n  File \"/tmp/build-env-4bgnab9v/lib64/python3.14/site-packages/pbr/setupcfg.py\", line 367, in setup_cfg_to_args\n    hooks.setup_hook(config)\n    ~~~~~~~~~~~~~~~~^^^^^^^^\n  File \"/tmp/build-env-4bgnab9v/lib64/python3.14/site-packages/pbr/hooks/__init__.py\", line 28, in setup_hook\n    metadata_config.run()\n    ~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/build-env-4bgnab9v/lib64/python3.14/site-packages/pbr/hooks/base.py\", line 30, in run\n    self.hook()\n    ~~~~~~~~~^^\n  File \"/tmp/build-env-4bgnab9v/lib64/python3.14/site-packages/pbr/hooks/metadata.py\", line 28, in hook\n    self.config[\u0027version\u0027] \u003d packaging.get_version(\n                             ~~~~~~~~~~~~~~~~~~~~~^\n        self.config[\u0027name\u0027], self.config.get(\u0027version\u0027, None)\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File \"/tmp/build-env-4bgnab9v/lib64/python3.14/site-packages/pbr/packaging.py\", line 408, in get_version\n    raise Exception(\n    ...\u003c6 lines\u003e...\n    )\nException: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. It\u0027s also possible that there is a mismatch between the package name in setup.cfg and the argument given to pbr.version.VersionInfo. Project name openstacksdk was given, but was not able to be found.\nerror in setup command: Error parsing /tmp/build-via-sdist-9ao12dul/openstacksdk2-4.22.1.dev8/setup.cfg: Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. It\u0027s also possible that there is a mismatch between the package name in setup.cfg and the argument given to pbr.version.VersionInfo. Project name openstacksdk was given, but was not able to be found.\n\nERROR Backend subprocess exited when trying to invoke build_wheel\n```\n\npbr 7.1.x also (finally) removes the need for `setup.py` and `setup.cfg` files, so this should become increasingly less likely over time.","commit_id":"1ae434b5797cdff0c22149efe26b238018acfaf7"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"1079d7a03fe474efe60f6c669b6b6407f0e6c483","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        if [ -f \"$project_dir/setup.cfg\" ]; then"},{"line_number":401,"context_line":"            name\u003d$(awk \u0027/^name.*\u003d/ {print $3}\u0027 $project_dir/setup.cfg)"},{"line_number":402,"context_line":"        fi"},{"line_number":403,"context_line":"        if [ -z \"$name\" ] \u0026\u0026 [ -f \"$project_dir/pyproject.toml\" ]; then"},{"line_number":404,"context_line":"            name\u003d$(\"$PYTHON\" -c \u0027import sys, tomllib; print(tomllib.load(sys.stdin.buffer).get(\"project\", {}).get(\"name\", \"\"))\u0027 \u003c \"$project_dir/pyproject.toml\")"},{"line_number":405,"context_line":"        fi"},{"line_number":406,"context_line":"        if [ -z \"$name\" ]; then"},{"line_number":407,"context_line":"            die $LINENO \"Unable to determine the package name for $project_dir\""},{"line_number":408,"context_line":"        fi"},{"line_number":409,"context_line":"        $REQUIREMENTS_DIR/.venv/bin/edit-constraints \\"},{"line_number":410,"context_line":"            $REQUIREMENTS_DIR/upper-constraints.txt -- $name"},{"line_number":411,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"d612504c_da3bdc3b","line":408,"range":{"start_line":403,"start_character":0,"end_line":408,"end_character":10},"in_reply_to":"fe2535d3_6ab0ada1","updated":"2026-10-30 06:42:27.000000000","message":"ok, so this is already covered, great","commit_id":"1ae434b5797cdff0c22149efe26b238018acfaf7"}]}
