Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-poetry-dynamic-versioning for
openSUSE:Factory checked in at 2024-07-01 11:21:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-poetry-dynamic-versioning (Old)
and
/work/SRC/openSUSE:Factory/.python-poetry-dynamic-versioning.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-poetry-dynamic-versioning"
Mon Jul 1 11:21:35 2024 rev:4 rq:1184134 version:1.4.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-poetry-dynamic-versioning/python-poetry-dynamic-versioning.changes
2024-05-08 11:42:32.394913605 +0200
+++
/work/SRC/openSUSE:Factory/.python-poetry-dynamic-versioning.new.18349/python-poetry-dynamic-versioning.changes
2024-07-01 11:22:22.567442398 +0200
@@ -1,0 +2,7 @@
+Sun Jun 30 20:01:26 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 1.4.0:
+ * The plugin now supports Poetry's upcoming PEP-621
+ functionality.
+
+-------------------------------------------------------------------
Old:
----
poetry_dynamic_versioning-1.3.0.tar.gz
New:
----
poetry_dynamic_versioning-1.4.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-poetry-dynamic-versioning.spec ++++++
--- /var/tmp/diff_new_pack.FzNjqZ/_old 2024-07-01 11:22:24.135499149 +0200
+++ /var/tmp/diff_new_pack.FzNjqZ/_new 2024-07-01 11:22:24.151499727 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-poetry-dynamic-versioning
-Version: 1.3.0
+Version: 1.4.0
Release: 0
Summary: Plugin for Poetry to enable dynamic versioning based on VCS
tags
License: MIT
++++++ poetry_dynamic_versioning-1.3.0.tar.gz ->
poetry_dynamic_versioning-1.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_dynamic_versioning-1.3.0/CHANGELOG.md
new/poetry_dynamic_versioning-1.4.0/CHANGELOG.md
--- old/poetry_dynamic_versioning-1.3.0/CHANGELOG.md 2024-04-30
05:20:45.549694000 +0200
+++ new/poetry_dynamic_versioning-1.4.0/CHANGELOG.md 2024-06-17
23:51:59.444518600 +0200
@@ -1,3 +1,26 @@
+## v1.4.0 (2024-06-17)
+
+* Added:
+ * The plugin now supports Poetry's upcoming PEP-621 functionality.
+ More info here: https://github.com/python-poetry/poetry/issues/3332
+
+ If your pyproject.toml defines `tool.poetry.name`,
+ then the plugin will preserve its existing behavior.
+
+ However, if your pyproject.toml:
+
+ * does not define `tool.poetry.name`
+ * defines `project.name`
+ * defines `project.dynamic` to include `"version"`
+ * does not define `project.version`
+
+ ...then the plugin will enable its PEP-621 functionality.
+
+ Because PEP-621 support is not yet released and finalized in Poetry itself,
+ it is also subject to change in the plugin.
+
+ ([Prototyped by
edgarrmondragon](https://github.com/mtkennerly/poetry-dynamic-versioning/pull/181))
+
## v1.3.0 (2024-04-29)
* Added:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_dynamic_versioning-1.3.0/PKG-INFO
new/poetry_dynamic_versioning-1.4.0/PKG-INFO
--- old/poetry_dynamic_versioning-1.3.0/PKG-INFO 1970-01-01
01:00:00.000000000 +0100
+++ new/poetry_dynamic_versioning-1.4.0/PKG-INFO 1970-01-01
01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: poetry-dynamic-versioning
-Version: 1.3.0
+Version: 1.4.0
Summary: Plugin for Poetry to enable dynamic versioning based on VCS tags
Home-page: https://github.com/mtkennerly/poetry-dynamic-versioning
License: MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_dynamic_versioning-1.3.0/poetry_dynamic_versioning/__init__.py
new/poetry_dynamic_versioning-1.4.0/poetry_dynamic_versioning/__init__.py
--- old/poetry_dynamic_versioning-1.3.0/poetry_dynamic_versioning/__init__.py
2024-04-30 05:16:33.488901600 +0200
+++ new/poetry_dynamic_versioning-1.4.0/poetry_dynamic_versioning/__init__.py
2024-06-18 00:02:36.863616000 +0200
@@ -8,6 +8,7 @@
import subprocess
import sys
import textwrap
+from enum import Enum
from importlib import import_module
from pathlib import Path
from typing import Mapping, MutableMapping, Optional, Sequence, Tuple, Union
@@ -118,17 +119,26 @@
pass
+class _Mode(Enum):
+ Classic = "classic"
+ Pep621 = "pep621"
+
+
class _ProjectState:
def __init__(
self,
path: Path,
- original_version: str,
+ original_version: Optional[str],
version: str,
+ mode: _Mode,
+ dynamic_index: Optional[int],
substitutions: Optional[MutableMapping[Path, str]] = None,
) -> None:
self.path = path
self.original_version = original_version
self.version = version
+ self.mode = mode
+ self.dynamic_index = dynamic_index
self.substitutions = (
{} if substitutions is None else substitutions
) # type: MutableMapping[Path, str]
@@ -590,11 +600,21 @@
def _apply_version(
- version: str, instance: Version, config: _Config, pyproject_path: Path,
retain: bool = False
+ name: str,
+ version: str,
+ instance: Version,
+ config: _Config,
+ pyproject_path: Path,
+ mode: _Mode,
+ retain: bool = False,
) -> None:
pyproject = tomlkit.parse(pyproject_path.read_bytes().decode("utf-8"))
- pyproject["tool"]["poetry"]["version"] = version # type: ignore
+ if mode == _Mode.Classic:
+ pyproject["tool"]["poetry"]["version"] = version # type: ignore
+ elif mode == _Mode.Pep621:
+ pyproject["project"]["dynamic"].remove("version") # type: ignore
+ pyproject["project"]["version"] = version # type: ignore
# Disable the plugin in case we're building a source distribution,
# which won't have access to the VCS info at install time.
@@ -604,8 +624,6 @@
pyproject_path.write_bytes(tomlkit.dumps(pyproject).encode("utf-8"))
- name = pyproject["tool"]["poetry"]["name"] # type: ignore
-
for file_name, file_info in config["files"].items():
full_file = pyproject_path.parent.joinpath(file_name)
@@ -635,19 +653,12 @@
def _get_and_apply_version(
- name: Optional[str] = None,
- original: Optional[str] = None,
pyproject: Optional[Mapping] = None,
pyproject_path: Optional[Path] = None,
retain: bool = False,
force: bool = False,
- # fmt: off
- io: bool = True
- # fmt: on
+ io: bool = True,
) -> Optional[str]:
- if name is not None and name in _state.projects:
- return name
-
if pyproject_path is None:
pyproject_path = _get_pyproject_path()
if pyproject_path is None:
@@ -656,11 +667,32 @@
if pyproject is None:
pyproject = tomlkit.parse(pyproject_path.read_bytes().decode("utf-8"))
- if name is None or original is None:
+ classic = (
+ "tool" in pyproject
+ and "poetry" in pyproject["tool"]
+ and "name" in pyproject["tool"]["poetry"]
+ )
+ pep621 = (
+ "project" in pyproject
+ and "name" in pyproject["project"]
+ and "dynamic" in pyproject["project"]
+ and "version" in pyproject["project"]["dynamic"]
+ and "version" not in pyproject["project"]
+ )
+
+ if classic:
name = pyproject["tool"]["poetry"]["name"]
original = pyproject["tool"]["poetry"]["version"]
- if name in _state.projects:
- return name
+ dynamic_index = None
+ elif pep621:
+ name = pyproject["project"]["name"]
+ original = pyproject["project"].get("version")
+ dynamic_index = pyproject["project"]["dynamic"].index("version")
+ else:
+ return name if name in _state.projects else None
+
+ if name in _state.projects:
+ return name
config = _get_config(pyproject)
if not config["enable"] and not force:
@@ -674,11 +706,20 @@
finally:
os.chdir(str(initial_dir))
- # Condition will always be true, but it makes Mypy happy.
- if name is not None and original is not None:
- _state.projects[name] = _ProjectState(pyproject_path, original,
version)
+ if classic and name is not None and original is not None:
+ mode = _Mode.Classic
+ _state.projects[name] = _ProjectState(
+ pyproject_path, original, version, mode, dynamic_index
+ )
+ if io:
+ _apply_version(name, version, instance, config, pyproject_path,
mode, retain)
+ elif pep621 and name is not None:
+ mode = _Mode.Pep621
+ _state.projects[name] = _ProjectState(
+ pyproject_path, original, version, mode, dynamic_index
+ )
if io:
- _apply_version(version, instance, config, pyproject_path, retain)
+ _apply_version(name, version, instance, config, pyproject_path,
mode, retain)
return name
@@ -704,7 +745,15 @@
# Reread pyproject.toml in case the substitutions affected it.
pyproject = tomlkit.parse(state.path.read_bytes().decode("utf-8"))
- pyproject["tool"]["poetry"]["version"] = state.original_version #
type: ignore
+ if state.mode == _Mode.Classic:
+ if state.original_version is not None:
+ pyproject["tool"]["poetry"]["version"] =
state.original_version # type: ignore
+ elif state.mode == _Mode.Pep621:
+ if state.dynamic_index is not None:
+ index = state.dynamic_index
+ pyproject["project"]["dynamic"].insert(index, "version") #
type: ignore
+ if "version" in pyproject["project"]: # type: ignore
+ pyproject["project"].pop("version") # type: ignore
if not retain and not _state.cli_mode:
pyproject["tool"]["poetry-dynamic-versioning"]["enable"] = True #
type: ignore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_dynamic_versioning-1.3.0/poetry_dynamic_versioning/patch.py
new/poetry_dynamic_versioning-1.4.0/poetry_dynamic_versioning/patch.py
--- old/poetry_dynamic_versioning-1.3.0/poetry_dynamic_versioning/patch.py
2023-08-21 04:56:59.654177000 +0200
+++ new/poetry_dynamic_versioning-1.4.0/poetry_dynamic_versioning/patch.py
2024-06-17 23:45:11.043510400 +0200
@@ -24,8 +24,6 @@
if not _state.cli_mode:
name = _get_and_apply_version(
- name=instance.local_config["name"],
- original=instance.local_config["version"],
pyproject=instance.pyproject.data,
pyproject_path=_get_pyproject_path_from_poetry(instance.pyproject),
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_dynamic_versioning-1.3.0/poetry_dynamic_versioning/plugin.py
new/poetry_dynamic_versioning-1.4.0/poetry_dynamic_versioning/plugin.py
--- old/poetry_dynamic_versioning-1.3.0/poetry_dynamic_versioning/plugin.py
2024-02-09 22:33:20.484435000 +0100
+++ new/poetry_dynamic_versioning-1.4.0/poetry_dynamic_versioning/plugin.py
2024-06-17 23:45:11.044512500 +0200
@@ -82,8 +82,6 @@
# fmt: on
) -> None:
name = _get_and_apply_version(
- name=poetry.local_config["name"],
- original=poetry.local_config["version"],
pyproject=poetry.pyproject.data,
pyproject_path=_get_pyproject_path_from_poetry(poetry.pyproject),
retain=retain,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_dynamic_versioning-1.3.0/pyproject.toml
new/poetry_dynamic_versioning-1.4.0/pyproject.toml
--- old/poetry_dynamic_versioning-1.3.0/pyproject.toml 2024-04-30
05:20:50.199022300 +0200
+++ new/poetry_dynamic_versioning-1.4.0/pyproject.toml 2024-06-17
23:52:03.505818100 +0200
@@ -1,6 +1,6 @@
[tool.poetry]
name = "poetry-dynamic-versioning"
-version = "1.3.0"
+version = "1.4.0"
description = "Plugin for Poetry to enable dynamic versioning based on VCS
tags"
license = "MIT"
authors = ["Matthew T. Kennerly <[email protected]>"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_dynamic_versioning-1.3.0/tests/project-pep621/project_pep621/__init__.py
new/poetry_dynamic_versioning-1.4.0/tests/project-pep621/project_pep621/__init__.py
---
old/poetry_dynamic_versioning-1.3.0/tests/project-pep621/project_pep621/__init__.py
1970-01-01 01:00:00.000000000 +0100
+++
new/poetry_dynamic_versioning-1.4.0/tests/project-pep621/project_pep621/__init__.py
2024-06-17 23:45:11.044512500 +0200
@@ -0,0 +1 @@
+__version__ = "0.0.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_dynamic_versioning-1.3.0/tests/project-pep621/pyproject.toml
new/poetry_dynamic_versioning-1.4.0/tests/project-pep621/pyproject.toml
--- old/poetry_dynamic_versioning-1.3.0/tests/project-pep621/pyproject.toml
1970-01-01 01:00:00.000000000 +0100
+++ new/poetry_dynamic_versioning-1.4.0/tests/project-pep621/pyproject.toml
2024-06-17 23:45:11.045522500 +0200
@@ -0,0 +1,15 @@
+[project]
+name = "project-pep621"
+dynamic = ["version"]
+
+[tool.poetry]
+# The plugin itself doesn't need this, but Poetry does:
+#
https://github.com/python-poetry/poetry-core/blob/c80dcc53793316104862d2c3ac888dde3c263b08/tests/test_factory.py#L39-L42
+version = "0.0.0"
+
+[tool.poetry-dynamic-versioning]
+enable = true
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_dynamic_versioning-1.3.0/tests/test_integration.py
new/poetry_dynamic_versioning-1.4.0/tests/test_integration.py
--- old/poetry_dynamic_versioning-1.3.0/tests/test_integration.py
2023-12-02 08:59:50.665171100 +0100
+++ new/poetry_dynamic_versioning-1.4.0/tests/test_integration.py
2024-06-17 23:45:11.045522500 +0200
@@ -7,6 +7,7 @@
from pathlib import Path
from typing import Optional, Sequence, Tuple
+import dunamai
import pytest
import tomlkit
@@ -16,6 +17,10 @@
DUMMY_DIST = DUMMY / "dist"
DUMMY_PYPROJECT = DUMMY / "pyproject.toml"
+DUMMY_PEP621 = ROOT / "tests" / "project-pep621"
+DUMMY_PEP621_DIST = DUMMY_PEP621 / "dist"
+DUMMY_PEP621_PYPROJECT = DUMMY_PEP621 / "pyproject.toml"
+
DUMMY_VERSION = "0.0.999"
DEPENDENCY_DYNAMIC_VERSION = "0.0.888"
@@ -74,11 +79,12 @@
@pytest.fixture(autouse=True)
def before_each():
- run(f"git checkout -- {DUMMY.as_posix()}")
- delete(DUMMY / "dist")
- delete(DUMMY / "poetry.lock")
- for file in DUMMY.glob("*.whl"):
- delete(file)
+ for project in [DUMMY, DUMMY_PEP621]:
+ run(f"git checkout -- {project.as_posix()}")
+ delete(project / "dist")
+ delete(project / "poetry.lock")
+ for file in project.glob("*.whl"):
+ delete(file)
def test_plugin_enabled():
@@ -123,7 +129,10 @@
def test_keep_pyproject_modifications():
package = "cachy"
# Using --optional to avoid actually installing the package
- run(f"poetry add --optional {package}", where=DUMMY)
+ if "USE_PEP621" in os.environ:
+ run(f"poetry add --optional main {package}", where=DUMMY)
+ else:
+ run(f"poetry add --optional {package}", where=DUMMY)
# Make sure pyproject.toml contains the new package dependency
data = DUMMY_PYPROJECT.read_bytes().decode("utf-8")
assert package in data
@@ -267,3 +276,46 @@
# Just skip it for now.
if "CI" not in os.environ:
assert "poetry-dynamic-versioning" in out
+
+
[email protected]("USE_PEP621" not in os.environ, reason="Requires Poetry
with PEP-621 support")
+def test_pep621_with_dynamic_version():
+ version = dunamai.Version.from_git().serialize()
+
+ run("poetry-dynamic-versioning", where=DUMMY_PEP621)
+ pyproject =
tomlkit.parse(DUMMY_PEP621_PYPROJECT.read_bytes().decode("utf-8"))
+ assert pyproject["project"]["version"] == version
+ assert "version" not in pyproject["project"]["dynamic"]
+ assert f'__version__ = "{version}"' in (
+ DUMMY_PEP621 / "project_pep621" / "__init__.py"
+ ).read_bytes().decode("utf-8")
+
+
[email protected]("USE_PEP621" not in os.environ, reason="Requires Poetry
with PEP-621 support")
+def test_pep621_with_dynamic_version_and_cleanup():
+ version = dunamai.Version.from_git().serialize()
+
+ run("poetry build", where=DUMMY_PEP621)
+ pyproject =
tomlkit.parse(DUMMY_PEP621_PYPROJECT.read_bytes().decode("utf-8"))
+ assert "version" not in pyproject["project"]
+ assert "version" in pyproject["project"]["dynamic"]
+ assert '__version__ = "0.0.0"' in (
+ DUMMY_PEP621 / "project_pep621" / "__init__.py"
+ ).read_bytes().decode("utf-8")
+
+ artifact = next(DUMMY_PEP621_DIST.glob("*.whl"))
+ assert f"-{version}-" in artifact.name
+
+
[email protected]("USE_PEP621" not in os.environ, reason="Requires Poetry
with PEP-621 support")
+def test_pep621_without_dynamic_version():
+ pyproject =
tomlkit.parse(DUMMY_PEP621_PYPROJECT.read_bytes().decode("utf-8"))
+ pyproject["project"]["dynamic"] = []
+
DUMMY_PEP621_PYPROJECT.write_bytes(tomlkit.dumps(pyproject).encode("utf-8"))
+
+ run("poetry-dynamic-versioning", codes=[1], where=DUMMY_PEP621)
+ pyproject =
tomlkit.parse(DUMMY_PEP621_PYPROJECT.read_bytes().decode("utf-8"))
+ assert "version" not in pyproject["project"]
+ assert '__version__ = "0.0.0"' in (
+ DUMMY_PEP621 / "project_pep621" / "__init__.py"
+ ).read_bytes().decode("utf-8")