Skip to content

Commit 978b7c0

Browse files
authored
feat: add pdm/__init__.py to make it a normal package (#3011)
* feat: add pdm/__init__.py to make it a normal package Signed-off-by: Frost Ming <[email protected]> * add news Signed-off-by: Frost Ming <[email protected]>
1 parent 3067164 commit 978b7c0

File tree

7 files changed

+41
-52
lines changed

7 files changed

+41
-52
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,4 @@ temp.py
138138
# Pyannotate generated stubs
139139
type_info.json
140140
.pdm-build/
141-
src/pdm/models/VERSION
141+
src/pdm/VERSION

news/3011.feature.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add `__init__.py` to the `pdm` package, making it a normal package.

pdm.lock

+10-21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+2-3
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pdm = "pdm.core:main"
7676

7777
[tool.pdm.version]
7878
source = "scm"
79-
write_to = "pdm/models/VERSION"
79+
write_to = "pdm/VERSION"
8080

8181
[tool.pdm.build]
8282
excludes = ["./**/.git"]
@@ -127,10 +127,9 @@ doc = [
127127
"mkdocs-version-annotations>=1.0.0",
128128
]
129129
workflow = [
130-
"pdm-pep517>=1.0.0,<2.0.0",
131130
"parver>=0.3.1",
132131
"towncrier>=20",
133-
"pycomplete~=0.3"
132+
"pycomplete~=0.3",
134133
]
135134

136135
[tool.ruff]

src/pdm/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""This __init__.py file is empty and does not expose any members at the package level."""

src/pdm/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def read_version() -> str:
55
try:
66
return importlib_metadata.version(__package__ or "pdm")
77
except importlib_metadata.PackageNotFoundError:
8-
return resources_read_text("pdm.models", "VERSION").strip()
8+
return resources_read_text("pdm", "VERSION").strip()
99

1010

1111
__version__ = read_version()

tasks/release.py

+25-26
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
from __future__ import annotations
2+
13
import argparse
24
import subprocess
35
import sys
46
from pathlib import Path
5-
from typing import Any
7+
from typing import TYPE_CHECKING, Any, cast
68

79
import parver
810
from rich.console import Console
911

12+
if TYPE_CHECKING:
13+
from parver._typing import PreTag
14+
1015
_console = Console(highlight=False)
1116
_err_console = Console(stderr=True, highlight=False)
1217

@@ -21,42 +26,37 @@ def echo(*args: str, err: bool = False, **kwargs: Any):
2126
PROJECT_DIR = Path(__file__).parent.parent
2227

2328

24-
def get_current_version():
25-
from pdm.pep517.base import Builder
26-
27-
metadata = Builder(PROJECT_DIR).meta
28-
return metadata.version
29+
def get_current_version() -> str:
30+
return subprocess.check_output(["git", "describe", "--abbrev=0", "--tags"], cwd=PROJECT_DIR).decode().strip()
2931

3032

31-
def bump_version(pre=None, major=False, minor=False, patch=True):
32-
if not any([major, minor, patch, pre]):
33-
patch = True
34-
if len([v for v in [major, minor, patch] if v]) > 1:
35-
echo(
36-
"Only one option should be provided among (--major, --minor, --patch)",
37-
style="red",
38-
err=True,
39-
)
33+
def bump_version(pre: str | None = None, major: bool = False, minor: bool = False) -> str:
34+
if major and minor:
35+
echo("Only one option should be provided among (--major, --minor)", style="red", err=True)
4036
sys.exit(1)
4137
current_version = parver.Version.parse(get_current_version())
4238
if major or minor:
43-
version_idx = [major, minor, patch].index(True)
39+
version_idx = [major, minor].index(True)
4440
version = current_version.bump_release(index=version_idx)
45-
else:
41+
elif pre is not None and current_version.is_prerelease:
4642
version = current_version
47-
if pre:
48-
if version.pre_tag == pre:
49-
pass
43+
else:
44+
version = current_version.bump_release(index=2)
45+
if pre is not None:
46+
if version.pre_tag != pre:
47+
version = version.replace(pre_tag=cast("PreTag", pre), pre=0)
5048
else:
51-
version = version.replace(pre_tag=pre, pre=0)
49+
version = version.bump_pre()
5250
else:
5351
version = version.replace(pre=None, post=None)
5452
version = version.replace(local=None, dev=None)
5553
return str(version)
5654

5755

58-
def release(dry_run=False, commit=True, pre=None, major=False, minor=False, patch=True):
59-
new_version = bump_version(pre, major, minor, patch)
56+
def release(
57+
dry_run: bool = False, commit: bool = True, pre: str | None = None, major: bool = False, minor: bool = False
58+
) -> None:
59+
new_version = bump_version(pre, major, minor)
6060
echo(f"Bump version to: {new_version}", style="yellow")
6161
if dry_run:
6262
subprocess.check_call(["towncrier", "build", "--version", new_version, "--draft"])
@@ -82,14 +82,13 @@ def parse_args(argv=None):
8282
help="Do not commit to Git",
8383
)
8484
group = parser.add_argument_group(title="version part")
85-
group.add_argument("--pre", help="Pre tag")
85+
group.add_argument("--pre", help="Bump with the pre tag", choices=["a", "b", "rc"])
8686
group.add_argument("--major", action="store_true", help="Bump major version")
8787
group.add_argument("--minor", action="store_true", help="Bump minor version")
88-
group.add_argument("--patch", action="store_true", help="Bump patch version")
8988

9089
return parser.parse_args(argv)
9190

9291

9392
if __name__ == "__main__":
9493
args = parse_args()
95-
release(args.dry_run, args.commit, args.pre, args.major, args.minor, args.patch)
94+
release(args.dry_run, args.commit, args.pre, args.major, args.minor)

0 commit comments

Comments
 (0)