Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0f012ab

Browse files
committed
feat(providers): add dart_provider
closes:#1563
1 parent9e6830c commit0f012ab

File tree

8 files changed

+307
-1
lines changed

8 files changed

+307
-1
lines changed

‎commitizen/commands/init.py‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ def is_rust_cargo(self) -> bool:
5959
defis_npm_package(self)->bool:
6060
returnos.path.isfile("package.json")
6161

62+
@property
63+
defis_dart_package(self)->bool:
64+
returnos.path.isfile("pubspec.yaml")
65+
6266
@property
6367
defis_php_composer(self)->bool:
6468
returnos.path.isfile("composer.json")
@@ -234,6 +238,7 @@ def _ask_version_provider(self) -> str:
234238
"cargo":"cargo: Get and set version from Cargo.toml:project.version field",
235239
"composer":"composer: Get and set version from composer.json:project.version field",
236240
"npm":"npm: Get and set version from package.json:project.version field",
241+
"dart":"dart: Get and set version from pubspec.yaml:version field",
237242
"pep621":"pep621: Get and set version from pyproject.toml:project.version field",
238243
"poetry":"poetry: Get and set version from pyproject.toml:tool.poetry.version field",
239244
"uv":"uv: Get and Get and set version from pyproject.toml and uv.lock",
@@ -252,6 +257,8 @@ def _ask_version_provider(self) -> str:
252257
default_val="cargo"
253258
elifself.project_info.is_npm_package:
254259
default_val="npm"
260+
elifself.project_info.is_dart_package:
261+
default_val="dart"
255262
elifself.project_info.is_php_composer:
256263
default_val="composer"
257264

‎commitizen/providers/__init__.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
fromcommitizen.providers.cargo_providerimportCargoProvider
1515
fromcommitizen.providers.commitizen_providerimportCommitizenProvider
1616
fromcommitizen.providers.composer_providerimportComposerProvider
17+
fromcommitizen.providers.dart_providerimportDartProvider
1718
fromcommitizen.providers.npm_providerimportNpmProvider
1819
fromcommitizen.providers.pep621_providerimportPep621Provider
1920
fromcommitizen.providers.poetry_providerimportPoetryProvider
@@ -24,6 +25,7 @@
2425
"CargoProvider",
2526
"CommitizenProvider",
2627
"ComposerProvider",
28+
"DartProvider",
2729
"NpmProvider",
2830
"Pep621Provider",
2931
"PoetryProvider",
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from __future__importannotations
2+
3+
fromcollections.abcimportMapping
4+
frompathlibimportPath
5+
fromtypingimportAny
6+
7+
fromruamel.yamlimportYAML
8+
9+
fromcommitizen.providers.base_providerimportVersionProvider
10+
11+
12+
classDartProvider(VersionProvider):
13+
"""
14+
dart pubspec.yaml version management
15+
"""
16+
17+
package_filename="pubspec.yaml"
18+
19+
def__init__(self,*args,**kwargs)->None:
20+
super().__init__(*args,**kwargs)
21+
self._yaml=YAML()
22+
self._yaml.preserve_quotes=True
23+
self._yaml.indent(mapping=2,sequence=4,offset=2)
24+
25+
@property
26+
defpackage_file(self)->Path:
27+
returnPath()/self.package_filename
28+
29+
defget_version(self)->str:
30+
print(self.package_file.read_text())
31+
document=self._yaml.load(self.package_file.read_text())
32+
returnself.get(document)
33+
34+
defset_version(self,version:str)->None:
35+
document=self._yaml.load(self.package_file.read_text())
36+
self.set(document,version)
37+
self._yaml.dump(document,self.package_file)
38+
39+
defget(self,document:Mapping[str,str])->str:
40+
# Extract the version without the build number
41+
version=document["version"]
42+
returnversion.split("+")[0]if"+"inversionelseversion
43+
44+
defset(self,document:dict[str,Any],version:str)->None:
45+
# To enforce to save the version in pubspec without quotes
46+
# even if the version could be interpreted as float by yaml
47+
# dump
48+
version_value:Any
49+
try:
50+
version_value=float(version)
51+
exceptValueError:
52+
version_value=version
53+
document["version"]=version_value

‎docs/commands/init.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ During the initialization process, you'll be prompted to configure the following
3333
2.**Version Provider**: Choose how to manage versioning in your project. Commitizen supports multiple version management systems:
3434
-`commitizen`: Uses Commitizen's built-in version management system
3535
-`npm`: Manages version in`package.json` for Node.js projects
36+
-`dart`: Manages version in`pubspec.yaml` for Dart projects
3637
-`cargo`: Manages version in`Cargo.toml` for Rust projects
3738
-`composer`: Manages version in`composer.json` for PHP projects
3839
-`pep621`: Uses`pyproject.toml` with PEP 621 standard

‎docs/config.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ Commitizen provides some version providers for some well known formats:
335335
| `uv` | Get and set version from `pyproject.toml` `project.version` field and `uv.lock` `package.version` field whose `package.name` field is the same as `pyproject.toml` `project.name` field |
336336
| `cargo` | Get and set version from `Cargo.toml` `package.version` field and `Cargo.lock` `package.version` field whose `package.name` field is the same as `Cargo.toml` `package.name` field |
337337
| `npm` | Get and set version from `package.json` `version` field, `package-lock.json` `version,packages.''.version` fields if the file exists, and `npm-shrinkwrap.json` `version,packages.''.version` fields if the file exists |
338+
| `dart` | Get and set version from `pubspec.yaml` `version` field |
338339
| `composer` | Get and set version from `composer.json` `project.version` field |
339340

340341
!!! note

‎poetry.lock‎

Lines changed: 77 additions & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎pyproject.toml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ dependencies = [
2424
"charset-normalizer (>=2.1.0,<4)",
2525
# Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility
2626
"importlib-metadata >=8.0.0,<8.7.0 ; python_version < '3.10'",
27+
"ruamel-yaml (>=0.18.14,<0.19.0)",
2728
]
2829
keywords = ["commitizen","conventional","commits","git"]
2930
# See also: https://pypi.org/classifiers/
@@ -71,6 +72,7 @@ cargo = "commitizen.providers:CargoProvider"
7172
commitizen ="commitizen.providers:CommitizenProvider"
7273
composer ="commitizen.providers:ComposerProvider"
7374
npm ="commitizen.providers:NpmProvider"
75+
dart ="commitizen.providers:DartProvider"
7476
pep621 ="commitizen.providers:Pep621Provider"
7577
poetry ="commitizen.providers:PoetryProvider"
7678
scm ="commitizen.providers:ScmProvider"
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
from __future__importannotations
2+
3+
frompathlibimportPath
4+
fromtextwrapimportdedent
5+
6+
importpytest
7+
8+
fromcommitizen.config.base_configimportBaseConfig
9+
fromcommitizen.providersimportget_provider
10+
fromcommitizen.providers.dart_providerimportDartProvider
11+
12+
DART_YAML="""\
13+
name: my_super_package
14+
description: A new Flutter project.
15+
16+
# Bla, bla, bla
17+
publish_to: "none" # Remove this line if you wish to publish to pub.dev
18+
19+
version: 0.1.0+1
20+
21+
environment:
22+
sdk: ^3.7.2
23+
# note that this only enforces that the Flutter version is at least the value specified. It does not
24+
# force it to this specific version
25+
flutter: 3.29.2
26+
27+
# Bla, bla, bla
28+
dependencies:
29+
flutter:
30+
sdk: flutter
31+
32+
# Some package dependencies
33+
# network
34+
dio: ^5.8.0+1
35+
36+
# The following section is specific to Flutter packages.
37+
flutter:
38+
# The following line ensures that the Material Icons font is
39+
# included with your application, so that you can use the icons in
40+
# the material Icons class.
41+
uses-material-design: true
42+
43+
# To add assets to your application, add an assets section, like this:
44+
assets:
45+
- assets/images/
46+
"""
47+
48+
DART_YAML_FLOAT_PARSEABLE_EXPECTED="""\
49+
name: my_super_package
50+
description: A new Flutter project.
51+
52+
# Bla, bla, bla
53+
publish_to: "none" # Remove this line if you wish to publish to pub.dev
54+
55+
version: 42.1
56+
57+
environment:
58+
sdk: ^3.7.2
59+
# note that this only enforces that the Flutter version is at least the value specified. It does not
60+
# force it to this specific version
61+
flutter: 3.29.2
62+
63+
# Bla, bla, bla
64+
dependencies:
65+
flutter:
66+
sdk: flutter
67+
68+
# Some package dependencies
69+
# network
70+
dio: ^5.8.0+1
71+
72+
# The following section is specific to Flutter packages.
73+
flutter:
74+
# The following line ensures that the Material Icons font is
75+
# included with your application, so that you can use the icons in
76+
# the material Icons class.
77+
uses-material-design: true
78+
79+
# To add assets to your application, add an assets section, like this:
80+
assets:
81+
- assets/images/
82+
"""
83+
84+
DART_YAML_SEMVER_EXPECTED="""\
85+
name: my_super_package
86+
description: A new Flutter project.
87+
88+
# Bla, bla, bla
89+
publish_to: "none" # Remove this line if you wish to publish to pub.dev
90+
91+
version: 2.3.4
92+
93+
environment:
94+
sdk: ^3.7.2
95+
# note that this only enforces that the Flutter version is at least the value specified. It does not
96+
# force it to this specific version
97+
flutter: 3.29.2
98+
99+
# Bla, bla, bla
100+
dependencies:
101+
flutter:
102+
sdk: flutter
103+
104+
# Some package dependencies
105+
# network
106+
dio: ^5.8.0+1
107+
108+
# The following section is specific to Flutter packages.
109+
flutter:
110+
# The following line ensures that the Material Icons font is
111+
# included with your application, so that you can use the icons in
112+
# the material Icons class.
113+
uses-material-design: true
114+
115+
# To add assets to your application, add an assets section, like this:
116+
assets:
117+
- assets/images/
118+
"""
119+
120+
121+
@pytest.mark.parametrize(
122+
"content, expected",
123+
((DART_YAML,DART_YAML_FLOAT_PARSEABLE_EXPECTED),),
124+
)
125+
deftest_dart_provider_with_float_parseable_new_version(
126+
config:BaseConfig,
127+
chdir:Path,
128+
content:str,
129+
expected:str,
130+
):
131+
filename=DartProvider.package_filename
132+
file=chdir/filename
133+
file.write_text(dedent(content))
134+
config.settings["version_provider"]="dart"
135+
136+
provider=get_provider(config)
137+
assertisinstance(provider,DartProvider)
138+
assertprovider.get_version()=="0.1.0"
139+
140+
provider.set_version("42.1")
141+
assertfile.read_text()==dedent(expected)
142+
143+
144+
@pytest.mark.parametrize(
145+
"content, expected",
146+
((DART_YAML,DART_YAML_SEMVER_EXPECTED),),
147+
)
148+
deftest_dart_provider_with_semver_new_version(
149+
config:BaseConfig,
150+
chdir:Path,
151+
content:str,
152+
expected:str,
153+
):
154+
filename=DartProvider.package_filename
155+
file=chdir/filename
156+
file.write_text(dedent(content))
157+
config.settings["version_provider"]="dart"
158+
159+
provider=get_provider(config)
160+
assertisinstance(provider,DartProvider)
161+
assertprovider.get_version()=="0.1.0"
162+
163+
provider.set_version("2.3.4")
164+
assertfile.read_text()==dedent(expected)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp