1
1
from __future__ import annotations
2
2
3
+ import glob
3
4
from pathlib import Path
4
5
5
6
import tomlkit
@@ -22,8 +23,10 @@ def lock_file(self) -> Path:
22
23
return Path () / self .lock_filename
23
24
24
25
def get (self , document : tomlkit .TOMLDocument ) -> str :
26
+ # If there is a root package, change its version (but not the workspace version)
25
27
try :
26
28
return document ["package" ]["version" ] # type: ignore[index,return-value]
29
+ # Else, bump the workspace version
27
30
except tomlkit .exceptions .NonExistentKey :
28
31
...
29
32
return document ["workspace" ]["package" ]["version" ] # type: ignore[index,return-value]
@@ -43,15 +46,39 @@ def set_version(self, version: str) -> None:
43
46
44
47
def set_lock_version (self , version : str ) -> None :
45
48
cargo_toml_content = tomlkit .parse (self .file .read_text ())
49
+ cargo_lock_content = tomlkit .parse (self .lock_file .read_text ())
50
+ packages : tomlkit .items .AoT = cargo_lock_content ["package" ] # type: ignore[assignment]
46
51
try :
47
52
package_name = cargo_toml_content ["package" ]["name" ] # type: ignore[index]
53
+ for i , package in enumerate (packages ):
54
+ if package ["name" ] == package_name :
55
+ cargo_lock_content ["package" ][i ]["version" ] = version # type: ignore[index]
56
+ break
48
57
except tomlkit .exceptions .NonExistentKey :
49
- package_name = cargo_toml_content ["workspace" ]["package" ]["name" ] # type: ignore[index]
58
+ workspace_members = (
59
+ cargo_toml_content .get ("workspace" , {})
60
+ .get ("package" , {})
61
+ .get ("members" , [])
62
+ )
63
+ members_inheriting = []
64
+
65
+ for member in workspace_members :
66
+ matched_paths = glob .glob (member , recursive = True )
67
+ for path in matched_paths :
68
+ cargo_file = Path (path ) / "Cargo.toml"
69
+ cargo_toml_content = tomlkit .parse (cargo_file .read_text ())
70
+ try :
71
+ version_workspace = cargo_toml_content ["package" ]["version" ][ # type: ignore[index]
72
+ "workspace"
73
+ ]
74
+ if version_workspace is True :
75
+ package_name = cargo_toml_content ["package" ]["name" ] # type: ignore[index]
76
+ members_inheriting .append (package_name )
77
+ except tomlkit .exceptions .NonExistentKey :
78
+ continue
79
+
80
+ for i , package in enumerate (packages ):
81
+ if package ["name" ] in members_inheriting :
82
+ cargo_lock_content ["package" ][i ]["version" ] = version # type: ignore[index]
50
83
51
- cargo_lock_content = tomlkit .parse (self .lock_file .read_text ())
52
- packages : tomlkit .items .AoT = cargo_lock_content ["package" ] # type: ignore[assignment]
53
- for i , package in enumerate (packages ):
54
- if package ["name" ] == package_name :
55
- cargo_lock_content ["package" ][i ]["version" ] = version # type: ignore[index]
56
- break
57
84
self .lock_file .write_text (tomlkit .dumps (cargo_lock_content ))
0 commit comments